92 votes

Convention de nommage pour les constantes Scala ?

Quelle est la convention de dénomination des constantes Scala ? Une brève recherche sur StackOverflow suggère la majuscule CamelCase (la première ligne ci-dessous), mais je voulais vérifier à nouveau.

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

Quel est le style Scala recommandé ?

121voto

Daniel C. Sobral Points 159554

Le style officiellement recommandé (et je veux dire officiellement) est le premier style, c'est-à-dire une casse de type camel avec la première lettre en majuscule. Il est clairement établi par Odersky dans son ouvrage Programming in Scala.

Ce style est également suivi par la bibliothèque standard, et bénéficie d'un certain soutien dans la sémantique du langage : les identifiants commençant par une majuscule sont traités comme des constantes dans la correspondance des motifs.

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

41voto

Leif Wickland Points 1954

(Il s'agit d'un commentaire complémentaire à la réponse de Daniel, mais je le publie en tant que réponse pour bénéficier de la coloration syntaxique et du formatage).

La remarque de Daniel concernant l'importance du style d'utilisation de la majuscule initiale dans la sémantique du langage est plus subtile et plus importante que ce que je lui ai accordé à l'origine lorsque j'ai appris Scala.

Considérons 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 me serais attendu à ce que cela concerne 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 le case Some(lowerConst) ombres le val lowerConst et crée une variable locale du même nom qui sera remplie à chaque fois qu'un fichier Some contenant une chaîne de caractères est évaluée.

Il existe certes des moyens de contourner ce problème, mais le plus simple est de suivre le guide de style pour l'attribution de noms constants.

Si vous ne pouvez pas respecter la convention d'appellation, vous pouvez, comme le souligne @reggoodwin dans les commentaires ci-dessous, mettre le nom de la variable entre crochets, comme suit

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

7voto

samthebest Points 2097

Les noms des constantes doivent être en majuscules. C'est-à-dire que si le membre est final, immuable et il appartient à un objet du paquet ou à un objet , il peut être considéré comme une constante .... Les noms de méthodes, de valeurs et de variables doivent être en minuscule camel case

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X