2009-02-01 24 views
20

Tôi tự dạy mình Mục tiêu-C và tôi nhận thấy trong rất nhiều sách và ví dụ về việc sử dụng 'k' và vỏ lạc đà trong định nghĩa không đổi, ví dụ:Ý nghĩa của các hằng số bắt đầu bằng 'k' là gì?

#define kMyConstant 0 

Ý nghĩa của 'k' là gì? Đây có phải là duy nhất đối với kiểu Objective-C hay chung với C? Tại sao độ lệch từ (những gì tôi đã luôn luôn nghĩ là một thực hành tốt nhất) K_MY_CONSTANT phong cách?

Cảm ơn.

Trả lời

21

Nó đã được đề cập một lần trước đây trong câu hỏi SO, Lower case "k" in Cocoa.

Đó là một ký hiệu lập trình nói chung không cụ thể cho Objective-C (ví dụ: Hungary Notation) và "k" là viết tắt của "liên tục".

Nếu bạn nhìn vào Google cache của nguyên tắc của Google cho Objective-C, bạn có thể thấy rằng họ sử dụng để bao gồm nó trong styleguide của họ:

tên Constant (# định nghĩa, sự đếm, biến cục bộ const, vv) nên bắt đầu bằng chữ thường k và sau đó sử dụng trường hợp hỗn hợp để phân tách các từ, ví dụ: kInvalidHandle, kWritePerm.

Mặc dù một nỗi đau để viết, chúng hoàn toàn quan trọng để giữ cho mã của chúng tôi có thể đọc được. Các quy tắc sau đây mô tả những gì bạn nên bình luận và ở đâu. Nhưng hãy nhớ: trong khi nhận xét rất quan trọng, thì mã tốt nhất là tự ghi lại tài liệu. Đặt tên hợp lý cho các loại và biến là tốt hơn nhiều so với sử dụng tên ít người biết đến và sau đó cố gắng giải thích chúng thông qua nhận xét.

Nhưng từ đó đã bị xóa khỏi tài liệu live version của tài liệu. Cần lưu ý rằng nó đi ngược lại số Official Coding Guidlines for Cocoa từ Apple.

+0

Rất thú vị. "Nói chung, không sử dụng lệnh #processef preprocessor để tạo hằng số. Đối với hằng số nguyên, sử dụng liệt kê và đối với hằng số dấu phẩy động, hãy sử dụng trình định dạng const, như được mô tả ở trên." Cảm ơn! – typeoneerror

+0

PS, xin lỗi về câu hỏi lặp lại. Tôi thề tôi đã tìm kiếm đầu tiên! ;) – typeoneerror

+0

@TypeOneError, tôi đã không đề cập đến nó để chỉ ra một câu hỏi lặp lại. Tôi không nhất thiết nghĩ rằng đó là một câu hỏi chính xác lặp lại. Tôi chỉ đang trỏ bạn đến một tài nguyên khác để đọc. Câu hỏi của bạn rộng hơn một chút và có lẽ là một câu hỏi hay hơn. – mmcdole

3

Tất cả các nắp (như trong K_MY_CONSTANT) thường biểu thị macro - không nhất thiết phải là hằng số. Nói chung, điều quan trọng đối với các macro là nổi bật vì chúng ẩn tất cả các không gian tên.

Quy ước 'k' được sử dụng (nhưng không phổ biến) cho các hằng số không vĩ mô trong C/C++ và có thể là các ngôn ngữ khác. Tôi nghi ngờ 'k' được sử dụng vì 'c' thường được sử dụng - hoặc để biểu thị tên lớp (như trong CString) hoặc biến đó là bộ đếm.

3

Điều kMyConstant quay lại các ngày lập trình Mac cũ (80/90 là "rất cũ"). Đây là một Apple tiêu chuẩn được sử dụng và nhiều lập trình viên Mac cũng được sử dụng; điều này đã thay thế các định nghĩa kiểu MY_CONSTANT.

Tôi sẽ tưởng tượng các tác giả bạn đang đọc là các lập trình viên Mac Pascal/C cho Mac Toolbox cũ trước khi trở thành lập trình viên NeXT/Cocoa. Các thư viện Mac thường được gọi là "Hộp công cụ" - đây là tập hợp các API và thư viện biến thành Carbon theo thời gian.

Tôi vẫn sử dụng kMyConstant đôi khi; ổ đĩa đồng nghiệp lập trình Unix cũ của tôi.:-)

3

Tôi nghĩ rằng việc sử dụng một hàng đầu "k" là bởi vì tất cả các ngôn ngữ phát âm nó như là một phụ âm cứng và do đó nó nhắc nhở người dân cách phát âm tiếng Anh của "liên tục" :-)

Không có từ nào dành riêng bắt đầu với k để dễ dàng hơn như một mục tiêu tìm kiếm.

Ngoài ra, từ một khía cạnh đồ họa, là một ký tự hàng đầu, nó cung cấp một lá cờ rất rõ ràng ở phía trước phần còn lại của tên. Hàng đầu "c" ít rõ ràng hơn và có thể được sử dụng để chỉ các vai trò (chẳng hạn như ký hiệu Hungary) hoặc các lớp (nếu trong một ngôn ngữ không phân biệt dạng chữ).

MY_CONSTANT được chấp thuận khá tốt vì là các hằng số dựa trên macro. Đôi khi điều quan trọng cần biết là hằng số được xác định bởi macro, ví dụ ngụ ý nó dựa trên chữ và do đó từ phạm vi giới hạn các kiểu dữ liệu, cũng như được định nghĩa ở phạm vi toàn cục và do đó (như Michael Burr chỉ out) ghi đè mọi hằng số không gian tên cục bộ.

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