Có phải là tốt nhất để sử dụng mạng get get làm tiền tố cho getters?


8

Nếu tôi có một boolean (thuộc tính) shouldAutoLoginthì tốt hơn là đặt tên cho getter getShouldAutoLoginhoặc chỉ shouldAutoLoginđể nó đọc giống tiếng Anh hơn?

Ví dụ :

if(shouldAutoLogin){
    ...
}

hoặc là

if(getShouldAutoLogin){
    ...
}

Là một tài sản có tên 'nênAutoLogin'? Sự phản ánh trong một số ngôn ngữ (ví dụ, khung jsp) mong muốn ${foo.something}được dịch sang foo.getSomething()phía sau hậu trường.

Đó dường như là chuẩn mực. Tuy nhiên, đối với các giá trị boolean, nó cũng thường được sử dụng isFoo()thay thế getFoo(). Trong ví dụ của bạn đó sẽ làisAutoLogin()
Rath

Nếu bạn muốn truy cập bất kỳ lớp nào trong số đó từ jsp, bạn phải thực hiện khá nhiều.
Jaydee

@jmoreno trong khi tôi (và những người khác) đã đề cập đến Java, không rõ OP đang nói về nó (nếu có bất cứ điều gì, với sự lựa chọn các biểu thức bên trong if()nó không chắc là Java.

7
@MikeBryant Quy ước đặt tên là ngôn ngữ cụ thể.
CodeInChaos

Câu trả lời:


9

Quy ước đặt tên cho getters là bình thường,

getAutoLogin() nếu nhận được một số chuỗi hoặc đối tượng.

isAutoLogin() cho boolean.


11
Đây là quy ước đặt tên cho java , một phần của JavaBeans . Đối với c #, bạn khai báo tên thuộc tính mà không có bất kỳ tiền tố nào như get / set / is.
k3b

@ k3b Cảm ơn thông tin. Tôi là một nhà phát triển Java. :) Nhưng thật tốt khi biết về quy ước C #. Cảm ơn
JNL

2
Câu hỏi này là về getters / setters, không phải thuộc tính. Tôi nghĩ rằng getters và setters trong C # thường bắt đầu bằng get * hoặc set * quá (xem ví dụ stackoverflow.com/questions/16718772/ Lỗi ).
sergut

1
@sergut: Đúng, nhưng nếu các phương thức getter / setter nhanh và bình thường, người ta thường ưu tiên các thuộc tính hơn các phương thức getter và setter. Nếu chúng không phải là idempotent, get và set prefix có thể gây hiểu nhầm. Nếu chúng không nhanh, có thể thay thế tiền tố và đặt tiền tố bằng tiền tố, điều này làm cho rõ ràng hơn là có chi phí (ví dụ: sử dụng "tính toán" thay vì "getFrob").
Brian

@Brian Tôi đang tìm kiếm một số làm rõ hơn. Cách tôi nhìn thấy getters và setter là CHỈ để lấy dữ liệu riêng tư và thiết lập dữ liệu. Trong nhận xét trước đó khi bạn đưa ra một ví dụ về tính toánFrob (), điều đó sẽ giống như một thao tác / phép tính được thực hiện trên dữ liệu riêng tư. Tính toán đó cũng có thể là tạm thời và chúng tôi có thể không cần thiết lập dữ liệu riêng tư. Tôi hy vọng bạn nhận được, điểm mà tôi đang cố gắng thực hiện ở đây.
JNL

3

Theo truyền thống, getters được tiền tố với gethoặc ischo giá trị. Điều này thường được đề cập trong hướng dẫn phong cách java. Ví dụ: Hướng dẫn về kiểu lập trình Java (đây chỉ là một ví dụ).

Quy ước cho các tên phương thức như vậy đôi khi được thi hành trong các công cụ sử dụng sự phản chiếu hoặc mong đợi các kiểu mã nhất định. Ví dụ, một lần nữa trong Java (mặc dù Ngôn ngữ biểu thức của JSP), ${foo.bar}sẽ được dịch sang cuộc gọi foo.getBar()khi jsp được biên dịch. Điều getValue()này được thi hành theo cách này để nó trở thành nhiều hơn một quy ước.

Như đã đề cập, các ví dụ trên là từ Java. Đây là một quy ước cho Java . Các ngôn ngữ khác có các quy ước khác nên được xem xét và có khả năng cũng tuân theo. Một số ngôn ngữ sử dụng các thuộc tính (và có thể thực hiện những thứ gọn gàng khác với chúng như sao chép theo yêu cầu hoặc chỉ đọc).

Nhìn vào các hướng dẫn phong cách cho sự lựa chọn ngôn ngữ cụ thể của bạn. Có lẽ nên theo dõi chúng khi có thể để các lập trình viên khác, khi đọc mã của bạn, sẽ nhanh chóng có thể vào mã hơn mà không cần cố gắng tìm ra phong cách cá nhân của bạn.


2

Đặt tên một phương pháp một cách thông minh có thể đọc được có lợi thế. Các phương thức đặt tên sao cho ý định và bản chất của chúng dễ dàng xuất phát từ tên ("getters có tiền tố get, vị từ boolean is") cũng có lợi thế.

Tùy thuộc vào bạn để đạt được sự cân bằng, nhưng trong một dự án lớn, lợi ích của tính nhất quán thường vượt trội so với sự thông minh tình cờ.

Đổi tên một phương pháp để làm cho tên có thể đọc được và tuân thủ quy ước là một bài tập tốt hàng ngày. Trong trường hợp cụ thể của bạn, tôi sẽ xem xét một cái gì đó như isAutoLoginEnabledhoặc getAutoLoginFlag.

OTOH bạn có một loạt các phương pháp tương tự về mặt khái niệm mà tất cả đều có thể theo mô hình shouldDoSomething, tên ban đầu của bạn cũng có thể tốt.


Tôi thực sự thích thêm "Đã bật" cho getter, nó cải thiện đáng kể khả năng đọc mà tôi tìm thấy
Mike Bryant

1

Tôi luôn thấy rằng mã phải dễ đọc nhất có thể. Nó giúp xác định rõ ràng ý định của mã. Trong trường hợp của bạn, hãy suy nghĩ về việc sử dụng cả tích cực và tiêu cực của boolean của bạn và tác động của nó đến khả năng đọc và ý định logic của bạn sẽ như thế nào.

if(!shouldAutoLogin)
{
     ....
}

đấu với

if(!getShouldAutoLogin)
{
    ....
}

Điều này mang lại một ý nghĩa rõ ràng hơn cho ý định của những gì mã đang cố gắng làm?

Như những người khác đã đề xuất, tôi thậm chí sẽ đổi tên biến thành

isShouldAutoLogin

hoặc tương tự


0

Tôi có xu hướng viết getAutoLoginkhi tôi muốn phương thức thành returnkiểu dữ liệu, như một inthoặc a String. Tuy nhiên, nếu tôi muốn kiểm tra xem nó truehoặc false( boolean), tôi chỉ đơn giản là trao đổi các getđến một isnhư thế này: getAutoLogin> isAutoLogin. Tôi tin rằng có một quy ước đặt tên cho mọi ngôn ngữ.

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.