Python Hall of Shame: Difference between revisions
From YM2149.org
Jump to navigationJump to search
No edit summary |
(→roman) |
||
Line 6: | Line 6: | ||
* strict coding standards ineffective at filtering out bad code, though perhaps they've done enough to facilitate fixing forward | * strict coding standards ineffective at filtering out bad code, though perhaps they've done enough to facilitate fixing forward | ||
* at least there are tests, so we can refactor with confidence | * at least there are tests, so we can refactor with confidence | ||
* | * romanNumeralMap is not self-documenting, i would call it something like numeraltovalue and delete the useless comment | ||
** this embeds the subtraction logic, normally such tasks are for computers not humans | |||
* conversion of 0 to N may violate [[principle of least astonishment]] | |||
* romanNumeralPattern duplicates data already expressed in romanNumeralMap | |||
* tests modify sys, when argparse has api to pass in custom argv | |||
** and stdout, when main could be refactored to make it testable without changing stdout | |||
** if you really need to redirect stdout there is api in unittest to do that | |||
** but ideally do not modify global state at all, as any leaks can make subsequent testing invalid | |||
[[Category:Programming]] | [[Category:Programming]] |
Latest revision as of 21:41, 17 February 2025
roman
Lib for converting to and from roman numerals, riddled with examples of how at a granular level not to write software.
- https://github.com/zopefoundation/roman
- strict coding standards ineffective at filtering out bad code, though perhaps they've done enough to facilitate fixing forward
- at least there are tests, so we can refactor with confidence
- romanNumeralMap is not self-documenting, i would call it something like numeraltovalue and delete the useless comment
- this embeds the subtraction logic, normally such tasks are for computers not humans
- conversion of 0 to N may violate principle of least astonishment
- romanNumeralPattern duplicates data already expressed in romanNumeralMap
- tests modify sys, when argparse has api to pass in custom argv
- and stdout, when main could be refactored to make it testable without changing stdout
- if you really need to redirect stdout there is api in unittest to do that
- but ideally do not modify global state at all, as any leaks can make subsequent testing invalid