Những lợi ích của tên tham số chức năng tiền tố với p * là gì?


22

Tôi thường thấy các dự án (trong các dự án và nhóm Java sử dụng Eclipse) có các tham số hàm tiền tố với p.

Ví dụ

public void filter (Result pResult) ...

Cá nhân tôi không thấy bất kỳ lợi ích nào trong việc này, nhưng muốn biết lý do là gì. Giải thích tốt nhất tôi từng nghe là phân biệt tên của các trường có tên giống hệt nhau. Tôi có vấn đề của mình với lời giải thích đó nhưng tôi có thể hiểu được vấn đề.

Câu trả lời:


34

Các thực tiễn về việc thêm các tiền tố có ý nghĩa vào các biểu tượng, chẳng hạn như Ký hiệu Hungary được công bố rộng rãi , có từ thời IDE không tồn tại hoặc quá nguyên thủy. Ngày nay, khi tìm thấy một điểm khai báo là một cú click chuột, không có điểm nào làm hỏng phần quý giá nhất của tên, một vài chữ cái đầu tiên của nó, bằng cách gán một tiền tố chung.


10
Hệ thống ký hiệu Hungary là một thực tế khủng khiếp nên tránh. Mặt khác, một số Apps Hungary Notation có thể hữu ích (ví dụ như để ngăn ngừa người dùng nhập vào không an toàn khỏi bị lạm dụng).
Casey Kuball

7
@Darthfett: Ngay cả loại ký hiệu này dường như đang cố gắng thực hiện một hệ thống loại thủ công, trực tiếp trong các tên biến. Chỉ cần sử dụng một ngôn ngữ gõ tĩnh tốt và có một hệ thống loại thực theo dõi những thứ như thế cho bạn tự động!
Tikhon Jelvis

1
@WyattBarnett Systems Hungary không cung cấp cho lập trình viên bất kỳ thông tin hữu ích nào với các IDE hiện đại. Ứng dụng Hungary có thể giảm đau đầu trong đánh giá mã khi chúng được thi hành chính xác.
Casey Kuball

2
@TikhonJelvis Không phải tất cả các ngôn ngữ đều hỗ trợ typedefs được thi hành mạnh mẽ (ví dụ: typdefs C ++ ). Đối với các ngôn ngữ hỗ trợ nó, bạn hoàn toàn đúng.
Casey Kuball

4
@Darthfett: Trong C / C ++, bạn có thể chỉ cần bọc nó trong struct/ unionvới một phần tử.
Maciej Piechotka

9

Như bạn nghi ngờ, đó là để tránh xung đột tên giữa tên tham số và tên thành viên hoặc tên biến cục bộ. Các biến thành viên đôi khi được đưa ra một tiền tố cho cùng một lý do (ví dụ m_result:). Cá nhân, tôi thích chỉ sử dụng thistiền tố cho các biến thành viên nếu có xung đột tên. Nó được tích hợp vào ngôn ngữ và mọi người đều biết ý nghĩa của nó.


Đó là những gì tôi làm. Không sử dụng tiền tố cũng giúp ích cho Eclipse khi gọi phương thức. Nếu bạn xây dựng cây đối tượng của mình và đặt tên cho các biến như tên tham số của phương thức bạn muốn gọi, nó hoạt động như một bùa mê, nhưng nếu tên tham số có tiền tố thì điều này không hoạt động.
oschrenk

5

Tôi chỉ sử dụng tiền tố tham số khi tham số được dự định được gán cho biến thành viên, chẳng hạn như hàm tạo hoặc hàm setter.

Paint (newColor) {
  color = newColor;
}

Đối với tôi, tôi thấy rằng việc sử dụng một tên biến khác rõ ràng rõ ràng hơn so với sử dụng tiền tố "này".

Đối với các tình huống khác, tôi tránh sử dụng một tham số có thể dễ bị nhầm lẫn với biến thành viên.

