2009-04-23 30 views
17

Trong rất nhiều ngôn ngữ với khả năng OO đơn giản (PHP 4), hoặc hiểu lầm khả năng OO (Javascript, C bằng cách sử dụng con trỏ hàm, v.v.), bạn sẽ kết thúc với quy ước đặt tên hàm sử dụng hàng đầu nhấn mạnh để chỉ ra mức độ đặc quyền._Underscores trong các tên chức năng

//ex. 
function _myPrivateFunction(){ 
} 

Trong khi các đội cá nhân luôn đi để đến với ước đặt tên của mình như thế này, ước gạch dường như rất phổ biến mà nó khiến tôi tò mò về

  1. đâu kỹ thuật là người đầu tiên đến từ
  2. Nếu có bất kỳ hệ thống tiêu chuẩn nào (kiểu như ký hiệu hungarian) được phát triển xung quanh quy ước

Ngoài sự tò mò tinh khiết, tôi ' m thấy điều này trong một vài codebase tôi đang xử lý ngay bây giờ, và tôi muốn hiểu các không gian đầu có thể của các nhà phát triển ban đầu đã nghĩ ra nó.

+2

Trong Python, nó không chỉ là quy ước đặt tên, mà còn hai dấu gạch dưới hàng đầu thực sự làm cho các thành viên trở nên riêng tư! –

Trả lời

12

Trong thế giới C++, tên thành viên bắt đầu bằng dấu gạch dưới được dành riêng cho các nhà phát triển trình biên dịch (hoặc trình độ thấp như API) sử dụng. Nó không bị cấm bởi các trình biên dịch theo bất kỳ cách nào, nhưng đó là truyền thống.

Liên kết wiki này khá thông tin trên underscore.

+7

Thực ra, tất cả các tên bắt đầu bằng dấu gạch dưới đều được đặt trước trong không gian tên chung, nhưng chỉ các tên có chứa dấu gạch dưới kép hoặc bắt đầu bằng dấu gạch dưới và một chữ cái * vốn * được đặt trước trong mọi ngữ cảnh. Xem http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier hoặc 17.4.3 trong tiêu chuẩn. –

+0

Điều đó trông giống như lâu đời nhất, vì vậy một chiến thắng cho bạn. @onebyone, tôi bắt đầu thực sự hiểu tại sao c + + bị rap như vậy bây giờ :) –

+0

Tôi giả sử liên kết đến wiki dưới đây có nghĩa là tham chiếu đến chương trình (định hướng được thêm vào sau khi liên kết này được thêm vào câu trả lời tôi suy nghĩ). Vì vậy, có lẽ nên thay đổi thành: https://en.wikipedia.org/wiki/Naming_convention_(programming)? – Joakim

0

Lần đầu tiên tôi nhìn thấy nó khi mã hóa C++. Đánh dấu các biến thành viên với tiền tố "m_" thường được thực hiện.

Tôi không muốn sử dụng bất kỳ điều nào khi viết Java. Tôi làm cho biến thành viên rõ ràng bằng cách sử dụng "này".

+0

Biến thành viên được tự động đánh dấu bằng java vì các công cụ sử dụng phân tích tĩnh. Nhìn vào màu sắc của các biến của bạn trong bất kỳ trình soạn thảo nào bạn sử dụng! Đặt cái này. ở phía trước ngụ ý bạn đang dựa vào nó để nhận ra. Nếu bạn đang dựa vào một số con người nhớ sử dụng.điều này thay vì một máy BIOWS chính xác những gì biến là, bạn rõ ràng là dựa vào các chỉ số sai. –

+0

Đúng vậy, Bill. Tôi đứng sửa. – duffymo

+0

Đúng hay sai, tôi nghi ngờ một số người vẫn viết (hoặc đặc biệt là đọc) Java bằng cách sử dụng các trình soạn thảo văn bản mà không thể phân tích mã (hoặc bất kỳ) nào. Tôi cố gắng xử lý cú pháp làm nổi bật như thứ gì đó giúp tôi chỉnh sửa, không phải là thứ mà người khác cần nếu họ muốn đọc mã của tôi ... –

6

Tôi không thể cho bạn biết nguồn gốc của quy ước này. Đoán của tôi là, vì dấu gạch dưới là ký tự không phải chữ và số duy nhất được cho phép trong số nhận dạng trong hầu hết các ngôn ngữ lập trình, nên tự nhiên chọn nó làm tiền tố cho các thành viên riêng. Trong Python, tiền tố tên với dấu gạch dưới không chỉ là quy ước: Ký hiệu bắt đầu bằng dấu gạch dưới không được nhập theo mặc định khi nhập "mọi thứ" từ mô-đun, do đó dấu gạch dưới cho biết "riêng tư"/"sử dụng nội bộ" .

0

Tôi đã nhìn thấy dấu gạch dưới được sử dụng như chức năng riêng và tôi đã nhìn thấy được nhìn thấy dấu gạch dưới như các chức năng toàn cầu. Ngoài ra dấu gạch dưới được sử dụng để biểu thị các biến toàn cục trong chính PHP.

$_POST $_GET $_SESSION etc.. 

Đó chỉ là quy ước đặt tên vì vậy tôi sẽ hỏi tác giả, nếu anh ấy ở xung quanh.

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