Có một cái cớ cho tên biến ngắn?


140

Điều này đã trở thành một sự thất vọng lớn với cơ sở mã mà tôi hiện đang làm việc; nhiều tên biến của chúng tôi là ngắn và không mô tả. Tôi là nhà phát triển duy nhất còn lại trong dự án và không có tài liệu nào về hầu hết những gì họ làm, vì vậy tôi phải dành thêm thời gian để theo dõi những gì họ đại diện.

Ví dụ, tôi đã đọc qua một số mã cập nhật định nghĩa của bề mặt quang học. Các biến được đặt khi bắt đầu như sau:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Có lẽ đó chỉ là tôi, nhưng về cơ bản nó không cho tôi biết gì về những gì họ thể hiện, điều này khiến cho việc hiểu mã trở nên khó khăn hơn. Tất cả những gì tôi biết là đó là một biến được phân tách ra một hàng cụ thể từ một bảng cụ thể, ở đâu đó. Sau khi tìm kiếm, tôi phát hiện ra ý nghĩa của chúng:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Tôi đổi tên chúng thành những gì tôi có trên đó. Nó kéo dài một số dòng, nhưng tôi cảm thấy như đó là một sự đánh đổi công bằng. Tuy nhiên, loại lược đồ đặt tên này được sử dụng trong suốt rất nhiều mã. Tôi không chắc liệu đó có phải là vật phẩm từ các nhà phát triển đã học bằng cách làm việc với các hệ thống cũ hơn hay không, nếu có lý do sâu xa hơn đằng sau nó. Có một lý do chính đáng để đặt tên biến theo cách này hay tôi có lý khi cập nhật chúng thành tên mô tả hơn khi tôi bắt gặp chúng?


98
Tôi thấy rằng trong trường hợp cụ thể đó, đó là những tên biến được sao chép trực tiếp từ một công thức toán học tay.
Dave Nay


35
Nếu bạn thấy mình không thể hiểu mã toán học vì tên biến ngắn, hãy lưu ý rằng đó có thể là do bạn không hiểu toán học, không phải vì tên quá ngắn. Thay đổi các biểu thức toán học mà bạn không hiểu không phải là một quá trình có độ tin cậy cao. Một khi bạn hiểu toán, độ dài của các tên biến là không liên quan. Làm cho người khác một ưu tiên và để lại một trích dẫn (trong một bình luận) cho một số mô tả có liên quan của toán học, mặc dù, nếu bạn phải học nó!
Rex Kerr

3
Bất kỳ định danh nào được đặt tên theo Donkey Kong đều được phê duyệt : dK = conic constant.
Thomas Eding

8
Ngược lại, người ta có thể hỏi liệu sự thiếu hiểu biết của trường miền có biện minh cho việc bỏ qua các quy ước của nó hay không. Cuối cùng, nó phụ thuộc vào bối cảnh.
Daniel C. Sobral

Câu trả lời:


234

Dường như các tên biến này dựa trên các chữ viết tắt mà bạn mong muốn tìm thấy trong sách giáo khoa vật lý làm việc với nhiều vấn đề quang học khác nhau. Đây là một trong những tình huống mà tên biến ngắn thường thích hợp hơn tên biến dài hơn. Nếu bạn có các nhà vật lý (hoặc những người đã quen với việc sử dụng các phương trình bằng tay) đã quen với việc sử dụng các chữ viết tắt phổ biến như Rin, Rout, v.v. thì mã sẽ rõ ràng hơn với các chữ viết tắt đó so với các tên biến dài hơn. Nó cũng làm cho việc so sánh các công thức từ giấy tờ và sách giáo khoa với mã dễ dàng hơn nhiều để đảm bảo rằng mã thực sự đang thực hiện các phép tính đúng.

Bất cứ ai quen thuộc với quang học sẽ ngay lập tức nhận ra thứ gì đó như Rin là bán kính bên trong (trong một bài báo vật lý, insẽ được hiển thị dưới dạng chỉ mục), Rout là bán kính bên ngoài, v.v. Mặc dù họ gần như chắc chắn có thể dịch một cái gì đó về mặt tinh thần giống như innerRadiusdanh pháp quen thuộc hơn, làm như vậy sẽ làm cho mã ít rõ ràng hơn với người đó. Sẽ khó khăn hơn khi phát hiện ra các trường hợp trong đó một công thức quen thuộc đã được mã hóa không chính xác và sẽ khiến việc dịch các phương trình trong mã sang và từ các phương trình mà họ tìm thấy trong một bài báo hoặc sách giáo khoa trở nên khó khăn hơn.