Nếu một phương thức hoặc lớp quá lớn đến mức khó có thể nói ý nghĩa của các biến, thì giải pháp thực sự là chia nó thành các phương thức / lớp nhỏ hơn. Sử dụng tiền tố là một giải pháp hỗ trợ băng tần giải quyết vấn đề tiềm ẩn.


Cá nhân, tôi thích viết tắt tên tham số trong trường hợp đó (ví dụ Paint (clr) { color = clr; }:). ... Thường không có nhiều sự mơ hồ, mặc dù color -> clrđặc biệt có thể là một ngoại lệ.
Justin Time 2 phục hồi lại

1

Nếu bạn tạo một tiêu chuẩn để sử dụng 'p' làm tiền tố với mỗi tên tham số phương thức, bạn có thể dễ dàng nhận ra các tham số phương thức trong phần còn lại của thân phương thức.

Nó tiết kiệm thời gian của bạn để tìm các tham số phương thức. Bạn có thể gỡ lỗi mã của bạn một cách dễ dàng.


1
Nếu bạn không thể biết đâu là tham số và đâu là không - phương thức của bạn có thể được viết xấu. Có lẽ nó quá dài hoặc sử dụng quá nhiều biến không có cấu trúc? Dù bằng cách nào, nó có vẻ như là một vấn đề khác được giải quyết bằng cách thêm các tiền tố không cần thiết.
jakubiszon

1

Ngắn gọn - Cách làm này làm cho mã khó đọc hơn.

Long - Tôi sẽ lập luận rằng đó là một thực tiễn xấu chỉ được sử dụng để hỗ trợ các thực tiễn xấu khác. Hãy xem xét một vài lý do tại sao sử dụng các tiền tố như vậy có thể được coi là hữu ích:

  • Tránh va chạm trong tên biến

    • Tên tham số của bạn thể hiện chính xác các tham số là gì? Nếu bạn có một tham số và trường lớp "hoàn toàn giống nhau", bạn không cần một tham số.
    • Trong trường hợp này, việc sử dụng các tiền tố cho các nhà xây dựng lớp như tiền tố * mới được mô tả trong câu trả lời của Aaron chỉ có ý nghĩa. Nó cũng có thể hữu ích cho các phương thức setter, vd

    public void setHeight(int newHeight) { this.height = newHeight; }

  • Các phương thức mất rất nhiều tham số, khai báo rất nhiều biến và chúng ta có thể dễ dàng quên cái nào là tham số.

    • Như đã mô tả ở trên - vấn đề nằm ở số lượng biến.
    • Chương trình có lẽ không có cấu trúc tốt. Kiểm tra xem tất cả các biến là "độc lập" - có lẽ chúng nên được tổ chức theo cấu trúc hoặc lớp. Có lẽ toàn bộ tính toán hoặc quy trình nên được gói trong một lớp riêng biệt chỉ để hoạt động trên số lượng biến như vậy.
    • Ngay cả khi bạn cần số lượng biến như vậy - họ nên sử dụng tên có ý nghĩa và tiền tố đang đứng giữa bạn và phần có ý nghĩa.
  • Các phương thức rất dài và bạn cần sử dụng các tiền tố để theo dõi các thông số là gì.
    • Vấn đề nằm ở độ dài của các phương thức - Nếu một chương trình được viết tốt, bạn sẽ luôn thấy tiêu đề phương thức và toàn bộ phần thân của nó trên một màn hình.
    • Hãy thử chia phương thức thành các khối nhỏ hơn.

Ngoại trừ một số trường hợp cụ thể, thêm tiền tố tham số chỉ giúp giải quyết các triệu chứng và không giải quyết được các vấn đề thực tế.


0

Tôi là một fan hâm mộ của iParam cho và oParam cho các tham số. Tôi muốn nói cParam để thay đổi, nhưng điều đó không được chấp nhận


2
Bạn có thể giải thích tại sao bạn là một fan hâm mộ của tiền tố này, bạn đạt được gì khi sử dụng nó?
Peter
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.