2009-04-22 34 views
20

Jeff hoàn thành his post nói về điều này, nhưng tôi không hiểu ý tưởng đó.Tại sao tất cả các mũ liên tục được coi là phong cách mã hóa xấu?

Vì vậy, tại sao bạn cho rằng đây là kiểu mã hóa kém?

EDIT:

tôi, như rất nhiều bạn, không nghĩ rằng đó là một phong cách viết mã xấu. Nhưng Jeff là lập trình viên giỏi hơn tôi nhiều, và quan điểm của anh ấy bật đèn lên đầu tôi để trả lời nếu tôi sai. Tôi là một nhà phát triển Delphi trong một vài năm và đang trở thành một nhà phát triển C# bây giờ, và trong Delphi nó là một thực tế phổ biến.

+6

Có lẽ phải là cộng đồng wiki. – chaos

+0

Liên quan đến Delphi, tất cả các mũ cho hằng số thường bị cấm [theo hướng dẫn về phong cách chính thức] (http://edn.embarcadero.com/article/10280#3.3). – DBedrenko

Trả lời

56

Tất cả các mũ là chỉ định C truyền thống của hằng số macro tiền xử lý. Nó rất hữu ích để có chúng trong một không gian tên khác với bất kỳ thứ gì khác, vì bộ tiền xử lý sẽ thay thế bất cứ nơi nào nó tìm thấy tên, bất kể những thứ như phạm vi.

Hằng số theo nghĩa mà Jeff đang sử dụng là, theo ngữ nghĩa, một biến không thể thay đổi. Nó tuân theo tất cả các nguyên tắc phạm vi và mọi thứ, và có ngữ nghĩa giống hệt với một biến không phải const với cùng giá trị.

Để đặt này một cách khác,

#define max_length 5 

là một vấn đề bởi vì ai đó có thể sử dụng max_length như là một biến trong một bối cảnh khác nhau, nơi mà nó sẽ thường được an toàn, trong khi

const int max_length = 5; 

chỉ đơn giản là một tuyên bố biến. Do đó, có một lợi thế trong việc sử dụng

#define MAX_LENGTH 5 

vì quy ước là chỉ hằng Preprocessor là tất cả mũ, vì vậy nó sẽ không can thiệp vào bất kỳ sử dụng khác.

+6

+1 Ngoài ra, nếu bạn sử dụng các macro để tính toán (nói sai số chuẩn MAX() và MIN() bit, nó giúp biết rằng các đối số cho các đối tượng này có ngữ nghĩa tiền xử lý không phải ngữ nghĩa trình biên dịch. – dmckee

+0

+1 Câu trả lời rất hay !!! – eKek0

4

TẤT CẢ CÁC CAPS GIỐNG NHƯ THẾ NÀO.

3

C ALNG C MAKNG C MAKNG VIỆC HÃY CẦN LÀM MÃ SỐ ĐỌC ĐỌC

2

LẤY CÂU HỎI, TẠI SAO SỬ DỤNG TẤT CẢ CÁC CAPS?

3

Jeff có một số điều bổ sung để nói về vấn đề này trong các ý kiến:

Tuy nhiên ở phía bên kia và lý do tôi vẫn sử dụng tất cả các mũ và nhấn

Less mã? Đó là một nguyên nhân đáng giá xứng đáng được thảo luận nghiêm túc.

Nhưng bạn có gọi điều gì đó là "foo", "Foo", "_foo" hoặc "FOO" không? Meh.

Quy ước đặt tên rất cao gây tranh cãi và tôn giáo. Nhà phát triển nên chọn một thứ gì đó mà họ thích, một điều hy vọng không phải là quá nhiều với tỷ lệ "Công ước địa phương" và chỉ cần thực hiện. A nhiều cuộc thảo luận và vắt tay khi đặt tên không đáng giá.

Điều đó nói rằng, tôi nghĩ TẤT CẢ CÁC CAPS LÀ THỰC HIỆN HARD ĐỌC!

Tôi cũng sử dụng điều này cho các hằng số, nhưng tôi cũng có thể hiểu tại sao một số người không thích nó. Nó giống như viết mọi thứ bằng chữ thường bằng tiếng Đức hoặc các ngôn ngữ khác.

2

Một số người coi TẤT CẢ CAPS là "trường học cũ". Hãy xem xét sự khác biệt giữa:

const string ErrorMessage = "Some error message.";

const string ERROR_MESSAGE = "Some error message.";

Cả hai đều hoàn toàn có thể sử dụng, nhưng ALL CAPS phiên bản được ít được sử dụng bởi các nhà phát triển mới hơn, chẳng hạn như những cái mà bắt đầu ra với. MẠNG LƯỚI.

Tôi coi đó là kiểu mã hóa sai nếu nhóm của bạn đang sử dụng một kiểu khác. Ngoài ra, tôi không thực sự quan tâm. Ít nhất khi tôi thấy TẤT CẢ CAPS trong một số mã được chia sẻ, tôi có thể đoán rằng đó là một hằng số.

+1

-1: Không phải "trường học cũ", nhưng phụ thuộc vào ngôn ngữ/nền tảng. Trong .NET nó không được khuyến khích, nhưng các trường hợp khác được khuyến khích. – Richard

+2

Tôi đoán bạn đã không đọc bài đăng của Jeff, trong đó ông đặc biệt gọi nó là "trường học cũ". –

0

Tôi sử dụng ALL_CAPS cho macro và ký hiệu tiền xử lý. Vì vậy, các hằng số C99 C trước của tôi là ALL_CAPS, nhưng không phải bằng bất kỳ ngôn ngữ nào khác mà tôi biết.

7

Tôi không nghĩ đó là kiểu mã hóa xấu. Có thể kiểu cũ, nhưng không tệ. Nó làm cho các hằng số nổi bật so với các biến khác.

2

Tôi không nghĩ rằng nó sai. Chủ yếu, đó là một sự lựa chọn cá nhân. Để mã hóa cá nhân của bạn, hãy làm những gì bạn muốn. Để bạn mã hóa chuyên nghiệp, hãy tuân thủ chính sách của công ty.

3

Vâng, có vấn đề về khả năng đọc cũ. Kiểm tra bình thường-cased chỉ dễ đọc hơn.

Có những ngoại lệ. Các ngôn ngữ như SQL thường là tất cả các chữ hoa (mặc dù không phân biệt chữ hoa chữ thường).

Ngoài ra, có các cách sử dụng khác, như phân biệt giữa "hằng số" và biến thông thường, bạn sẽ thấy bằng nhiều ngôn ngữ như PHP, Python, v.v., mặc dù Jeff vì một lý do nào đó không thích rằng, và nó rõ ràng là chống lại các hướng dẫn kiểu mã C#.

Vì vậy, nói chung, tôi không nghĩ rằng nó sai ở bất cứ nơi nào, nhưng tôi nghĩ rằng một trong những nên luôn luôn cố gắng và làm theo các thực hành tốt nhất chung. Khi ở Rome, làm như người La Mã - khi mã hóa Python, hãy làm theo PEP 8 :)

2

Cũng giống như tất cả mọi thứ bằng văn bản in đậm không phải là một ý tưởng tốt

+0

Bạn đã viết mã Java/.Net trong Word? – romaintaz

+0

Một đồng nghiệp của tôi đã đặt phông chữ trình chỉnh sửa mã của anh ấy thành chữ đậm ... thật là thú vị khi có thể đọc được mã của anh ấy từ khắp phòng. –

5

Lý do hấp dẫn chỉ với tôi là sự nhất quán trong phong cách. Đối với các ngôn ngữ không phải NET như Java/C++, tất cả các hằng số đều chắc chắn có thể chấp nhận được.

Đối với C#, tiêu chuẩn là sử dụng PascalCase, như đã nói ở đây: C# naming convention for constants?

+3

Đúng, đồng hóa phong cách của nền tảng/ngôn ngữ là cách để đi. +1 –

30

Bạn sẽ thấy rằng rất nhiều báo cáo của Jeff đang gây tranh cãi đầu tiên, với độ chính xác là một mối quan tâm thứ yếu. Blog của anh ấy sẽ không phổ biến nếu anh ấy không phải là thỉnh thoảng viêm. (Hãy xem xét dòng cuối cùng của Death to the Space Infidels, "Điều đó nói rằng, chỉ có một moron sẽ sử dụng các tab để định dạng mã của họ.") Đó là một cách trung thực chủ quan. Đừng lấy mọi thứ anh ta nói là Đúng và Tốt - nó không có nghĩa là gì. Nếu bạn không đồng ý, hãy đá vào mông của mình trong các bình luận, và xem liệu anh ta có viết lại không. :)

