2012-03-16 19 views
77

Qual è la convenzione di denominazione per le costanti Scala? Una breve ricerca sui suggerimenti StackOverflow in maiuscolo CamelCase (la prima riga in basso), ma volevo ricontrollare.Convenzione di denominazione per le costanti Scala?

val ThisIsAConstant = 1.23 
val THIS_IS_ANOTHER_CONSTANT = 1.55 
val thisIsAThirdConstant = 1.94 

Quale è lo stile Scala consigliato?

+2

Quando è da utilizzare come un convenzionale, del tutto-predefinito C-/costante Java-stile, il primo. La seconda forma, e sottolinea i nomi in generale, non viene mai realmente utilizzata. Il terzo è generalmente utilizzato per valori immutabili generati dinamicamente. – Destin

+3

Sto usando il secondo, ma principalmente per esperienza java precedente. Ignoralo, penso che il modo più ufficiale sia il primo (dal momento che è usato in scala lib stessa, per esempio guarda π che è definito come 'Pi'). –

risposta

108

Lo stile ufficialmente raccomandato (e intendo ufficialmente) è il primo stile, il caso cammello con la prima lettera è maiuscolo. È indicato chiaramente da Odersky su Programming in Scala.

Lo stile è seguito anche dalla libreria standard e ha un certo supporto nella semantica del linguaggio: gli identificatori che iniziano con lettere maiuscole vengono considerati come costanti nella corrispondenza del modello.

(Sezione 6.10, p. 107 nella seconda edizione)

+1

Osservando le linee guida ufficiali di denominazione di Scala, la variante 3 è in effetti lo stile consigliato: http://docs.scala-lang.org/style/naming-conventions.html # values_variable_and_methods – Matthias

+3

@Matthias che non copre le costanti. Una terribile svista, ma, credetemi, non solo non è corretto, ma il terzo stile _ creerà problemi_, non appena lo usate su un pattern match. –

+1

@Matthias Ora ho aperto [un problema] (https://github.com/scala/scala.github.com/issues/231) a riguardo. Normalmente farei la correzione e la PR, ma in questi giorni purtroppo mi manca molto tempo. :( –

38

(Questo è un commento addendum alla risposta di Daniel, ma sto distacco come una risposta a beneficio di evidenziazione della sintassi e la formattazione.)

Il punto di Daniel circa lo stile dell'uso di una lettera maiuscola iniziale che è importante nella semantica del linguaggio è più sottile e importante di quello che inizialmente gli attribuivo il merito quando ho imparato Scala.

Si consideri il seguente codice:

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!") 
     } 
    } 
    } 
} 

Ingenuamente mi sarei aspettato che per raggiungere tutti i casi nella partita. Invece esso stampa:

Input 'Some(lower)' results in: lower! 
Input 'Some(UPPER)' results in: UPPER!!! 
Input 'Some(should mismatch.)' results in: lower! 

Cosa sta succedendo è che le ombre case Some(lowerConst) Val lowerConst e crea una variabile locale con lo stesso nome che verrà popolata ogni volta che un Some contenente una stringa viene valutata.

Ci sono certamente modi per aggirare il problema, ma il più semplice è seguire la guida di stile per la denominazione costante.

Se non è possibile seguire la convenzione di denominazione, poi come @reggoodwin sottolinea nei commenti qui sotto, è possibile inserire il nome della variabile in tick, in questo modo

case Some(`lowerConst`) => println("lower!") 
+1

Aggiunta alla risposta di Leif: questo scenario è menzionato in Programmazione in Scala 15.2. Se non c'è altra scelta che usare una costante che inizia con una minuscola, allora può essere sfuggita con i tick posteriori, ad es. case \ 'pi \' => .... – reggoodwin

+1

se caso Alcuni (lowerConst) ombreggiano la val lowerConst, perché non è case Some (UpperConst) che ombreggiano la val UpperConst? – Adrian

+0

@Leif Wickland @Daniel C. Sobral Il valore delle costanti è importante per motivi di congruenza della corrispondenza del modello? per esempio. 'val UpperConst =" UPPER_CONST "' okay o dovrebbe essere 'val UpperConst =" UpperConst "' – nir

5

nomi delle costanti dovrebbero essere in custodia superiore del cammello. Cioè, se il membro è definitivo, immutabile e appartiene a un oggetto di pacchetto o un oggetto, può essere considerato una costante .... metodo, Valore e nomi delle variabili devono essere in minuscolo cammello

http://docs.scala-lang.org/style/naming-conventions.html#constants-values-variable-and-methods

+0

Il valore delle costanti è importante per motivi di congruenza della corrispondenza del modello? per esempio. val 'UpperConst =" UPPER_CONST "' come parte java-style okay o dovrebbe essere 'val UpperConst =" UpperConst "' – nir

Problemi correlati