2012-03-11 29 views
9

Tôi đã chấp nhận từ nhiều ngôn ngữ khác mà gạch dưới có nhiều tự do như bảng chữ cái trong số nhận dạng. Do đó _vv_. Ngoài ra, dấu gạch dưới có dấu là được đề xuất để tránh sự mơ hồ với các từ khóa được đặt trước (class_, case_).Hướng dẫn kiểu Scala cho dấu gạch dưới trong số nhận dạng

val abc_=0 
<console>:1: error: '=' expected but integer literal found. 
     val abc_=0 

dấu gạch dưới là một phần quan trọng của hệ thống đánh máy Scala, những gì là cách khuyến khích để sử dụng chúng trong định danh, để phân tích cú pháp và con người đều có thể được hạnh phúc? Tất cả các sự mơ hồ có thể có mà các số nhận dạng có dấu gạch dưới mang lại là gì?

Khoảng trắng hàng đầu dường như làm tăng thêm sự nhầm lẫn _class thay vì class_.


câu hỏi liên quan:

+2

Xem [hướng dẫn kiểu] (http://docs.scala-lang.org/style/naming-conventions.html). – agilesteel

+4

Tôi chưa bao giờ thấy thứ 'class_'. Tôi thường thấy lỗi chính tả sáng tạo (ví dụ: 'clazz') hoặc Scala cho phép bạn sử dụng từ khóa làm số nhận dạng nếu bạn bao quanh chúng bằng các dấu gạch chéo ngược. –

+0

@SethTisue, tôi nhận được nó từ hướng dẫn phong cách PEP8 của Python. Lỗi của tôi; nghĩ đó là một tiêu chuẩn. – aitchnyu

Trả lời

15

dấu gạch Trailing là một ý tưởng tồi vì những thứ như x_+ là tên biến hợp lệ của riêng mình. Không sử dụng dấu gạch dưới ở tất cả.

Dấu gạch dưới hàng đầu ít ý tưởng hơn, nhưng vẫn khó phân tích bằng hình ảnh những thứ như _myfunc _. Có một cái gì đó của một quy ước để làm cho các thành viên tư nhân giữ đối số constructor cùng tên bắt đầu với _: class X(x: Int) { private var _x = x }. Đề xuất của tôi là không làm điều đó. Bạn đang yêu cầu sự nhầm lẫn. Sử dụng myX hoặc theX hoặc xLocal hoặc xi hoặc một cái gì đó cho biến nội bộ của bạn. Tuy nhiên, nếu bạn làm hãy đi với _x, bạn sẽ có công ty tốt; mọi người sẽ có xu hướng biết ý bạn là gì.

Dấu gạch dưới trong tên không được sử dụng rộng rãi, vì trường hợp lạc đà là tiêu chuẩn. Ngoại lệ mà tôi thực hiện là tôi sử dụng dấu gạch dưới trong các lỗi ngầm định không được sử dụng bằng tay và thay vào đó nêu rõ lý do chuyển đổi đang diễn ra: tuple2_can_expand có thể thêm phương thức expand để chuyển đổi Tuple2 thành ví dụ Tuple3.

6

Chỉ có một nơi bạn cần dấu gạch dưới trong số nhận dạng: giữa các ký tự chữ và số và khác. Trong thực tế, đó chỉ là những gì xảy ra trong trường hợp của bạn: trình phân tích cú pháp cho rằng bạn đang khai báo val abc_= và không có = sau nó! Hầu hết sử dụng chung là các phương pháp "setter":

def prop: String // or some other type 
def prop_=(v: String) 

Tôi cũng đã nhìn thấy predicate_? thay vì hơn Java như isPredicate.

keyword_ không thường được sử dụng, nhưng nếu bạn sử dụng chúng, đừng tiết kiệm khoảng trắng. Viết, ví dụ: val abc_ = 0. Nhưng cho rằng vấn đề, val abc = 0 là dễ đọc hơn so với val abc=0 là tốt, vì vậy bạn nên có khoảng trắng có anyway. Như Rex Kerr nói, _privateVariable là chấp nhận được, nhưng không được khuyến cáo thực hành.

+1

Bạn có biết tại sao "predicate_?" Không? và không phải là "vị ngữ"? Chỉ tò mò thôi. –

+2

@EdStaub Chủ yếu là do đó bạn vẫn có thể viết những thứ như 'x + y' hoặc' x = y' và không có trình phân tích cú pháp nghĩ rằng đó là một số nhận dạng duy nhất, tôi nghĩ vậy. –

Các vấn đề liên quan