Соглашение об именах для констант Scala?


что такое соглашение об именах для констант Scala? Краткий поиск по предложениям StackOverflow в верхнем регистре CamelCase (первая строка ниже), но я хотел дважды проверить.

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

какой стиль Scala рекомендуется?

3 84

3 ответа:

официально рекомендуемый стиль (и я имею в виду официально) - это первый стиль, случай верблюда с первой буквой-верхний регистр. Он четко изложен Одерски по программированию в Scala.

стиль также сопровождается стандартной библиотекой и имеет некоторую поддержку в семантике языка: идентификаторы, начинающиеся с верхнего регистра, рассматриваются как константы в сопоставлении шаблонов.

(раздел 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) тени Валь lowerConst и создает локальную переменную с тем же именем, которая будет заполнена в любое время a Some вычисляется содержащая строку.

есть, по общему признанию, способы обойти это, но самый простой-следовать руководству по стилю для постоянного именования.

если вы не можете следовать соглашению об именах, то, как указывает @reggoodwin в комментариях ниже, вы можете поместить имя переменной в ТИКах, например так

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

имена констант должны быть в верхнем регистре верблюда. То есть, если член является окончательным, неизменным и он принадлежит объекту пакета или объекту, ее можно считать постоянной величиной .... Имена методов, значений и переменных должны быть в нижний регистр

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