小ネタ。
前提
- なし
詳細
私が関わっているシステムでは、001
, 002
等で種類を表すコード値を使っていることがあります。基本的には文字列で処理するので問題はほとんど発生しないのですが、状況によっては8進数の文字列と解釈されることがあります。可能な限りE001
, I001
等のprefixを付与するか、0埋めのコード値を使うことを回避してください。
参考
各進数表現のフォーマットを記載します。
8進数は言語によってフォーマットが異なるので注意してください。
- 2進数
- 0bを先頭に付与する
- 0b01
- 0bを先頭に付与する
- 8進数
- 0を先頭に付与する
- 07
- C言語やC++言語、Java、JavaScript(ES5以前)
- 07
- 0oを先頭に付与する
- 0o7
- PythonやJavaScript(ECMAScript 6以降)
- 0o7
- 0を先頭に付与する
- 16進数
- 0xを先頭に付与する
- 0xFF
- 0xを先頭に付与する
終わりに
発生した具体的な状況は覚えていません。
記憶の限りでは提供されたSwagger(OpenAPI)のファイルを元にnpm
のコード生成ライブラリを使用したときに008
, 009
が出力されずに8進数換算の010
, 011
と変換されてenum
が正しく定義されませんでした。当時の対応としては、npm
のライブラリを直接修正して管理したり、jar
ファイルでのコード生成に切り替えたと記憶しています。
当事象の発覚が難しかった点としては、007
までは正しく出力されるため事象の特定に時間がかかりました。
意図せずに余計な工数を取られたくはないため、ぜひ001
等のコード値を使用せずに、E001
等のprefixや0埋めしない1
等の使用を検討してください。