Tôi nghĩ rằng ALL_CAPS_CONSTANTS là hoàn hảo: chúng có thể nhận ra và quen thuộc ngay lập tức. Một phần nguyên tắc về phong cách của nơi làm việc của tôi (và chúng tôi không có nhiều hướng dẫn) là viết tất cả các hằng số tĩnh trong mũ. Đừng đổ mồ hôi; chỉ sử dụng bất kỳ phần còn lại nào trong nhóm của bạn sử dụng. Quyết định số StudlyCaps so với camelCase so với SCREAMING_CAPS có giá trị có thể là 90 giây thảo luận.

9

Thành thật mà nói, tôi không nghĩ đó là phong cách mã hóa xấu. Thật vậy, ngay cả phong cách mã Java chính thức cũng làm cho các hằng số tất cả các thủ đô (http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html), cũng như các quy ước ngôn ngữ khác. Về lý thuyết, khó đọc hơn - con người chúng ta muốn sử dụng chiều cao của chữ cái để tăng tốc độ đọc (chúng ta có thể phỏng đoán rất nhiều thông tin từ hình dạng từ thô và chữ cái đầu/cuối). Tuy nhiên, tôi không có vấn đề với ngắn, tất cả các cụm từ vốn. Nó hầu như không "la hét" (trình biên dịch của bạn không chính xác quan tâm bạn thô lỗ như thế nào), và rõ ràng cho thấy các tên có khả năng có thể thay đổi, và những người không.

