Tôi luôn luôn đấu tranh trong việc viết tắt tên biến. Có bất kỳ tiêu chuẩn để viết tắt tên biến?
Tôi luôn luôn đấu tranh trong việc viết tắt tên biến. Có bất kỳ tiêu chuẩn để viết tắt tên biến?
Câu trả lời:
Tiêu chuẩn tôi sử dụng là không viết tắt tên biến trừ khi chữ viết tắt dễ đọc hơn phiên bản đầy đủ ( i
ví dụ: đối với các chỉ số lặp). Chúng tôi đặt tên cho những thứ để chúng tôi có thể giao tiếp. Việc viết tắt tên biến thường làm giảm khả năng giao tiếp của họ.
Tôi không phải là lập trình viên C #, vì vậy tôi không thể cho bạn nhiều lời khuyên về các quy ước C #. Nhưng tôi có một số suy nghĩ về chữ viết tắt.
Khi tôi già đi và có nhiều kinh nghiệm hơn, tôi thấy mình viết tắt ngày càng ít đi. Tôi sẽ thừa nhận rằng tôi không phải là một người đánh máy rất giỏi khi tôi bắt đầu lập trình. Tôi đã trở nên tốt hơn từ đó;). Tôi sẽ viết tắt tự do cho các biến có phạm vi rất hạn chế, để tôi có thể thấy toàn bộ thời gian tồn tại của chúng trên một màn hình. Nhưng khác hơn là tôi không muốn nếu tôi có thể tránh nó - Tôi không bao giờ viết tắt để lưu gõ.
Tôi vẫn cố gắng giữ các dòng của tôi dưới 80 ký tự. Tôi không chắc điều đó có ý nghĩa gì trong những ngày này không, nhưng đó là một thói quen cũ. Vì vậy, tôi sẽ viết tắt nếu một tên biến sẽ rất dài. Nhưng trước khi tôi làm điều đó, tôi sẽ cố gắng tìm một cái tên ngắn gọn hơn, rõ ràng hơn - tất cả những thứ khác ngắn hơn bằng nhau sẽ tốt hơn (nói về hình thức mở rộng.)
Tôi nghĩ bạn viết tắt ở đâu là quan trọng nhất, bạn nghĩ rằng bạn luôn viết tắt theo cùng một cách trong một cơ sở mã nhất định và trên các cơ sở mã liên quan. Bản năng đầu tiên của bạn có khả năng là người đi cùng, vì nó sẽ dễ nhớ nhất đối với bạn, nhưng nó có thể đáng để kiểm tra với những người khác trong cùng dự án. Những ngày này tôi làm việc chủ yếu với một lập trình viên khác, trong một văn phòng mở đầy những người không lập trình. Họ nghĩ rằng chúng tôi điên rồ, bởi vì chúng tôi thường có các cuộc thảo luận chi tiết về những thứ như làm thế nào để viết tắt các tên biến liên quan hoặc liên tục sắp xếp các tham số trong các lệnh gọi hàm, v.v. Nhưng đặt tên vấn đề, thậm chí cho cả hai người. Trên các đội lớn hơn, nó càng trở nên quan trọng. Một điều tôi khá tôn giáo là sửa chữa những mâu thuẫn trong những thứ như thế này ngay khi tôi phát hiện ra chúng.
EDIT: một số chữ viết tắt là tốt mặc dù, tôi nghĩ. Trong công việc hiện tại của tôi, rất nhiều mã tôi viết phải thực hiện với việc đánh giá các spline và các hàm tham số khác, tại các giá trị tham số nhất định. Codebase của chúng tôi trên thực tế không nhất quán trong vấn đề này. Tôi biết rằng u được sử dụng ở một số nơi và param (viết tắt chính nó) được sử dụng ở những nơi khác. U là một từ viết tắt thường được hiểu cho tham số trong miền này vì vậy tôi nghĩ rằng chúng ta phải đi qua và làm cho điều này nhất quán. Tôi sẽ ổn với bất kỳ u, param hoặc tham số nào. Chúng tôi sử dụng chúng nhiều đến mức không có khả năng có bất kỳ sự nhầm lẫn nào, miễn là chúng tôi chỉ sử dụng một . Nhưng tôi thích bạn hơn
Điều đó còn tệ hơn thế - chúng tôi thực sự có một vài loại tham số. Và chúng tôi có nhiều hơn một tên cho một số trong số họ - uggh.
Lý do này không nhất quán là sách giáo khoa. Hóa ra chúng tôi phải ánh xạ giữa sáu không gian tham số - lý do rất phức tạp, nhưng về cơ bản chúng tôi phải có các tham số tương ứng với không gian tham số, không gian tham số chuẩn hóa, không gian chiều dài cung, không gian chiều dài cung, chuẩn hóa và không gian chuẩn không gian piecewise. Ban đầu, chúng tôi đã không nhận ra rằng chúng tôi sẽ phải lập bản đồ qua lại giữa tất cả các không gian này. Và chúng tôi đã không nhất quán trong cách chúng tôi đặt tên các tham số mô tả các điểm trong các không gian đó.
Điều này đôi khi xảy ra - ứng dụng của bạn lớn lên và bạn làm một số điều không nhất quán trong khi phát triển nó. Điều quan trọng là bạn nhận ra rằng bạn đã trở nên lộn xộn và đi vào và sửa chữa nó trước khi sự lộn xộn lây nhiễm mọi thứ khác và bạn cuộn lên với một đống gạch vụn.
double createBox(string tb, int cir, double pmj)
, chỉ là một ý nghĩ để thêm
Các vry rsn không bbrvt st mk sr th cd srdbl nd mntnbl eg
tài khoản intBalanceInSavings
-> có thể được viết tắt là
int accBalInSaving
Lưu ý rằng hai trong số bốn từ là shortend (tài khoản-> acc và Số dư-> Bal), nhưng hai từ còn lại thì không. Quy tắc nào được áp dụng ở đây - 2 từ đầu tiên, đó không phải là "từ trên 6 chữ cái", bởi vì 2 chữ cái 7 và một chữ cái không.
Vì vậy, có thể / nên là 'accBalInSav', yuk yuk yuk .......
Sự hết mình của tôi khi các lập trình viên già đi và khôn ngoan hơn, họ viết tắt ngày càng ít đi. Ở tuổi của tôi, có lẽ chúng tôi đang cố gắng bù đắp tội lỗi của tuổi trẻ mặc dù .....
Hãy ghi nhớ mã được viết một lần (ok, nhiều lần nữa sau đó một lần) và đọc hàng ngàn lần.
accBalInSaving
, thì có gì đó không ổn về thiết kế - biến đó mang quá nhiều thông tin ngữ cảnh thực sự nên ẩn; nếu đó là một thuộc tính của Account
lớp, chẳng hạn, sẽ không cần đặt "tài khoản" vào tên của nó. Và khi đó, viết tắt chỉ là một loại thuốc giảm đau giúp quét vấn đề này dưới tấm thảm.
Có một câu hỏi tương tự về các tên char đơn, Sử dụng các ký tự đơn cho các tên biến trong các vòng lặp / ngoại lệ .
Câu trả lời của tôi sau đó là giữ cho chúng ngắn ở nơi phạm vi nhỏ. Ví dụ, một tham số của hàm ngắn sẽ dễ đọc hơn nếu nó ngắn và chiếm ít không gian hơn. Một biến rộng của lớp nên rất mô tả.
Cuốn sách kinh điển Code Complete của Steve McConnell là tuyệt vời cho những thứ như thế này.
Tôi không tin có bất kỳ quy tắc chính thức hoặc phổ biến nào cho chữ viết tắt. Thông thường một hệ thống viết tắt được phát triển bởi mỗi cá nhân và trong từng dự án riêng lẻ. Có thể có một số quy tắc nhất định cho chính sách kiểu mã nguồn của công ty nhưng điều đó cũng sẽ thay đổi trên cơ sở công ty.
Trên một lưu ý phụ, tại sao viết tắt cả? Điều đó sẽ dẫn đến chỉ có bạn hiểu ý nghĩa của chữ viết tắt. Sử dụng tên đầy đủ và mô tả cho các biến. Điều đó sẽ dẫn đến mã tự ghi.
Nếu nghi ngờ, hãy đánh vần nó ra.
Điểm của một tên biến là để ý nghĩa của mã rõ ràng hơn. Trừ khi viết tắt là rất rõ ràng, sau đó bạn cũng có thể chỉ sử dụng từ nhỏ nhất có thể. Tên biến và tên hàm thường là các bit duy nhất của ngôn ngữ con người trong mã và do đó đóng vai trò là 'cột mốc' cho mắt người để tìm các phần mã có liên quan (hoặc, trong một cơ sở mã lớn, các công cụ như grep
hoặc ack
) và cũng là đầu mối để hiểu
Khi người tiếp theo đến đọc mã của bạn, họ sẽ cảm ơn bạn vì điều đó. Người đó cũng có thể là bạn trong một năm. Tôi có rất nhiều mã tôi hối tiếc viết tắt, vì vậy ngày nay tôi cố gắng tránh nó.
Bạn có thể viết tắt khi ...
... Khi dạng viết tắt được sử dụng trong tiếng Anh nói hoặc viết bởi không chỉ những người làm việc trong dự án của bạn (nhiều từ điển đưa ra loại thông tin này bên cạnh thuật ngữ họ định nghĩa).
var extensible_markup_language_element; // don't do this
var xml_element; // better
var element; // possible if the name of the function or the documentation make it clear you're dealing with XML and not the periodic table
docs.toString(); // most people capable of reading code know docs == documentation
... Khi chữ viết tắt đề cập rõ ràng đến một khái niệm duy nhất và sẽ được nhận ra ngay lập tức bởi một người không quen thuộc với cơ sở mã. Thậm chí sau đó một bình luận hoặc một phần của tài liệu giúp.
var auth = user.auth;
if (auth) // If the user is authenticated?
// If the user is authorised to do something?
// If the authentication function exists for that user group?
// If some setting called auth is turned on for that user?
// If the user is the author of the document in question?
// If the user has some authority?
var attrNames = retrieveAttrs();
if (attrNames) // hm, attrNames sounds like an array of strings - which will be boolean true even if empty - this if looks like a bug!
const MDF // author is writing an iOS app for ordering hand-carved artisanal fibreboard so anyone familiar with the problem domain knows this has plainly nothing to do with Microsoft Database Files. Though maybe the first time it comes up in the code the author should perhaps still put its full name
... Khi tên biến chỉ tồn tại trong một phạm vi hoặc hàm nhỏ và bạn không mong muốn người dùng rút ra ý nghĩa từ tên đó, hãy sử dụng một ký tự. Trong những trường hợp như vậy, i
và j
là phổ biến.
foreach $i (1..10) { say $announcement->[$i] }
... Khi viết một giao diện (nghĩa là không phải là tên biến, vì vậy ngoài phạm vi câu hỏi, chỉ được đề cập vì tên biến và giao diện đặt chúng thường sử dụng cùng một từ vựng), ví dụ trong trường hợp các quy tắc khác có thể áp dụng:
some_command --transaction-message "Done" # a bit wordy - keep, but ALSO allow for convenience:
some_command --msg "Done" # might be useful
some_command -m "Done" # if you can spare -m
... Khi codebase của bạn cần tham chiếu cùng một khái niệm nhiều lần trong cùng một dự án và khi viết tắt có thể được định nghĩa trong một hướng dẫn kiểu cho dự án đó và khi nó không rõ ràng. Nếu dự án của bạn không đủ lớn cho một hướng dẫn về phong cách thì nó không đủ lớn để nó xứng đáng.
Tôi sẽ không cung cấp một ví dụ mã cho cái này bởi vì theo định nghĩa, nó chỉ hoạt động trong một dự án lớn, nhưng cũng xem mục tiếp theo:
... Khi làm việc trên một dự án đã thành lập có nhiều người đóng góp và hướng dẫn về phong cách bắt buộc phải viết tắt. Trong trường hợp đó, chỉ viết tắt theo hướng dẫn kiểu, nhưng xem xét các vấn đề và sẵn sàng chú thích bằng các bình luận (như "đây là danh sách các tên thuộc tính dưới dạng chuỗi").
Các loại nên kết thúc bằng Tiếng _tv; Định nghĩa cấu trúc thô trong Tiếng _ cấu trúc
- https://metacpan.org/source/SHLOMIF/XML-LibXML-2.0117/HACKING.txt
Một suy nghĩ cuối cùng: nếu bạn vẫn có các tên biến dài không được chấp nhận (ví dụ: gồm bốn hoặc nhiều đơn vị ngữ nghĩa như TotalAfterTaxInLocalCurrency), thì đó có thể là một triệu chứng mà mã của bạn đang cố gắng thực hiện quá nhiều trong một phạm vi duy nhất và các hàm của nó cần được cấu trúc lại ra hoặc các biến của bạn có thể được quản lý logic hơn trong một đối tượng.
Lý do chúng tôi viết tắt các biến là để dừng nhập các biến lớn, nhưng đồng thời, biến viết tắt phải đủ rõ ràng để bạn có thể hiểu những gì nó giữ thay vì quay lại nơi nó được khai báo hoặc khởi tạo trước. Ví dụ:
tài khoản intBalanceInSavings
-> có thể được viết tắt là
int accBalInSaving
---> nhưng viết tắt nó thành
int accBal
Chắc chắn sẽ không phải là một lựa chọn tốt vì người ta sẽ không thể hiểu những gì biến giữ chỉ bằng cách nhìn vào nó.
accBalInSaving
vớiaccumulated Bal In Savings
Bạn không nên viết tắt các thứ vì mục đích viết tắt, bạn nên làm nó để thuận tiện cho bạn / người khác, nhưng nếu bạn muốn thì một quy tắc chung mà tôi có để viết tắt là nếu một từ dài hơn bốn hoặc năm chữ cái Tôi sẽ rút ngắn nó thành ba chữ cái đầu tiên của từ đó, vd:
int damagePerSecond;
có thể được viết tắt là
int dmgPerSec;
hoặc nếu bạn muốn nó càng ngắn càng tốt,
int dps;