Quy ước đặt tên cho hằng số Scala?


97

Quy ước đặt tên cho hằng số Scala là gì? Một tìm kiếm ngắn trên StackOverflow đề xuất chữ hoa CamelCase (dòng đầu tiên bên dưới), nhưng tôi muốn kiểm tra lại.

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

Phong cách Scala được đề xuất nào?


2
Khi nó được sử dụng như một hằng số kiểu C- / Java thông thường, được xác định trước hoàn toàn, là hằng số đầu tiên. Dạng thứ hai — và gạch dưới tên nói chung — không bao giờ thực sự được sử dụng. Thứ ba thường được sử dụng cho các giá trị bất biến được tạo động.
Destin

3
Tôi đang sử dụng cái thứ hai, nhưng chủ yếu là để trải nghiệm java trước đó. Bỏ qua điều đó, tôi nghĩ rằng cách chính thức nhất là cách đầu tiên (vì nó được sử dụng trong bản thân scala lib, ví dụ: nhìn vào π được định nghĩa là Pi).
om-nom-nom

Câu trả lời:


127

Kiểu được đề xuất chính thức (và ý tôi là chính thức) là kiểu đầu tiên, kiểu chữ hoa lạc đà với chữ cái đầu tiên là kiểu chữ hoa. Nó được Odersky trình bày rõ ràng về Lập trình trong Scala.

Phong cách cũng được tuân theo bởi thư viện tiêu chuẩn và có một số hỗ trợ về ngữ nghĩa ngôn ngữ: các số nhận dạng bắt đầu bằng chữ hoa được coi là hằng số trong đối sánh mẫu.

(Mục 6.10, tr. 107 trong lần xuất bản thứ hai)


1
Nhìn vào hướng dẫn Scala đặt tên chính thức, biến thể 3 là trong thực tế các phong cách đề nghị: docs.scala-lang.org/style/...
Matthias

4
@Matthias Điều đó không bao gồm các hằng số. Một sự giám sát khủng khiếp, nhưng, tin tôi đi, điều đó không chỉ không đúng, mà kiểu thứ ba sẽ gây ra vấn đề , ngay khi bạn sử dụng nó trên một mẫu khớp.
Daniel C. Sobral

1
@Matthias Bây giờ tôi đã mở một vấn đề về nó. Tôi thường sửa chữa và quảng cáo nó, nhưng thật buồn là những ngày này tôi thiếu thời gian. :(
Daniel C. Sobral,

1
@samthebest Không có ý nghĩa. Nó có ý nghĩa hoàn hảo về các đặc điểm, và ngay cả ở phạm vi chức năng, nó cũng có ý nghĩa nếu bạn định sử dụng nó để đối sánh mẫu.
Daniel C. Sobral

1
Tôi đang sử dụng scalastyle để kiểm tra các vi phạm về kiểu trong mã của mình. Nhưng dường như nó không bắt được các lỗi quy ước đặt tên này cho các hằng số. Có cách nào để kích hoạt kiểm tra đảm bảo các hằng số được đặt tên trong trường hợp lạc đà với chữ cái đầu tiên được viết hoa không?
jithinpt

43

(Đây là một nhận xét bổ sung cho câu trả lời của Daniel, nhưng tôi đăng nó như một câu trả lời vì lợi ích của việc đánh dấu cú pháp và định dạng.)

Quan điểm của Daniel về phong cách sử dụng một chữ cái viết hoa đầu tiên là quan trọng trong ngữ nghĩa ngôn ngữ là tinh tế và quan trọng hơn so với ban đầu tôi đã ghi công khi học Scala.

Hãy xem xét đoạn mã sau:

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

Ngây thơ, tôi đã mong đợi điều đó sẽ đạt được tất cả các trường hợp trong trận đấu. Thay vào đó, nó in:

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

Điều đang xảy ra là làm case Some(lowerConst)đổ bóng val lowerConstvà tạo ra một biến cục bộ có cùng tên sẽ được điền vào bất kỳ khi nào Somemột chuỗi có chứa được đánh giá.

Phải thừa nhận là có nhiều cách để giải quyết vấn đề đó, nhưng đơn giản nhất là làm theo hướng dẫn về kiểu để đặt tên liên tục.

Nếu bạn không thể tuân theo quy ước đặt tên, thì như @reggoodwin chỉ ra trong phần nhận xét bên dưới, bạn có thể đặt tên biến trong dấu tích, như vậy

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

1
Thêm vào câu trả lời của Leif: kịch bản này được đề cập trong Lập trình trong Scala 15.2. Nếu không có lựa chọn nào khác để sử dụng một hằng số bắt đầu với một trường hợp thấp hơn thì nó có thể được thoát với ve trở lại, ví dụ như trường hợp 'pi` => ....
reggoodwin

1
nếu trường hợp Một số (LowerConst) che bóng cho val lowConst, tại sao một số (UpperConst) không che bóng cho val UpperConst?
Adrian

@Leif Wickland @Daniel C. Sobral Giá trị của hằng số có quan trọng vì lợi ích của quy ước về đối sánh mẫu không? ví dụ như được val UpperConst = "UPPER_CONST"hoặc nó phải làval UpperConst = "UpperConst"
nir

7

Tên không đổi phải ở dạng chữ hoa lạc đà trên. Nghĩa là, nếu thành viên là cuối cùng, không thay đổi và nó thuộc về một đối tượng gói hoặc một đối tượng , nó có thể được coi là một hằng số .... Phương thức, giá trị và tên biến phải ở dạng chữ hoa camel thường.

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


Giá trị của các hằng số có quan trọng vì lợi ích của quy ước về khớp mẫu không? ví dụ: val UpperConst = "UPPER_CONST"like part java-style okay hoặc it should beval UpperConst = "UpperConst"
nir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.