Javaでは1文字の変数の使用が推奨されていますか?コードスニペットまたはチュートリアルでは、よく見かけます。コードを読むのが比較的難しくなり、他のプログラミング言語で使用されているのを見たことがないので、それらの使用が推奨されるとは想像できません!
Javaでは1文字の変数の使用が推奨されていますか?コードスニペットまたはチュートリアルでは、よく見かけます。コードを読むのが比較的難しくなり、他のプログラミング言語で使用されているのを見たことがないので、それらの使用が推奨されるとは想像できません!
回答:
物事を適切に命名するのは難しい。とても厳しい。逆に見れば、適切に名前が付けられたものが重要であることを意味するものと考えることもできます。(そうでなければ、なぜあなたはそれを命名する努力を費やしたでしょうか?)
しかし、場合によっては、物の名前は重要ではありません。それが、たとえば、匿名関数(「ラムダ」)のようなものがある理由です。たとえば、名前を付けるだけの価値がない場合があるからです。
単一文字(または非常に短い)の変数名が適切な例が多数あります。
i
、j
、k
、l
ループインデックスのk
およびv
マップのキーと値n
数(例えば中Math.abs(n)
)a
、b
、c
任意のオブジェクト(例えば中max(a, b)
)e
汎用for each
ループ内の要素f
高階関数の関数p
フィルター内の述語関数用T
、T1
、T2
、...型変数についてE
コレクションの要素タイプを表すタイプ変数用R
関数の結果の型を表す型変数の場合ex
catch
節の例外についてop
マップまたはフォールドでの操作用s
複数を示すために文字を追加します。つまり、コレクション(たとえばns
、数字のコレクションxs
とys
、2つの任意のジェネリックオブジェクトのコレクション)他のプログラミング言語で使用されているのを見たことはありません!
Haskell、F#、ML、Ruby、Python、Perl、PHP、C#、Java、Scala、Groovy、Boo、Nemerle、 D、Go、C ++、C、名前を付けます。
k
やl
遠すぎだループインデックス、に(あなたが開始する多くのネストされたループを持つべきではありません。機能に抽出して)。個人的に、私は複数の関数ごとに1文字の変数が、0のIシュート使用することはありません
l
またはlen
長さのために、使用されているarr
(例えば:配列ためfor(var i=0; l=arr.length; i<l; i++)
)。また、関数を参照するときfn
にf
、の代わりに使用される場合があります。
ループがカウントに変数を使用するだけの場合
for(int i = 0; i < 10; i++) {
System.out.println("Stop it! I really mean it!!");
}
はい、これはあなたが使用できる最高の名前です。これ以上セマンティクスを明確にすることはできませんが、読むのにかなり時間がかかります。
変数が内部で使用されている場合ループ意味のある名前が役立つ場合があります。
for(int door = 0; door < 3; door++) {
int reward = gauge(door);
if(reward > max) {
max = reward;
best = door;
}
}
変数がメソッド全体で使用される場合、その名前はより長くする必要があります。クラス全体で使用される場合、その名前は完全に自明である方が良いでしょう。そうでない場合、ほぼ確実にコードの明瞭さが低下します。
つまり、変数のスコープが大きいほど、その名前は長くなければなりません。
index
たとえば、通常、配列を反復処理するときに名前が付けられた変数を使用します。
i
は、正確に定義された意味を持つ適切な単語、つまり「あまり心配する必要のないインデックス」です。しかし、それは親しみの問題だと思います。あなたはHaskellのをたくさん読んでいる場合は、読み取りに慣れますm
ようモナド、f
としてファンクタ、x
などいくつかのオブジェクト、xs
などのリストx
Sのように。
i
使用しますが、カウントにのみ変数を使用するループに「使用できる最適な名前」であることに同意しません。その場合、私はむしろcount
変数名として使用されるのを見たいです:即座に理解可能。for (int count = 0; count < 10; count++)
またはwhile (count--)
。
Kilianの答えのコードを読んで、「ループがあり、変数があり、型がintで、名前があり、名前がiで、0に初期化されている」とは思わない。 ..」。「ループ...」と思うのは、3つの点が、私が考えていない重要でない詳細を表しているからです。私のプログラマーの心の中では、その変数は実際には存在せず、ループにするfor(;;){}のように、入力しなければならないアーティファクトです。
その変数は私の心の中にも存在しないので、どうして絶対に必要なものを超えて名前を付けるのでしょうか?
i
が、_
明らかに無意味な変数のために。しかし、誰もがPrologに精通しているわけではなく、おそらく削除するよりも注目を集めるでしょう。
_
他のものと同様に正当な識別子であるにもかかわらず、Rubyが通常それらについて警告しているにもかかわらず、名前が付けられた_
(またはで始まる_
)未使用のローカル変数は「未使用のローカル変数」警告を生成しないという最近の変更がありました。
ループ内のインデックスとして文字i、j、kを参照している場合、これはJavaおよびその他のプログラミング言語で一般的な方法です。ただし、次のようにfor eachスタイルループを使用する方がおそらく良いでしょう。
for(User user: users) {
doSomethingWithTheUser(user);
}
の代わりに
for(int i=0; i<users.size(); i++) {
doSomethingWithTheUser(users.get(i));
}
Javaでは、このスタイルのループはごく最近導入されました。配列またはリストをループするための最も一般的な方法は、以前はインデックスのループであったため、Javaの方がより多くのことに気付いている理由かもしれません。
n、x、yなどの単一の文字がすでに一般的な数学関数を実装する場合など、単一の文字が適切な場合がいくつかあります。しかし、一般的にいや、変数に意味のある名前を付けてください。