web-dev-qa-db-fra.com

Convention de dénomination pour les constantes Scala?

Quelle est la convention de dénomination pour les constantes Scala? Une brève recherche sur les suggestions de StackOverflow en majuscule CamelCase (la première ligne ci-dessous), mais je voulais revérifier.

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

Lequel est recommandé Scala?

91
grautur

Le style officiellement recommandé (et je veux dire officiellement) est le premier style, le boîtier camel avec la première lettre est en majuscule. C'est clairement établi par Odersky sur la programmation en Scala.

Le style est également suivi par la bibliothèque standard, et a un certain support dans la sémantique du langage: les identifiants commençant par des majuscules sont traités comme des constantes dans la correspondance de modèles.

(Section 6.10, p. 107 dans la deuxième édition)

120
Daniel C. Sobral

(Il s'agit d'un commentaire supplémentaire à la réponse de Daniel, mais je le poste en tant que réponse au profit de la mise en évidence et du formatage de la syntaxe.)

L'argument de Daniel sur le style d'utilisation d'une lettre majuscule initiale étant important dans la sémantique du langage est plus subtil et important que je ne l'avais initialement cru quand j'ai appris la scala.

Considérez le code suivant:

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

Naïvement, je m'attendais à ce que cela atteigne tous les cas du match. Au lieu de cela, il imprime:

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

Ce qui se passe, c'est que la case Some(lowerConst) masque le val lowerConst et crée une variable locale du même nom qui sera remplie à chaque fois qu'un Some contenant une chaîne sera évalué.

Il existe certes des moyens de contourner ce problème, mais le plus simple est de suivre le guide de style pour une dénomination constante.

Si vous ne pouvez pas suivre la convention de dénomination, alors comme @reggoodwin le souligne dans les commentaires ci-dessous, vous pouvez mettre le nom de la variable en ticks, comme ceci

case Some(`lowerConst`) => println("lower!")
41
Leif Wickland

Les noms constants doivent être en majuscule. Autrement dit, si le membre est final, immuable et il appartient à un objet package ou à un objet , il peut être considéré comme une constante .... Méthode , Les noms de valeur et de variable doivent être en minuscules de chameau

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

7
samthebest