web-dev-qa-db-ja.com

1文字の変数の使用は推奨されますか?

Javaでは1文字の変数の使用が推奨されていますか?コードスニペットやチュートリアルでは、それらをよく目にします。コードを読むのが比較的難しくなり、他のプログラミング言語で使用されているのを見たことがないので、それらの使用が推奨されるとは思えません!

13
William Edwards

物事に適切に名前を付けるのは難しい。とても厳しい。逆に見ると、適切な名前のものが重要であることを意味していると考えることもできます。 (そうでなければ、なぜあなたはそれに名前を付ける努力を費やしたのですか?)

しかし、時々、物事の名前だけが重要ですではない。たとえば、無名関数( "lambdas")などがあるのはそのためです。名前を付けるだけの価値がない場合があるからです。

1文字(または非常に短い)の変数名が適切な例はたくさんあります。

  • ijkl forループインデックス
  • kおよびv(マップのキーと値)
  • nは数値用(例:Math.abs(n)
  • abc任意のオブジェクト(例:max(a, b)
  • eジェネリックの要素for eachループ
  • f(高階関数の関数の場合)
  • pフィルターの述語関数
  • TT1T2、…型変数用
  • Eは、コレクションの要素型を表す型変数用
  • R関数の結果の型を表す型変数の場合
  • excatch句の例外
  • op(マップまたはフォールド内の操作の場合)
  • 文字sを追加して複数形、つまりコレクションを示します(例:数字のコレクションの場合はns、ジェネリックの任意の2つのコレクションの場合はxsysオブジェクト)

他のプログラミング言語で使用されているのを見たことはありません!

これらは、私が知っているほとんどすべての言語で非常に一般的です(おそらく私が知らない言語でも同じです)。Haskell、F#、ML、Ruby、Python、Perl、PHP、C#、Java、Scala、Groovy、Boo、Nemerle、 D、Go、C++、C、あなたはそれに名前を付けます。

32
Jörg W Mittag

ループが何もしない場合は、カウントに変数を使用します

  for(int i = 0; i < 10; i++) {
     System.out.println("Stop it! I really mean it!!");
  }

次に、はい、これはあなたが使用できる最高の名前です。それ以上長くすると、セマンティクスを明確にすることができなくなる可能性がありますが、読み取るのにはるかに長い時間がかかります。

変数を使用する場合insideループの場合、意味のある名前が役立ちます。

for(int door = 0; door < 3; door++) {
  int reward = gauge(door);
  if(reward > max) {
    max = reward;
    best = door;
  }
}

変数がメソッド全体で使用される場合、その名前は長くする必要があります。クラス全体で使用する場合、その名前は完全に一目瞭然である必要があります。そうでない場合は、コードの明確性が低下します。

つまり、変数のスコープが大きいほど、その名前を長くする必要があります。

20
Kilian Foth

キリアンの答えのコードを読んで、「ループがあり、変数があり、型がintで、名前があり、名前がiであり、0に初期化されているとは思いません。 ……」 3つの点が私が考えていない重要ではない詳細を表す「ループ...」と思います。私のプログラマーの頭の中では、その変数は実際には存在しません。ループを作るfor(;;){}のように、タイプしなければならないのは単なるアーティファクトです。

その変数は私の心の中にさえ存在しないので、どうして絶対に必要なものを超えて名前を付けるのですか?

4
gnasher729