Nếu bạn là người duy nhất từng xem mã này, bạn sẽ không bao giờ cần phải dịch giữa mã và phương trình quang học tiêu chuẩn, và không chắc là nhà vật lý sẽ không cần phải xem mã trong tương lai. có ý nghĩa để tái cấu trúc bởi vì lợi ích của các chữ viết tắt không còn vượt quá chi phí. Tuy nhiên, nếu đây là sự phát triển mới, gần như chắc chắn sẽ có ý nghĩa khi sử dụng cùng các chữ viết tắt trong mã mà bạn sẽ tìm thấy trong tài liệu.


17
Và nếu không có nhà vật lý hay nhà toán học trong đội ngũ nhân viên? Các mã về cơ bản là để lại cho tôi. Đó là phần lớn không có giấy tờ. Nó sẽ khó khăn hơn để đọc các tên mô tả?
KChaloux

127
+1 Không phải là không có lý khi hy vọng một lập trình viên hiểu được miền mà anh ta đang làm việc. Mặt khác, trong các công việc toán học, các biến thường được xác định ở một nơi thuận tiện. Trong mã như thế này, tôi sẽ mong đợi một bình luận nổi bật cho thấy hình thức dài.
Karl Bielefeldt

15
+1: Về cơ bản, bạn đang nói rằng một lập trình viên hiểu được miền mà họ đang làm việc sẽ hiểu các tên biến. Điều này sẽ giống nhau trong nhiều dự án ngay cả với tên biến dài hơn. ví dụ. một biến có tên columntrong một trò chơi chiến lược quân sự rất có thể có nghĩa là một cái gì đó khác với nó trong phần mềm biểu đồ.
Steven Evers

23
Trong lập trình y tế, bạn thường sẽ tìm thấy các thuật ngữ tồn tại trong lĩnh vực lập trình. Ví dụ với nhãn khoa, bạn sẽ thấy OU, OD và OS. Chúng biểu thị mắt nào, ví dụ ouSphere có thể tham chiếu thành phần 'hình cầu' của đơn thuốc kính mắt cho mắt phải. Bạn sẽ trở thành một lập trình viên tốt hơn nếu bạn hiểu được lĩnh vực kinh doanh mà bạn đang lập trình.
Hóa đơn

11
+1 để lưu ý rằng các tên ngắn khớp với các tên trong phương trình & công thức từ giấy tờ và văn bản. Khi tôi làm điều đó, tôi bao gồm các ý kiến ​​về nơi để tìm tài liệu tham khảo ban đầu.
Jay Elston

89

