Jaka jest konwencja nazewnictwa dla stałych Scali? Krótkie wyszukiwanie w sugestiach StackOverflow z wielkimi literami CamelCase (pierwsza linia poniżej), ale chciałem dokładnie sprawdzić.
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
Jaki jest zalecany styl Scala?
scala
naming-conventions
constants
grautur
źródło
źródło
Pi
).Odpowiedzi:
Oficjalnie zalecany styl (i mam na myśli oficjalnie) to pierwszy styl, wielbłądzie z pierwszą literą są duże. Jest to jasno określone przez Odersky'ego na temat programowania w Scali.
Po stylu następuje również biblioteka standardowa i ma pewne wsparcie w semantyce języka: identyfikatory zaczynające się od dużych liter są traktowane jako stałe w dopasowywaniu wzorców.
(Punkt 6.10, str. 107 w drugim wydaniu)
źródło
(To jest komentarz w dodatku do odpowiedzi Daniela, ale zamieszczam go jako odpowiedź na korzyść podświetlania i formatowania składni).
Uwaga Daniela dotycząca stylu używania dużej litery jako ważnej w semantyce języka jest bardziej subtelna i ważniejsza, niż początkowo przypisywałem jej, kiedy uczyłem się Scali.
Rozważ następujący kod:
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!") } } } }
Naiwnie spodziewałbym się, że dotrze to do wszystkich przypadków w meczu. Zamiast tego drukuje:
Input 'Some(lower)' results in: lower! Input 'Some(UPPER)' results in: UPPER!!! Input 'Some(should mismatch.)' results in: lower!
Chodzi o to, że przesłaniają wartość
case Some(lowerConst)
vallowerConst
i tworzą lokalną zmienną o tej samej nazwie, która zostanie zapełniona za każdym razem, gdySome
oceniany jest łańcuch zawierający ciąg.Wprawdzie istnieją sposoby na obejście tego problemu, ale najprościej jest postępować zgodnie z przewodnikiem po stylu dotyczącym ciągłego nazywania.
Jeśli nie możesz przestrzegać konwencji nazewnictwa, to jak @reggoodwin wskazuje w komentarzach poniżej, możesz umieścić nazwę zmiennej w znacznikach
case Some(`lowerConst`) => println("lower!")
źródło
val UpperConst = "UPPER_CONST"
dobrze albo powinno byćval UpperConst = "UpperConst"
źródło
UpperConst = "UPPER_CONST"
jak część w stylu java w porządku lub powinno byćval UpperConst = "UpperConst"