Scala定数の命名規則は何ですか?StackOverflowの提案を簡単に検索して大文字のCamelCase(下の1行目)を検索しましたが、再確認したいと思いました。
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
推奨されるScalaスタイルはどれですか?
Pi
)。
Scala定数の命名規則は何ですか?StackOverflowの提案を簡単に検索して大文字のCamelCase(下の1行目)を検索しましたが、再確認したいと思いました。
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
推奨されるScalaスタイルはどれですか?
Pi
)。
回答:
正式に推奨されるスタイル(および正式には私が意味する)は最初のスタイルで、最初の文字が付いたキャメルケースが大文字です。OderskyがScalaでのプログラミングについて明確に規定しています。
スタイルには標準ライブラリも続き、言語セマンティクスでいくつかのサポートがあります。大文字で始まる識別子は、パターンマッチングでは定数として扱われます。
(第2版の6.10節、107ページ)
(これはダニエルの回答への補遺コメントですが、構文の強調表示とフォーマットの利点のための回答として投稿します。)
最初の大文字を言語セマンティクスで重要とするスタイルについてのダニエルのポイントは、私がScalaを学んだときに最初にそれを認めたよりも微妙で重要です。
次のコードを検討してください。
object Case {
val lowerConst = "lower"
val UpperConst = "UPPER"
def main(args: Array[String]) {
for (i <- Seq(lowerConst, UpperConst, "should mismatch.").map(Option.apply)) {
print("Input '%s' results in: ".format(i))
i match {
case Some(UpperConst) => println("UPPER!!!")
case Some(lowerConst) => println("lower!")
case _ => println("mismatch!")
}
}
}
}
単純に私は試合のすべてのケースに到達することを期待していました。代わりにそれは印刷します:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
何が起こっているのかというとcase Some(lowerConst)
、val がシャドウされ、lowerConst
同じ名前のローカル変数が作成Some
されます。これは、文字列を含むが評価されるたびに入力されます。
確かにそれを回避する方法はありますが、最も簡単なのは、定数ガイドのスタイルガイドに従うことです。
命名規則に従うことができない場合は、@ reggoodwinが以下のコメントで指摘しているように、次のように変数名をティックに入れることができます
case Some(`lowerConst`) => println("lower!")
val UpperConst = "UPPER_CONST"
大丈夫か、それはそうでなければなりませんval UpperConst = "UpperConst"
定数名はキャメル大文字にする必要があります。つまり、メンバーがfinalで不変で、パッケージオブジェクトまたはオブジェクトに属している場合、定数と見なされる可能性があります。メソッド、値、変数名は、キャメルケースで小文字にする必要があります。
http://docs.scala-lang.org/style/naming-conventions.html#constants-values-variable-and-methods
UpperConst = "UPPER_CONST"
javaのようなvalのようなjava-styleは大丈夫か、そうでなければなりませんval UpperConst = "UpperConst"