Các biến có tuổi thọ ngắn nên được đặt tên ngắn gọn. Ví dụ, bạn không viết for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... Thay vào đó, bạn sử dụng for(int i ....

Trong quy tắc chung, có thể nói rằng phạm vi biến càng ngắn thì tên càng ngắn. Quầy loop thường chỉ thư duy nhất, nói i, jk. Các biến cục bộ là một cái gì đó như basehoặc fromto. Các biến toàn cầu sau đó có phần phức tạp hơn, ví dụ EntityTablePointer.

Có lẽ một quy tắc như thế này sẽ không được tuân theo với cơ sở mã mà bạn làm việc cùng. Đó là một lý do tốt để thực hiện một số tái cấu trúc mặc dù!


14
i, j và k cho các chỉ số mảng đại diện cho một truyền thống quay trở lại ít nhất là với Fortran. Bất kỳ lập trình viên tự tôn trọng sẽ quen thuộc với quy ước này.
Đaminh Cronin

7
Tôi thường không viết i, j, k, tôi viết một cái gì đó giống như personPosbởi vì sau đó tôi sẽ không quên những gì tôi đang lặp lại trên và những gì chỉ số đại diện.
Malcolm

18
-1, Tôi sử dụng tên dài cho các lần lặp chỉ mục mảng, nhưng tôi đặt cho chúng tên có ý nghĩa thay vì rõ ràng và vô nghĩa arrayCounter . Làm cho mã dễ đọc hơn và ít nhất giúp bạn không phải dậm chân trên tất cả các bộ đếm bên ngoài khi bạn sao chép / dán một vòng lặp khác bên trong cái này.
Oleg V. Volkov

3
counter là danh từ hoặc tính từ. Count là một danh từ hoặc một động từ. Tất nhiên, tôi vẫn sẽ không gọi một cái gì đó arrayCounter, tôi muốn sử dụng personIndexhoặc rowhoặc bất cứ mô tả những gì tôi đang nhìn vào.
Wayne Werner

6
Khi tôi đang thực hiện một vòng lặp duy nhất, tôi sử dụng i. Nhưng ngay khi tôi chuyển sang một vòng lặp lồng nhau, tôi bỏ idanh pháp. Lý do cho điều này là vì tôi thực sự muốn theo dõi biến vòng lặp nào đang được làm việc với, và ivs jcó thể khá lừa dối trong mã dày đặc. Làm cho nó dễ đọc hơn và thêm nhiều khoảng trắng, vốn dĩ là cần thiết đối với tôi.
jcolebrand

48

Vấn đề với mã không phải là tên ngắn, mà là thiếu một bình luận sẽ giải thích các chữ viết tắt, hoặc chỉ ra một số tài liệu hữu ích về các công thức mà các biến được dẫn xuất.

Mã chỉ đơn giản là giả định sự quen thuộc miền vấn đề.

Điều đó là tốt, vì sự quen thuộc trong miền có vấn đề có thể được yêu cầu để hiểu và duy trì mã, đặc biệt là trong vai trò của một người "sở hữu" nó, do đó, nó sẽ khiến bạn có được sự quen thuộc hơn là đi vòng quanh các tên.

Nhưng sẽ thật tuyệt nếu mã cung cấp một số gợi ý để phục vụ như bàn đạp. Ngay cả một chuyên gia tên miền cũng có thể quên rằng đó dKlà một hằng số hình nón. Thêm một chút "cheat sheet" trong một khối bình luận sẽ không gây hại.


Cuối cùng kết thúc với một cái gì đó như thế này.
KChaloux

5
Cái này sai. Không có lý do gì để làm cho mã của bạn khó đọc để buộc mọi người dành nhiều thời gian hơn để "học" nó. Bạn không dạy, bạn chỉ làm mọi người chậm lại. Ngoài ra, hầu như không bao giờ có một chủ sở hữu mã mãi mãi. Bạn đang bị cận thị và ích kỷ.
xaxxon

7
Đó là giải thích của bạn là sai, không phải là câu trả lời. Mã thực hiện một số phép toán tồn tại bên ngoài mã đó và độc lập với mã đó, và nó xuất hiện trước mã. Giữ tên giống nhau là hữu ích. Ai đó duy trì mã có thể sẽ phải nghiên cứu rằng toán học bên ngoài và không phải lập bản đồ giữa hai sơ đồ đặt tên sẽ giúp người đó.
Kaz

19

Đối với một số biến nhất định nổi tiếng trong miền vấn đề - như trường hợp bạn có ở đây - tên biến terse là hợp lý. Nếu tôi đang làm việc trên một trò chơi, tôi muốn các thực thể trò chơi của mình có các biến vị trí xy, không horizontalPositionverticalPosition. Tương tự như vậy quầy vòng lặp mà không có bất kỳ ngữ nghĩa ngoài lập chỉ mục, tôi mong đợi để xem i, j, k.


Tôi tranh luận rằng cv, din và dout không rõ ràng ngay lập tức (mặc dù rõ ràng chúng được thiết lập trong các lĩnh vực cụ thể). Tôi sẽ không tranh luận về x và y, xem như tọa độ của Cartesian có thể áp dụng cho bất kỳ số lượng trường nào, và được dạy cho mọi người ở trường trung học cơ sở và trung học.
KChaloux

1
xy, trong khi thông thường, không mang theo khía cạnh quan trọng tiềm ẩn như nơi xuất xứ trong.
Ross Patterson

3
@RossPatterson: tuy nhiên, có nhiều bối cảnh đơn giản là điều đó không quan trọng. Ví dụ, hãy xem xét một vòng lặp, chẳng hạn như for (x,y) in list_of_coordinates: print x,y: Nguồn gốc không đặc biệt quan trọng khi cố gắng hiểu mã.
Bryan Oakley

16

Theo "Mã sạch":

Tên biến nên:

  • Hãy tiết lộ ý định
  • Tránh thông tin sai lệch
  • Tạo sự khác biệt có ý nghĩa
  • Có thể phát âm được
  • Có thể tìm kiếm

Ngoại lệ là câu tục ngữ i,j,k,m,nđược sử dụng trong các vòng lặp.

Các biến tên bạn, đúng, phàn nàn về việc không làm gì ở trên. Những cái tên đó là tên xấu.

Ngoài ra, vì mọi phương thức đều phải ngắn , sử dụng tiền tố để chỉ ra phạm vi hoặc loại không còn được sử dụng.

Tên này tốt hơn:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Một bình luận nói rằng điều này sẽ quá phức tạp với các tên biến dài:

nhập mô tả hình ảnh ở đây

Tên biến ngắn không làm cho nó đơn giản:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

Câu trả lời là tên dài và kết quả trung gian cho đến khi bạn nhận được điều này ở cuối:

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;

26
Các biến này có thể được sử dụng trong các công thức toán học trong mã. Các công thức toán học dễ đọc hơn nhiều với các tên biến ngắn. Tôi sử dụng tên biến dài trong hầu hết mã của mình, nhưng toán học tốt hơn với tên biến ngắn. Ví dụ ngẫu nhiên: xem xét điều này sẽ kéo dài bao lâu với các tên biến dài.
MarkJ

@MarkJ Bạn nói đúng.
Tulains Córdova

1
Kết quả trung gian có thêm lợi ích của việc giảm và cô lập các lỗi lập trình. Bộ não của chúng ta chỉ có thể xử lý rất nhiều thông tin cùng một lúc và thật khó để phát hiện ra lỗi trong một cái gì đó nhưfnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
mí mắt 2/213

1
Sẽ không khó lắm nếu đó là bánh mì và bơ của bạn.
Radu

1
Vấn đề không phải là viết một lót. Nhưng vấn đề là nếu bạn cần thay đổi một cái gì đó và sử dụng công thức khác bây giờ bạn có một vấn đề mà phải mất một thời gian dài để tìm ra long_namenhững Rtrong sách giáo khoa đề cập đến. Sử dụng các kết quả trung gian, nhưng giữ cho toán học phức tạp của bạn càng gần với miền vấn đề để bạn thực sự có thể duy trì nó nếu bạn cần thêm một tính năng.
slebetman

8

Có hai lý do chính đáng để không đổi tên các biến trong mã kế thừa.

(1) trừ khi bạn đang sử dụng một công cụ tái cấu trúc tự động, khả năng giới thiệu các lỗi là rất cao. Do đó, "nếu nó không bị hỏng, đừng sửa nó"

(2) bạn sẽ thực hiện so sánh các phiên bản hiện tại với các phiên bản trước đây, để xem những gì đã thay đổi, không thể. Điều này sẽ làm cho việc bảo trì mã trong tương lai khó khăn hơn.


7
Hoàn toàn chính xác, nhưng nguy cơ thiếu hiểu biết là lớn hơn nhiều.
Ross Patterson

2
Bạn có những vấn đề lớn hơn nếu các công cụ của bạn không thể xử lý các vấn đề đơn giản như những vấn đề bạn đã đề cập.
AndSoYouCode

Đáp án (1) Phạm vi kiểm tra tự động hợp lý và đóng gói lành mạnh, (2) Thành thạo kiểm soát phiên bản.
Adamantish

5

Có một lý do chính đáng để đặt tên biến theo cách này hay tôi có lý khi cập nhật chúng thành tên mô tả hơn khi tôi bắt gặp chúng?

Lý do để sử dụng tên nhỏ hơn là nếu lập trình viên ban đầu thấy chúng dễ làm việc hơn. Có lẽ họ có quyền thấy rằng đó là trường hợp, và quyền không có cùng sở thích cá nhân mà bạn có. Cá nhân, tôi sẽ tìm thấy ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... Nếu tôi đang sử dụng chúng trong các tính toán dài, phức tạp. Biểu thức toán học càng nhỏ, thường càng dễ nhìn thấy toàn bộ sự việc cùng một lúc. Mặc dù nếu đó là trường hợp, chúng có thể tốt hơn như dIn và dOut, vì vậy không có một chữ D lặp đi lặp lại có thể dẫn đến một lỗi đánh máy dễ dàng.

Mặt khác, nếu bạn cảm thấy khó khăn hơn khi làm việc, thì hãy loại bỏ bản thân và đổi tên sau đó thành dạng dài hơn của chúng. Đặc biệt là nếu bạn chịu trách nhiệm cho mã đó.


7
Ít nhất thì tôi chắc chắn sẽ thoát khỏi ký hiệu Hệ thống Hungary ...
KChaloux

4
Dẫn đầu dlà người Hungary? Tôi nghĩ đó là tính toán như trong dx^2/dx = 2x.
Shannon Severance

7
Nếu tôi tự nhìn thấy dDinnerAperture, tôi sẽ đọc nó là "Khẩu độ ăn tối", và tự hỏi liệu đó chỉ là một cách hài hước để nói "miệng của bạn". Chưa bao giờ là một fan hâm mộ của "chữ in hoa theo sau chữ thường) đôi khi rất khó hiểu.
Darrel Hoffman

2
+1 đây là câu trả lời. Các công thức toán học dài dễ đọc hơn nhiều với các tên biến ngắn. Các biến này có thể được sử dụng trong các công thức toán học trong mã. Các công thức toán học dễ đọc hơn nhiều với các tên biến ngắn. Tôi sử dụng tên biến dài trong hầu hết mã của mình, nhưng toán học tốt hơn với tên biến ngắn. Ví dụ ngẫu nhiên: xem xét điều này sẽ kéo dài bao lâu với các tên biến dài.
MarkJ

1
@ShannonSeverance Tôi đồng ý với bạn. Xuất phát từ một nền tảng kỹ thuật, d chắc chắn nên được dành riêng cho tính toán khi sử dụng tên biến theo nghĩa toán học (vì nó thường được đề cập ở đây).
CodeMonkey

4

Nói chung, tôi tin rằng quy tắc cho điều này, là bạn có thể sử dụng các tên biến cực ngắn trong đó bạn biết rằng những người "có kỹ năng trong nghệ thuật" của mã cụ thể của bạn sẽ hiểu ngay tham chiếu của tên biến đó. (Dù sao bạn luôn có ý kiến ​​cho trường hợp ngoại lệ trong trường hợp này) và rằng việc sử dụng các biến được bản địa hóa có thể dễ dàng được phân biệt dựa trên bối cảnh sử dụng chúng như thế nào.

Để mở rộng điều này, điều đó có nghĩa là bạn không nên tìm cách xáo trộn tên biến của mình, nhưng, bạn có thể sử dụng chữ viết tắt cho tên biến của mình, nơi bạn biết rằng chỉ những người hiểu khái niệm cơ bản về mã của bạn mới có khả năng để đọc nó

Để sử dụng một ví dụ trong thế giới thực, gần đây, tôi đã tạo một lớp Javascript có độ trễ và cho bạn biết lượng ánh sáng mặt trời mà bạn mong đợi vào một ngày nhất định.

Để tạo lớp Sundial này , tôi đã đề cập đến khoảng nửa tá tài nguyên, Almanac Astronomy và các đoạn từ các ngôn ngữ khác, (PHP, Java, C, v.v.).

Trong hầu hết tất cả, họ đã sử dụng các chữ viết tắt giống hệt nhau, mà trên mặt của nó có nghĩa là không có gì tuyệt đối.

K, T, EPS, deltaPsi, eot, LM,RA

Tuy nhiên, nếu bạn có kiến ​​thức về vật lý, bạn có thể hiểu chúng là gì. Tôi sẽ không mong đợi bất cứ ai khác chạm vào mã này, vậy tại sao lại sử dụng tên biến dài dòng?

julianTime, nutationOfEclipticalLongitudeExpressedInDegrees, equationOfTime, longitudeMean, rightAscension.

Ngoài ra, rất nhiều thời gian, khi các tên biến là tạm thời, nghĩa là chúng chỉ được sử dụng để phân bổ tạm thời một số giá trị, sau đó thường không có ý nghĩa khi sử dụng phiên bản dài dòng, đặc biệt là khi ngữ cảnh của biến giải thích mục đích của nó.


1

Hoàn toàn có; thường thì một tên biến ngắn là tất cả những gì cần thiết.

Trong trường hợp của tôi, tôi đang thực hiện điều hướng điểm trong lớp Robotics cao cấp của mình và chúng tôi lập trình robot của chúng tôi trong KISS-C. Chúng ta cần các biến cho tọa độ hiện tại và đích (x, y), khoảng cách (x, y), tiêu đề hiện tại và đích, cũng như các góc quay.

Đặc biệt trong trường hợp tọa độ x và y, một tên biến dài là hoàn toàn không cần thiết và các tên như xC (hiện tại x), yD (đích y) và pD (đích phi), đủ và dễ hiểu nhất trong trường hợp này.

Bạn có thể lập luận rằng đây không phải là 'tên biến mô tả' vì giao thức lập trình viên sẽ ra lệnh, nhưng vì các tên dựa trên một mã đơn giản (d = Destination, c = current), một nhận xét rất đơn giản ngay từ đầu chỉ là mô tả họ đòi hỏi.


0

Có một lý do chính đáng để đặt tên biến theo cách này hay tôi có lý khi cập nhật chúng thành tên mô tả hơn khi tôi bắt gặp chúng?

Thông thường, các thuật toán phức tạp được thực hiện trong MATLAB (hoặc ngôn ngữ tương tự). Những gì tôi đã thấy là mọi người chỉ đảm nhận tên biến. Bằng cách đó, thật đơn giản để so sánh việc thực hiện.

Tất cả các câu trả lời khác là gần như chính xác. Những chữ viết tắt này có thể được tìm thấy trong toán học và vật lý, ngoại trừ chúng không bắt đầu bằng d(như trong ví dụ của bạn). Các biến bắt đầu bằng d thường được đặt tên để thể hiện sự khác biệt .

Tất cả các hướng dẫn mã hóa thông thường đều yêu cầu không đặt tên biến bằng chữ cái đầu tiên đại diện cho loại (như trong trường hợp của bạn), vì nó rất dễ duyệt mã trong tất cả các IDE hiện đại.


Phải, yếu tố đó đã biến mất bất kể mọi người cuối cùng nói gì. Có một loại bệnh nửa người nửa Hungary không phải là tâm thần phân liệt đang diễn ra trong cơ sở mã mà tôi đang cập nhật khi tôi tìm thấy nó.
KChaloux

0

Tôi có thể nghĩ ra một lý do cho tên biến là ngắn hợp lý.

Tên ngắn dễ đọc bằng cách sử dụng khoảng thời gian mắt ngắn hơn, do đó khoảng chú ý ngắn.

Ví dụ, khi tôi đã quen với thực tế là svdb có nghĩa là "lưu vào cơ sở dữ liệu", tốc độ quét mã nguồn trở nên tốt hơn vì tôi chỉ phải quét nhanh 4 ký tự thay vì khi đọc SaveToDatabase (14 ký tự, mọi thứ trở nên tồi tệ hơn cho tên hoạt động phức tạp hơn). Tôi nói "quét" chứ không phải "đọc", vì điều đó chiếm phần lớn trong việc phân tích mã nguồn.

Khi quét qua số lượng lớn mã nguồn, điều này có thể mang lại hiệu suất tốt.

Ngoài ra, nó chỉ giúp lập trình viên lười biếng gõ những tên ngắn này khi viết mã.

Tất nhiên, tất cả các "tốc ký" này dự kiến ​​sẽ được liệt kê ở một số vị trí tiêu chuẩn trong mã nguồn.


1
Chúng tôi không đọc các từ dưới dạng một tập hợp các ký tự, chúng tôi đọc chúng dưới dạng hình và giải quyết các chi tiết một cách có điều kiện khi việc hiểu nhanh không thành công. Độ dài của một từ phải mất nhiều thời gian hơn để đọc lớn hơn 4 ký tự và chúng tôi có thể xử lý tinh thần camelCase và các phương tiện khác để phá vỡ các từ tên biến thành ranh giới từ. Tôi nghi ngờ một bài kiểm tra đọc sẽ đưa ra một tuyên bố rằng các tên ngắn hơn cải thiện tốc độ đọc hiểu; thay vào đó, bằng cách loại bỏ các từ dễ nhận biết, sẽ có sự giảm tốc độ cho đến khi các từ mới được đồng hóa (mà chính bạn chỉ ra).
mí mắt

0

Để định khung những gì @zxcdw nói theo một cách hơi khác, và giải thích nó theo cách tiếp cận:

Các chức năng phải thuần túy , ngắn gọn và đóng gói hoàn hảo một số chức năng: Logic hộp đen , bất kể nó đã được sử dụng trong 40 năm, nó sẽ tiếp tục thực hiện công việc mà nó được thiết kế, bởi vì giao diện của nó (trong và ngoài) là âm thanh, ngay cả khi bạn không biết gì về nội bộ của nó.

Đây là loại mã bạn muốn viết: đây là mã kéo dài và đơn giản để chuyển.

Khi cần thiết, hãy soạn các hàm ra khỏi các lệnh gọi hàm (nội tuyến) khác , để giữ mã chi tiết.

Bây giờ, với một tên hàm mô tả phù hợp (dài dòng nếu cần thiết!), Chúng tôi giảm thiểu bất kỳ cơ hội giải thích sai về các tên biến rút ngắn đó, vì phạm vi rất nhỏ.


-1

Tên biến phải được mô tả càng tốt để giúp dễ đọc chương trình. Bạn đã tự mình trải nghiệm: bạn gặp rất nhiều khó khăn trong việc xác định chương trình đã làm gì vì việc đặt tên kém.

Không có lý do chính đáng để không sử dụng tên mô tả. Nó sẽ giúp bạn, và những người khác làm việc / sẽ làm việc trong dự án. Thật ra có một cách sử dụng hợp lệ duy nhất cho các tên ngắn: bộ đếm vòng lặp.


6
Lưu ý rằng đó int dummy_variable_for_for_loops;là mô tả càng tốt.
Kaz

4
-1 vì câu trả lời này khó hiểu. Đầu tiên nó nói không có lý do chính đáng, sau đó kết thúc bằng cách nói rằng thực sự, có. Câu trả lời sẽ tốt hơn nếu nó bị bắt bẻ không mâu thuẫn với chính nó.
Bryan Oakley

Tôi sẽ thay đổi điều đó thành "mô tả khi cần thiết ". Nếu một tên ngắn truyền đạt mục đích của biến, thì bạn có thể sử dụng tên ngắn .
Maximus Minimus

-1

Chắc chắn đây là những gì // ý kiến ​​dành cho?

Nếu các bài tập có nhận xét mô tả, bạn sẽ có được cả hai thế giới tốt nhất: một mô tả về biến bất kỳ phương trình nào có thể dễ dàng so sánh với đối tác trong sách giáo khoa của chúng.


-1

Đối với các giao diện (ví dụ: chữ ký phương thức, chữ ký hàm) Tôi có xu hướng giải quyết điều này bằng cách chú thích các khai báo tham số. Đối với C / C ++, trang trí tệp .h cũng như mã thực hiện.

Tôi làm tương tự cho các khai báo biến trong đó việc biết cách sử dụng biến không rõ ràng trong ngữ cảnh và trong cách đặt tên. (Điều này áp dụng trong các ngôn ngữ không có kiểu gõ mạnh.)

Có nhiều thứ chúng tôi không muốn làm tắc tên biến. Là góc tính theo radian hoặc độ, có một số dung sai về độ chính xác hoặc phạm vi, v.v. Thông tin có thể cung cấp các xác nhận có giá trị về các đặc điểm phải được xử lý chính xác.

Tôi không tôn giáo về nó. Tôi chỉ đơn giản là quan tâm đến sự rõ ràng và chắc chắn rằng bây giờ tôi là lần sau khi bản thân hay quên của tôi ghé thăm mã. Và bất cứ ai nhìn qua vai tôi đều có những gì họ cần biết để biết nơi nào bị tắt, điều gì là thiết yếu (điều quan trọng cuối cùng để bảo trì đúng cách).


-1

Có một lý do cho các tên biến quá ngắn?

Thứ nhất: Đặt tên một biến cho năng lượng e trong khi tính toán các công thức như E = MC2 KHÔNG được đặt tên quá ngắn. Sử dụng các ký hiệu làm đối số cho tên ngắn là không hợp lệ

Câu hỏi này khá thú vị đối với tôi và tôi chỉ có thể nghĩ ra một lý do và đó là tiền.

Ví dụ, bạn đang kết nối javascript cho một khách hàng biết rằng tệp sẽ được tải xuống nhiều lần trong một giây. Nó sẽ rẻ hơn và làm cho trải nghiệm của người dùng tốt hơn nếu tệp (tính theo số byte) càng nhỏ càng tốt.

(Chỉ để giữ ví dụ 'thực tế', bạn không được phép sử dụng công cụ khai thác, tại sao? Vấn đề bảo mật, không có công cụ bên ngoài nào được phép chạm vào cơ sở mã.)


1
Ví dụ của bạn vẫn không thực tế lắm.
Radu

-1

Tôi nhận thấy rằng các câu trả lời khác không đề cập đến việc sử dụng Ký hiệu Hungary. Điều này là trực giao với cuộc tranh luận về chiều dài, nhưng có liên quan đến các kế hoạch đặt tên nói chung.

double dR, dCV, dK, dDin, dDout, dRin, dRout

"D" ở đầu tất cả các biến này có nghĩa là chỉ ra rằng chúng tăng gấp đôi; nhưng ngôn ngữ vẫn thi hành điều này Bất chấp sự căng thẳng của những cái tên này, chúng vẫn dư thừa tới 50% !

Nếu chúng ta sẽ sử dụng quy ước đặt tên để giảm lỗi, chúng ta nên loại bỏ thông tin mã hóa không được kiểm tra bởi ngôn ngữ. Ví dụ, không có ngôn ngữ nào sẽ phàn nàn dK + dRtrong đoạn mã trên, mặc dù việc thêm một số không thứ nguyên vào một chiều dài là vô nghĩa.

Một cách tốt để ngăn chặn các lỗi đó là sử dụng các loại mạnh hơn; tuy nhiên, nếu chúng ta sẽ sử dụng gấp đôi thì một sơ đồ đặt tên phù hợp hơn có thể là:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

Ngôn ngữ vẫn sẽ cho phép chúng tôi viết K + lR, nhưng bây giờ các tên cho chúng tôi một gợi ý rằng điều này có thể không chính xác.

Đây là điểm khác biệt giữa Hệ thống Hungary (nói chung là xấu) và Ứng dụng Hungary (có thể tốt)

http://en.wikipedia.org/wiki/Hungarian_notation


1
Trên thực tế, C ++ có thể phàn nàn K + lR nếu bạn khai báo đúng đơn vị của mình. Với các đơn vị SI, nó có thể thực hiện kiểm tra kích thước và chuyển đổi đơn vị. Việc thêm 3_feet + 2_metersẽ không có vấn đề gì, trong khi đó 2_meter+1_secondphải là lỗi thời gian biên dịch.
MSalters

@MSalters Điều đó thật tuyệt; một cách tiếp cận mẫu / macro đã không xảy ra với tôi. Tuy nhiên, trong câu hỏi "không biết ngôn ngữ" như thế này, tôi sẽ nhóm tất cả các đơn vị thời gian biên dịch kiểm tra theo ô "loại mạnh hơn", bất kể ngôn ngữ có gọi chúng là "loại" hay không;)
Warbo

