WIP: 個数を表す変数名をどうするか問題 - count ? num ? 複数形のs ?
命名は大事。読み手に分かりやすく、違和感なく、将来他の変数名の命名を邪魔しない命名がしたい。
互換性とあるから、リファクタリング機能あっても意外と名前はあとから変えづらい。
なんの話か?
「OOの数」を表す変数名をどうするか?という話。
英語なら、"the number of OO"を表す変数名をどう命名するか問題。
具体例
ユーザー数とか
特徴ベクトルの数とか
イテレーション数
スレッド数
...
英語そのままのnumberOfUsersは長すぎるし、前置詞ofが入るしで、どうやって命名するかの話。
この問題について思っていることを書く。
(あらゆる言語での話。変数の例はキャメルケースで書く。)
(以下の「デメリット」は、個人の感想に近いことに注意)
hr.icon
複数形のsをつける
具体的には、iterationsとかusersとかpeopleとかで個数を表す
2語にならないため、変数名を短くできるメリットがある
デメリット
配列系と名前がぶつかってしまう
配列系と名前がぶつかると、users: User[]みたいな配列の個数を表すときに困ってしまう
users: Intみたいな変数があった場合、ユーザーの配列を定義したいときに命名に困ることになる
=> 解決策として、 usersArrayやusersSeq(シーケンス)などはある。
「OOの個数の配列」を表したいときにどう命名するか困る
(ただし出現頻度はかなり少ないと思うのでほぼ無視できると思う)
個人的には、複数形を見ると配列系であるという予測を使ってソースコード読む訓練(?)みたいなものをしているので少し困る
(コマンドのオプション名だと、短さのため複数形を使うことがある。オプションで配列を指定することが少ないことも理由の一つ)
hr.icon
count
カウント。
具体的にはpersonCountとか、iterationCountとか
短めで良い
Intとか数値系である予想がつきやすい
変数名は後ろを見て型を推測しがちなので。
変数名の場合は前に修飾語が来て、最後の単語がコアな意味になりやすいから。
複数形と配列系がぶつかる問題もない
デメリット
自分の勝手なイメージだが、countがつくと+1したりとかして数え上げた結果なイメージがある
不動な値がにcountがつくのに違和感を感じる
(英語圏の人間のイメージではないことに注意)
これは自分の中では使い分けている。OOの回数とか数え上げた感じの場合はcountを使っている。
num, numberを最後につける
具体的には、personNumとかiterationNumとか
短めで良い
Intとか数値系である予想がつきやすい
personNumberやiterationNumberとかも仲間
"No."(No. 1とかの)からpersonNo, iterationNoとか使う人もいるみたい
デメリット