Cách viết tắt tên biến [đã đóng]


8

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?


1
Đây có phải là bản sao của stackoverflow.com/questions/4358840/ không?

11
Lấy gợi ý. Nếu nó khó khăn, sau đó ngừng làm điều đó.
S.Lott

3
Làm việc với các mã định danh viết tắt trong mã bạn không viết gây tổn thương não.
Rick Sladkey

2
tuân theo các quy tắc cứng nhắc là nguyên nhân hoặc là dấu hiệu của tổn thương não. Dù bằng cách nào, điều quan trọng là sự phán xét.
T Duncan Smith

1
@T Duncan Smith: Nó đến từ đâu? Bạn chỉ thân mật rằng những người đồng ý với câu trả lời được chấp nhận cho câu hỏi này có tổn thương não. Tôi chỉ nói đùa rằng tôi cảm thấy khó đọc mã mật mã.
Rick Sladkey

Câu trả lời:


66

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 đủ ( iví 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ọ.


5
Không chắc chắn tôi hoàn toàn đồng ý. Tôi không viết tắt nhiều, nhưng tôi nghĩ rằng viết tắt trong một số trường hợp là một ý tưởng tốt. Tôi thực sự sẽ tìm thấy tên biến dài trong một phạm vi địa phương ngắn rất khó chịu. Tôi viết rất nhiều hàm trong đó "p" chỉ một điểm trong 3 không gian. Tôi nghĩ rằng điều đó rõ ràng như "thePoint" và dễ đọc hơn, nếu chức năng này có nghĩa là hoạt động trên một điểm trong một số thời trang.
T Duncan Smith

4
Như tôi đã nói, tôi thích tên đầy đủ "trừ khi chữ viết tắt dễ đọc hơn". Có vẻ như chúng tôi thực sự đồng ý.
Rein Henrichs

@Duncan, có thể điều đó rõ ràng với bạn, nhưng không phải ai cũng sẽ thấy ngay mối tương quan giữa chữ viết tắt và ý nghĩa thực sự của bạn. Tôi nghĩ rằng tất cả các biến nên được mô tả đầy đủ, trừ khi bạn có thể làm cho chúng dễ hiểu ngay lập tức đối với tất cả người dùng khác. Như Rein đã nói sử dụng 'i' trong một vòng lặp là một trong những kịch bản như vậy mà tôi tin rằng nó có thể chấp nhận được.
Darren Young

1
Tôi gần như đồng ý. Tôi sẽ nói, đừng viết tắt, trừ khi chữ viết tắt quá phổ biến, không có nghi ngờ gì về những gì được viết tắt. Một ví dụ điển hình là System.IO. Chung cũng có thể là phổ biến chỉ trong công ty mà bạn làm việc. Điều đó tất nhiên có nghĩa là nhân viên mới sẽ không biết chính xác ý nghĩa của nó. Nhưng là một phần của công ty có nghĩa là sớm muộn họ cũng sẽ học được biệt ngữ của công ty.
Pete

3
@Duncan Tôi rất vui khi thoát khỏi mọi thứ không thực sự truyền đạt thông tin để đổi lại việc không viết tắt phần còn lại. "thePoint" là một sự ghét bỏ thú cưng của tôi ở chỗ "the" đóng góp chính xác không có gì - nhưng nó vẫn có thể trở nên tồi tệ hơn bằng cách viết tắt là "thePt" thay vì "point" hoặc "p".
Julia Hayward

13

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.


Thật thú vị, giả sử bạn sử dụng phòng thu trực quan, tôi sẽ không viết tắt các tham số vì chúng sẽ xuất hiện ngay khi bạn gõ "myfunc (" và bạn không muốn nói double createBox(string tb, int cir, double pmj), chỉ là một ý nghĩ để thêm
Mark Lalor

Tôi chủ yếu sử dụng emacs. Tôi cho rằng tôi là một con khủng long, nhưng tôi cũng phải làm việc với một vài ngôn ngữ (cùng một lúc, trong cùng một mã) trên một số nền tảng. Đôi khi tôi viết tắt các tham số nếu chữ viết tắt rõ ràng (và nhất quán) vì tôi thử các hàm đủ ngắn để tôi có thể nhìn thấy tất cả chúng trên một trang, nhưng tôi thường không làm thế, vì dù sao tôi cũng cố hết sức để giữ chữ ký hàm ngắn . Điều quan trọng nhất là tính nhất quán mặc dù- nếu tham số "giống nhau" (về mặt khái niệm) được viết tắt ở một nơi thì nó sẽ luôn như vậy.
T Duncan Smith

1
Dù sao, điểm chính ở đây, IMHO, thậm chí không cho phép bạn tự động gõ đúng thứ mà không cần tra cứu (mặc dù đó là phần thưởng.) Điểm chính là giảm gánh nặng nhận thức khi đọc mã sau này. Đó là một sáo ngữ, nhưng bạn có xu hướng đọc ngay cả mã của bạn nhiều lần hơn bạn viết nó. Nếu những ý tưởng thiết yếu về cơ bản là khó, bạn muốn loại bỏ càng nhiều gánh nặng nhận thức không cần thiết càng tốt. Kiên định giúp ở đây. Đó là một lý tưởng không thể, nhưng mã lý tưởng chỉ nên chứa khó khăn không thể khắc phục.
T Duncan Smith

7

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.


3
Nếu tôi thấy nó ngoài ngữ cảnh, tôi sẽ không biết accBalInSaving có nghĩa là gì. Nó cũng tương tự như tiết kiệmBalance
Richard Tingle

Nếu một người thấy mình phải sử dụng một biến như thế 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 Accountlớ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.
Konrad Morawski

3

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.


2

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.


2

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ư grephoặ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, ijlà 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.


0

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ó.


2
Tôi đã nhầm lẫn accBalInSavingvớiaccumulated Bal In Savings
KajMagnus

-4

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;

1
Điều này không có gì cho câu trả lời đã được đưa ra
Jan Doggen
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.