หลักการตั้งชื่อสำหรับค่าคงที่ของ Scala?


98

หลักการตั้งชื่อสำหรับค่าคงที่ของ Scala คืออะไร? การค้นหาสั้น ๆ ในคำแนะนำ StackOverflow CamelCase ตัวพิมพ์ใหญ่ (บรรทัดแรกด้านล่าง) แต่ฉันต้องการตรวจสอบอีกครั้ง

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

สไตล์สกาล่าแบบไหนที่แนะนำ


2
เมื่อจะใช้เหมือนกับค่าคงที่สไตล์ C- / Java ที่กำหนดไว้ล่วงหน้าอย่างเต็มที่ค่าแรก รูปแบบที่สองและขีดล่างในชื่อโดยทั่วไปจะไม่ถูกนำมาใช้จริงๆ ค่าที่สามโดยทั่วไปจะใช้สำหรับค่าที่ไม่เปลี่ยนรูปซึ่งสร้างขึ้นแบบไดนามิก
Destin

3
ฉันใช้อันที่สอง แต่ส่วนใหญ่ใช้กับประสบการณ์ java ก่อนหน้านี้ ไม่ต้องสนใจว่าฉันคิดว่าวิธีที่เป็นทางการส่วนใหญ่เป็นวิธีแรก (เนื่องจากใช้ใน scala lib เองเช่นดูที่πซึ่งถูกกำหนดให้เป็นPi)
om-nom-nom

คำตอบ:


128

สไตล์ที่แนะนำอย่างเป็นทางการ (และฉันหมายถึงอย่างเป็นทางการ) คือสไตล์แรกเคสอูฐที่มีอักษรตัวแรกเป็นตัวพิมพ์ใหญ่ Odersky ได้วางไว้อย่างชัดเจนในการเขียนโปรแกรมใน Scala

สไตล์ยังตามด้วยไลบรารีมาตรฐานและมีการรองรับความหมายของภาษา: ตัวระบุที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่จะถือว่าเป็นค่าคงที่ในการจับคู่รูปแบบ

(ข้อ 6.10, หน้า 107 ในการพิมพ์ครั้งที่สอง)


1
เมื่อดูหลักเกณฑ์การตั้งชื่อ Scala อย่างเป็นทางการแล้วตัวแปร 3 เป็นรูปแบบที่แนะนำ: docs.scala-lang.org/style/…
Matthias

4
@ Matthias ที่ไม่ครอบคลุมค่าคงที่ การกำกับดูแลที่แย่มาก แต่เชื่อฉันเถอะไม่ใช่แค่นั้นไม่ถูกต้อง แต่รูปแบบที่สามจะทำให้เกิดปัญหาทันทีที่คุณใช้กับรูปแบบที่ตรงกัน
Daniel C. Sobral

1
@ Matthias ฉันได้เปิดประเด็นเกี่ยวกับเรื่องนี้แล้ว ปกติฉันจะทำการแก้ไขและประชาสัมพันธ์ แต่วันนี้ฉันไม่มีเวลาเลย :(
Daniel C. Sobral

1
@samthebest ไร้ความรู้สึก. มันมีความหมายที่สมบูรณ์แบบในลักษณะและแม้แต่ในขอบเขตของฟังก์ชั่นก็สมเหตุสมผลหากคุณจะใช้มันในการจับคู่รูปแบบ
Daniel C. Sobral

1
ฉันใช้ scalastyle เพื่อตรวจสอบการละเมิดรูปแบบในโค้ดของฉัน แต่ดูเหมือนว่าจะไม่พบข้อผิดพลาดของหลักการตั้งชื่อสำหรับค่าคงที่ มีวิธีเปิดใช้การตรวจสอบเพื่อให้แน่ใจว่ามีการตั้งชื่อค่าคงที่ในกรณีอูฐด้วยตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่หรือไม่?
jithinpt

43

(นี่เป็นความคิดเห็นเพิ่มเติมสำหรับคำตอบของ Daniel แต่ฉันโพสต์ไว้เป็นคำตอบเพื่อประโยชน์ของการเน้นและการจัดรูปแบบไวยากรณ์)

ประเด็นของ Daniel เกี่ยวกับรูปแบบการใช้อักษรตัวใหญ่เริ่มต้นที่มีความสำคัญในความหมายของภาษานั้นละเอียดอ่อนและสำคัญกว่าที่ฉันให้เครดิตไว้ตอนแรกที่ฉันเรียน 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)เงาของ Val lowerConstและสร้างตัวแปรท้องถิ่นที่มีชื่อเดียวกันซึ่งจะถูกเติมข้อมูลเมื่อใดก็ตามSomeที่มีการประเมินสตริงที่มี

มีวิธีที่เป็นที่ยอมรับในการแก้ไขปัญหานี้ แต่วิธีที่ง่ายที่สุดคือทำตามคำแนะนำสไตล์สำหรับการตั้งชื่อคงที่

หากคุณไม่สามารถทำตามหลักการตั้งชื่อได้ตามที่ @reggoodwin ชี้ให้เห็นในความคิดเห็นด้านล่างคุณสามารถใส่ชื่อตัวแปรในเห็บได้เช่นนั้น

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

1
การเพิ่มคำตอบของ Leif: สถานการณ์นี้ถูกกล่าวถึงใน Programming ใน Scala 15.2 หากไม่มีทางเลือกอื่นนอกจากใช้ค่าคงที่เริ่มต้นด้วยตัวพิมพ์เล็กก็สามารถหลีกเลี่ยงได้ด้วยเครื่องหมายขีดหลังเช่น case `pi` => ....
reggoodwin

1
ถ้า case Some (lowerConst) เงา val lowerConst ทำไม case Some (UpperConst) ไม่เงา val UpperConst
Adrian

@ Leif Wickland @Daniel C. Sobral คุณค่าของค่าคงที่มีความสำคัญเพื่อประโยชน์ในการจับคู่รูปแบบหรือไม่? เช่นval UpperConst = "UPPER_CONST"โอเคหรือควรจะเป็นval UpperConst = "UpperConst"
nir

7

ชื่อคงที่ควรอยู่ในตัวพิมพ์ใหญ่อูฐ นั่นคือถ้าสมาชิกอยู่ในขั้นสุดท้ายไม่เปลี่ยนรูปและเป็นของวัตถุแพ็คเกจหรืออ็อบเจกต์อาจถือว่าเป็นค่าคงที่ .... วิธีการค่าและชื่อตัวแปรควรอยู่ในตัวพิมพ์เล็กอูฐ

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


ค่าคงที่มีความสำคัญเพื่อประโยชน์ในการจับคู่รูปแบบหรือไม่? เช่น val UpperConst = "UPPER_CONST"เช่นส่วนหนึ่งสไตล์จาวาโอเคหรือควรจะเป็นval UpperConst = "UpperConst"
nir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.