Konvensi penamaan untuk konstanta Scala?

97

Apa konvensi penamaan untuk konstanta Scala? Pencarian singkat di StackOverflow menyarankan CamelCase huruf besar (baris pertama di bawah), tetapi saya ingin memeriksa ulang.

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

Gaya Scala mana yang direkomendasikan?

grautur.dll
sumber
2
Saat akan digunakan seperti konstanta gaya C- / Java yang konvensional dan telah ditentukan sebelumnya, yang pertama. Bentuk kedua — dan garis bawah pada nama secara umum — tidak pernah benar-benar digunakan. Yang ketiga umumnya digunakan untuk nilai yang tidak dapat diubah yang dihasilkan secara dinamis.
Destin
3
Saya menggunakan yang kedua, tetapi sebagian besar untuk pengalaman java sebelumnya. Abaikan itu, menurut saya cara yang paling resmi adalah yang pertama (karena digunakan dalam scala lib itu sendiri, misalnya lihat π yang didefinisikan sebagai Pi).
om-nom-nom

Jawaban:

127

Gaya yang direkomendasikan secara resmi (dan maksud saya secara resmi) adalah gaya pertama, casing unta dengan huruf pertama adalah huruf besar. Ini ditetapkan dengan jelas oleh Odersky tentang Pemrograman di Scala.

Gaya juga diikuti oleh pustaka standar, dan memiliki beberapa dukungan dalam semantik bahasa: pengenal yang dimulai dengan huruf besar diperlakukan sebagai konstanta dalam pencocokan pola.

(Bagian 6.10, p.107 dalam edisi kedua)

Daniel C. Sobral
sumber
1
Melihat pedoman resmi penamaan Scala, varian 3 sebenarnya adalah gaya yang direkomendasikan: docs.scala-lang.org/style/…
Matthias
4
@Ini tidak mencakup konstanta. Sebuah kekeliruan yang buruk, tapi, percayalah, tidak hanya itu tidak benar, tetapi gaya ketiga akan menimbulkan masalah , segera setelah Anda menggunakannya pada pencocokan pola.
Daniel C. Sobral
1
@Matthias Sekarang saya membuka masalah tentang itu. Saya biasanya melakukan perbaikan dan PR, tapi sayangnya saya kekurangan waktu hari ini. :(
Daniel C. Sobral
1
@amebeb Tidak masuk akal. Ini sangat masuk akal dalam ciri-ciri, dan bahkan pada lingkup fungsi, masuk akal jika Anda akan menggunakannya pada pencocokan pola.
Daniel C. Sobral
1
Saya telah menggunakan scalastyle untuk memeriksa pelanggaran gaya dalam kode saya. Tapi tampaknya tidak menangkap kesalahan konvensi penamaan ini untuk konstanta. Adakah cara untuk mengaktifkan pemeriksaan yang memastikan konstanta dinamai dalam kasus unta dengan huruf pertama yang dikapitalisasi?
Jithinpt
43

(Ini adalah komentar tambahan untuk jawaban Daniel, tapi saya mempostingnya sebagai jawaban untuk kepentingan penyorotan dan pemformatan sintaks.)

Poin Daniel tentang gaya menggunakan huruf kapital awal yang penting dalam semantik bahasa lebih halus dan penting daripada yang semula saya berikan ketika saya belajar Scala.

Perhatikan kode berikut:

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

Secara naif, saya mengharapkan itu untuk mencapai semua kasus dalam pertandingan. Sebagai gantinya mencetak:

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

Apa yang terjadi adalah case Some(lowerConst)bayangan val lowerConstdan membuat variabel lokal dengan nama yang sama yang akan diisi setiap kali Somestring yang mengandung dievaluasi.

Memang ada cara untuk mengatasinya, tetapi yang paling sederhana adalah mengikuti panduan gaya untuk penamaan yang konstan.

Jika Anda tidak dapat mengikuti konvensi penamaan, seperti yang ditunjukkan @reggoodwin pada komentar di bawah, Anda dapat meletakkan nama variabel di tanda centang, seperti itu

case Some(`lowerConst`) => println("lower!")
Leif Wickland
sumber
1
Menambah jawaban Leif: skenario ini disebutkan dalam Pemrograman di Scala 15.2. Jika tidak ada pilihan selain menggunakan konstanta yang dimulai dengan huruf kecil, maka ia dapat di-escape dengan tanda centang balik, misalnya case `pi` => ....
reggoodwin
1
jika case Some (lowerConst) membayangi val lowerConst, mengapa case Some (UpperConst) tidak membayangi val UpperConst?
Adrian
@Leif Wickland @Daniel C. Sobral Apakah nilai konstanta penting demi konvensi pencocokan pola? misalnya val UpperConst = "UPPER_CONST"oke atau seharusnyaval UpperConst = "UpperConst"
nir
7

Nama konstan harus menggunakan huruf besar unta. Artinya, jika anggota bersifat final, tidak dapat diubah dan itu milik objek paket atau objek , itu dapat dianggap sebagai konstanta .... Metode, Nilai, dan nama variabel harus menggunakan huruf kecil camel

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

samthebest
sumber
Apakah nilai konstanta penting demi konvensi pencocokan pola? misalnya val UpperConst = "UPPER_CONST"seperti bagian java-style oke atau seharusnyaval UpperConst = "UpperConst"
nir