Scala sabitleri için adlandırma kuralı?


98

Scala sabitleri için adlandırma kuralı nedir? StackOverflow önerilerinde kısa bir arama büyük harf CamelCase (aşağıdaki ilk satır), ancak iki kez kontrol etmek istedim.

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

Scala stili hangisi önerilir?


2
Geleneksel, tamamen önceden tanımlanmış bir C- / Java-tarzı sabit gibi kullanılacağı zaman, ilki. İkinci biçim - ve genel olarak adlarda alt çizgiler asla gerçekten kullanılmaz. Üçüncüsü genellikle dinamik olarak oluşturulan değişmez değerler için kullanılır.
Destin

3
İkincisini kullanıyorum, ancak çoğunlukla önceki java deneyimine. Bunu göz ardı edin, bence çoğu resmi yol ilk yol (scala lib'in kendisinde kullanıldığından, örneğin π olarak tanımlanan π'ye bakın Pi).
om-nom-nom

Yanıtlar:


128

Resmi olarak önerilen stil (ve resmi olarak demek istiyorum) ilk stil, ilk harfli deve harf büyük harf. Scala'da Programlama konusunda Odersky tarafından açıkça belirtilmiştir.

Stili ayrıca standart kitaplık izler ve dil anlambiliminde bir miktar desteğe sahiptir: büyük harfle başlayan tanımlayıcılar desen eşleştirmede sabitler olarak değerlendirilir.

(İkinci baskıda Bölüm 6.10, sayfa 107)


1
Resmi Scala adlandırma kurallarına bakıldığında, varyant 3 aslında önerilen stildir: docs.scala-lang.org/style/…
Matthias

4
@ Matthias Bu sabitleri kapsamaz. Korkunç bir ihmal, ama güven bana, sadece bu doğru değil, aynı zamanda üçüncü stil , onu bir kalıp eşleşmesinde kullanır kullanmaz sorunlara neden olacak .
Daniel C. Sobral

1
@Matthias Şimdi bununla ilgili bir sorun açtım . Normalde düzeltmeyi ve PR yapardım, ancak bu günlerde ne yazık ki zamanım yok. :(
Daniel C. Sobral

1
@samthebest Anlamsız. Özelliklerde mükemmel bir anlam ifade ediyor ve işlevler kapsamında bile, desen eşleştirmede kullanacaksanız mantıklı.
Daniel C. Sobral

1
Kodumdaki stil ihlallerini kontrol etmek için scalastyle kullanıyorum. Ancak sabitler için bu adlandırma kuralı hatalarını yakalamıyor gibi görünüyor. Sabitlerin deve durumunda ilk harfi büyük olacak şekilde isimlendirilmesini sağlayan bir kontrolü etkinleştirmenin bir yolu var mı?
jithinpt

43

(Bu, Daniel'in cevabına ek bir yorum, ancak sözdizimi vurgulama ve biçimlendirme yararına bir cevap olarak gönderiyorum.)

Daniel'in, dilin anlambiliminde önemli olan ilk büyük harf kullanma tarzı hakkındaki düşüncesi, Scala'yı öğrendiğimde ona verdiğim değerden daha incelikli ve önemlidir.

Aşağıdaki kodu göz önünde bulundurun:

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

Naifçe bunun maçtaki tüm davalara ulaşmasını beklerdim. Bunun yerine şunu yazdırır:

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

Olan şey case Some(lowerConst), vali gölgeler lowerConstve aynı isimde yerel bir değişken yaratır ve bu değişken Somebir dizge içeren bir değer değerlendirildiğinde her zaman doldurulur .

Kuşkusuz bu sorunu çözmenin yolları vardır, ancak en basit olanı, sabit adlandırma için stil kılavuzunu takip etmektir.

Adlandırma kuralını takip edemiyorsanız, @reggoodwin'in aşağıdaki yorumlarda belirttiği gibi, değişken adını bu şekilde işaretlere koyabilirsiniz.

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

1
Leif'in cevabına ek olarak: bu senaryodan Scala 15.2'de Programlama'da bahsedilmiştir. Küçük harfle başlayan bir sabit kullanmaktan başka seçenek yoksa, o zaman geri tiklerle kaçılabilir, örn. Case 'pi` => ....
reggoodwin

1
Eğer bazı (lowerConst) durumu altConst değerini gölgeliyorsa, neden Some (UpperConst) değeri UpperConst değerini gölgelemiyor?
Adrian

@Leif Wickland @Daniel C. Sobral Örüntü eşleştirme geleneği açısından sabitlerin değeri önemli mi? mesela val UpperConst = "UPPER_CONST"tamam ya da olmalıval UpperConst = "UpperConst"
2016

7

Sabit isimler üst deve durumunda olmalıdır. Yani üye nihai, değişmez ise ve bir paket nesneye veya bir nesneye aitse , sabit olarak kabul edilebilir .... Metot, Değer ve değişken isimleri küçük deve halinde olmalıdır.

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


Sabitlerin değeri, örüntü eşleştirme geleneği açısından önemli midir? örneğin val UpperConst = "UPPER_CONST"parçası java tarzı tamam ya da olması gerektiği gibival UpperConst = "UpperConst"
nir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.