+0

Trình biên dịch _you không thực sự quan tâm bạn thô lỗ như thế nào_ - trừ khi bạn đang viết trong [INTERCAL] (https://en.wikipedia.org/wiki/INTERCAL). – Ruslan

18

Screaming là tốt. Trong trường hợp của hằng số nó nói với người đọc

DONT SUY NGHĨ VỀ THAY ĐỔI ME SAU TRÊN MÃ

Nhưng tôi hiểu nếu các lập trình viên phần mềm có bị xúc phạm.

2

Tôi đã bật lại capslock của mình thành khóa ctrl (woo emacs!). Vì vậy, tôi nghĩ rằng phong cách xấu của nó khi tôi phải nhập tên 30 ký tự trong khi giữ phím shift

+3

Vì lý do nào đó, tôi thực tế không bao giờ sử dụng phím caps-lock, ít nhất là cố ý. Tôi nhập nhanh, nhưng không sử dụng phương pháp "gõ" chính thức.Tôi chỉ cần nhấn phím với bất kỳ ngón tay nào cảm thấy thích hợp vào thời điểm đó, và không gặp khó khăn khi gõ bất kỳ ký tự bên trái nào trong khi giữ phím trái. – supercat

0

Hằng số và CONSTANTS có thể khác nhau. Chỉ sử dụng tất cả các mũ khi xử lý tiền xử lý, ví dụ trong C++, bạn nên tránh và sử dụng biến const hoặc constexpr, được đặt tên giống như bất kỳ biến nào khác (có thể với một số tiền tố hoặc cái gì đó để làm rõ một hằng số nhưng ...).

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