Mẫu, nhất thiết phải. Bạn không thể thực hiện phép tính loại cần thiết trong macro.
MSalters

-2

Các chỉ trường hợp tên biến khó đọc ngắn được chấp nhận trong công nghệ phần mềm hiện đại là khi chúng tồn tại trong một kịch bản và thông lượng của kịch bản (qua mạng nói chung) là rất quan trọng. Thậm chí sau đó, tiếp tục kịch bản với tên dài trong kiểm soát nguồn, và rút gọn kịch bản trong sản xuất.


9
Còn khi thực hiện các phép toán trong đó các thuật ngữ được coi là kiến ​​thức phổ biến trong miền thì sao? Ví dụ: sử dụng M thay vì "khối lượng" trong e = mc ^ 2
Andy Hunt

2
@andyBursh - Tôi sẽ cẩn thận ở đó. Các lập trình viên thường không phải là chuyên gia (hoặc thậm chí có thẩm quyền) trong lĩnh vực vấn đề của họ. Điều đó nói rằng, loại điều này có thể ổn, đặc biệt là nếu có liên kết bình luận thích hợp với công thức được đề cập; Tôi đã quên mất kịch bản này.
Telastyn

8
@Telastyn - Tuy nhiên, nếu bạn cho rằng lập trình viên không phải là chuyên gia, điều đó thường dẫn đến việc viết tắt có nghĩa rất rõ ràng và biến chúng thành tên dài hơn ít nhất là mơ hồ (ví dụ: ai đó quyết định đặt tên biến cục bộ radiuskhi nó lưu trữ bán kính bên trong không hiểu đó là mơ hồ hơn nhiều so với Rin). Và sau đó, nhà phát triển không phải là chuyên gia phải dịch giữa danh pháp duy nhất của mình và danh pháp mà doanh nghiệp hiểu được mỗi khi có một cuộc thảo luận liên quan đến phương trình.
Hang Justin

2
Điều gì về "i" cho một bộ đếm vòng lặp? Hoặc "x" và "y" khi xử lý tọa độ? Hoặc một biến có phạm vi chỉ là hai dòng mã?
Bryan Oakley

4
Không đồng ý với câu trả lời này. Một lập trình viên làm việc trên một chương trình có chứa các biểu thức toán học phức tạp ít nhất có thể đọc các công thức trong thông số kỹ thuật, nếu không thì chúng không đủ năng lực. Đó không phải là vấn đề về kiến ​​thức miền, đó là một kỹ năng thiết yếu - một số năng lực toán học cơ bản trước khi thực hiện chương trình toán học. Nếu lập trình viên không có quyền truy cập vào các công thức cụ thể, thì đó là một vấn đề khác - và nó không thể được giải quyết chỉ bằng các bình luận.
MarkJ
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.