きり丸の技術日記

技術検証したり、資格等をここに残していきます。

001等の左0埋めのコード値を使うのはやめよう。それは8進数と判断される可能性がある

小ネタ。

前提

  • なし

詳細

私が関わっているシステムでは、001, 002等で種類を表すコード値を使っていることがあります。基本的には文字列で処理するので問題はほとんど発生しないのですが、状況によっては8進数の文字列と解釈されることがあります。可能な限りE001, I001等のprefixを付与するか、0埋めのコード値を使うことを回避してください。

参考

各進数表現のフォーマットを記載します。

8進数は言語によってフォーマットが異なるので注意してください。

  • 2進数
    • 0bを先頭に付与する
      • 0b01
  • 8進数
    • 0を先頭に付与する
      • 07
        • C言語やC++言語、Java、JavaScript(ES5以前)
    • 0oを先頭に付与する
      • 0o7
        • PythonやJavaScript(ECMAScript 6以降)
  • 16進数
    • 0xを先頭に付与する
      • 0xFF

終わりに

発生した具体的な状況は覚えていません。

記憶の限りでは提供されたSwagger(OpenAPI)のファイルを元にnpmのコード生成ライブラリを使用したときに008, 009が出力されずに8進数換算の010, 011と変換されてenumが正しく定義されませんでした。当時の対応としては、npmのライブラリを直接修正して管理したり、jarファイルでのコード生成に切り替えたと記憶しています。

当事象の発覚が難しかった点としては、007までは正しく出力されるため事象の特定に時間がかかりました。

意図せずに余計な工数を取られたくはないため、ぜひ001等のコード値を使用せずに、E001等のprefixや0埋めしない1等の使用を検討してください。

参考情報