はじめに
プログラミングの教科書や参考書でfor文の説明の時に頻繁に見られる変数名「i」「j」
このような1文字変数のよろしくない使い方をしている人たちが多いので解説。
なぜ「i」「j」なのか
変数「i」は index, integer, iterator の頭文字「i」から来ている。
「j」や「k」もカウンタ変数として使われるケースが多いが、理由は単純に「i」の次の文字だから。
これらをループカウンタとして使う習慣はFORTRANという世界最初の高水準言語が由来している。
FORTRANでは下記の言語仕様がある。
- 変数の型宣言が不要
- アルファベットI~Nの1文字の変数名が整数型
- それ以外は実数型
整数の変数名は基本的に「i」が使われていたことから、その習慣が残っている。
なぜ「i」「j」がよろしくないのか
- 1文字変数名は基本的に良しとされない
- i, jの判別がしにくい
- 直感的に何の変数か分かりにくい
実際にコードを見てみよう。
変数「i」「j」を利用したコード
member_list = [
{
'name': 'aoki',
'birthday': '2000-01-01',
'age': 20
},
{
'name': 'sato',
'birthday': '2000-03-01',
'age': 20
},
{
'name': 'tanaka',
'birthday': '2000-05-01',
'age': 19
}
]
for i in member_list:
for j in i:
print(i[j])
member_listはメンバーのリストってわかる。
「i」ってなに。「j」ってなに。
変数名はどうすればいいのか
結論としては意味のある変数にする。
例えば、先ほどの「i」「k」「l」を意味のある変数にするとこうなる。
member_list = [
{
'name': 'aoki',
'birthday': '2000-01-01',
'age': 20
},
{
'name': 'sato',
'birthday': '2000-03-01',
'age': 20
},
{
'name': 'tanaka',
'birthday': '2000-05-01',
'age': 19
}
]
for member in member_list:
for key in member:
print(member[key])
member_listはメンバーのリストってわかる。
memberはメンバーを表しているってわかる。
keyはmemberのキーを表していると分かる。
このように一目見ただけで、直感的に分かるものがよい。
どんな時に「i」を使うのか
意味のある変数にできない、しにくいときに「i」を使うと良い。
例として、このようなコードがある。
for i in range(0,10):
print(i)
rangeによるfor文では「i」は数値となり、意味のある変数にしにくい。
このような場合は習慣にならって「i」を使うと良い。
さいごに
この手の記事を書くと「数学だと、xとかaとか1文字変数を使うじゃないか」と反論してくる人も多くない。
まず、これはプログラミングの話であって数学の話をしているわけではない。
数学の変数には基本的に数値しか入らないことを思い出していただきたい。
こんな感じで変数「i」「j」についての解説をしましたが、「i」「j」に限らず、1文字変数の命名には十分に注意した方が良い。
連絡先
何かあればコメントや下記の連絡先に連絡ください。
参考文献
- なぜ for 文に使うループ変数は i なのか?
http://blogs.wankuma.com/jitta/archive/2007/01/25/58555.aspx
コメント