🐘
桁数が多い数値を書くとき、大抵の言語で桁区切り文字が使える
数値リテラルの区切り文字
桁数が多い数値をコーディングするとき、多くのプログラミング言語では可読性を上げるために数値リテラルに区切り文字を書くことができます。
例えばアンダースコア _
を区切り文字として使える言語であれば、 100000000
を 100_000_000
と書くことができます。数字の間の区切り文字 _
は処理上は無視されます。
例えばPythonではこのような書き方ができます。
sample.py
i = 100_000_000 # i = 100000000 と同じ
binary_digits = 0b_1110_0101 # binary_digits = 0b11100101 と同じ
恥ずかしながら、数値リテラルで区切り文字が多くの言語で使えることを知らなかったので、主要なプログラミング言語で使える区切り文字をまとめてみました。
プログラミング言語ごとの仕様
言語 | 区切り文字 | 対応バージョン | ドキュメント |
---|---|---|---|
C++ |
' (シングルクォーテーション) |
14以降 | 数値リテラルの桁区切り文字 - cpprefjp C++日本語リファレンス |
C# |
_ (アンダースコア) |
7以降 | Digit separators - C# 7.0 specification proposals Microsoft Docs |
Go |
_ (アンダースコア) |
1.13以降 | Go 1.13 Release Notes - The Go Programming Language |
Java |
_ (アンダースコア) |
SE 7以降 | 数値リテラル内のアンダースコア |
PHP |
_ (アンダースコア) |
7.4.0以降 | PHP: 整数 - Manual |
Python |
_ (アンダースコア) |
3.6以降 | 2. 字句解析 — Python 3.10.4 ドキュメント |
Ruby |
_ (アンダースコア) |
? (最初から?) | リテラル (Ruby 3.1 リファレンスマニュアル) |
VB.NET |
_ (アンダースコア) |
15以降 | 型文字 - Visual Basic Microsoft Docs |
挙げた言語の中では、C++のみシングルクォーテーション '
、それ以外の言語ではアンダースコア _
を区切り文字として使えます。
C++では例えば次のように書くことができます。
sample.cpp
int i = 100'000'000; // int i = 100000000; と同じ
int binary_digits = 0b1000'1111; // int binary_digits = 0b10001111; と同じ
数値リテラルの先頭や末尾には区切り文字を書けない仕様の言語が多いです。ただし各言語によって仕様はやや異なります。連続で区切り文字を書けるか、浮動小数点型や2進数表現にも使えるか、などが異なりますので、詳しくは各言語のドキュメントをご参照ください。
どのように使うか
1234
を 1_23_4
と書くなど、小さい数値にもむやみやたらに使うと可読性が落ちるように思われます。日常生活と同様に、通常の整数はある程度大きい数値なら3桁区切り、2進数は4桁区切りで区切り文字を利用すると良さそうです。
例えばRubyの静的解析ツールであるRuboCopでは、5桁以上の数値に対して3桁ごとにアンダースコアを挟むことが推奨されています。(Style/NumericLiterals
のパラメータ MinDigits
のデフォルトが5のため。この桁数は調整可能です。)
Discussion