Một người khác, một người khác, và một người tên khác trong tên của phương thức và chức năng: Bạn lấy gì? [đóng cửa]


16

Tôi chắc rằng nhiều người trong chúng ta đã thấy các tên phương thức như thế này ở điểm này hay điểm khác:

  • UploadTheFileToTheServerPlease
  • CreateATemporaryFile
  • WriteTheRecordToTheDatabase
  • ResetTheSystemClock

Đó là, các tên phương thức cũng là các câu tiếng Anh đúng ngữ pháp và bao gồm các từ thêm hoàn toàn để làm cho chúng đọc như văn xuôi. Cá nhân, tôi không phải là một fan hâm mộ lớn của các tên phương thức "nghĩa đen" như vậy, và thích được nói ngắn gọn, trong khi vẫn rõ ràng nhất có thể. Đối với tôi, các từ như "a", "an" và "the" chỉ trông có vẻ lúng túng trong các tên phương thức và nó làm cho các tên phương thức dài không cần thiết mà không thực sự thêm bất cứ điều gì hữu ích. Tôi thích các tên phương thức sau cho các ví dụ trước:

  • UploadFileToServer
  • CreateTemporaryFile
  • WriteOutRecord
  • ResetSystemClock

Theo kinh nghiệm của tôi, điều này phổ biến hơn nhiều so với cách tiếp cận khác là viết ra những cái tên dài hơn, nhưng tôi đã thấy cả hai phong cách và tò mò muốn xem suy nghĩ của người khác về hai cách tiếp cận này.

Vì vậy, bạn đang ở trong trại "tên phương pháp đọc như văn xuôi" hay "tên phương thức nói ý tôi nhưng đọc to như trại dịch thuật tiếng nước ngoài sang tiếng Anh"?


7
Tôi chưa bao giờ thấy các phương thức với tên như WriteTheRecordToTheDatabase. Nếu ai đó kiểm tra điều này, họ sẽ có một cuộc nói chuyện nghiêm túc.
Tim Robinson

13
" Please"? Wow
cấu hình

3
Tôi chỉ muốn thêm rằng wordpress có các hàm trợ giúp mẫu như "the_contents ()," "get_the_post ()," v.v ... Nó làm tôi khó chịu.
Carson Myers

1
@Carson Myers Hah, đó là một ví dụ thực tế hoàn hảo về điều này. Tôi đã phải kìm nén những ký ức về lần cuối cùng tôi xem mã WordPress :-)
Mike Spross

Câu trả lời:


21

Tôi sẽ đồng ý rằng các phương pháp văn xuôi hút với một ngoại lệ:

Các trường hợp kiểm tra đơn vị

Chúng thường không bao giờ được gọi trong mã của bạn và hiển thị trong các báo cáo thử nghiệm. Như vậy, thật hữu ích khi có các bài đọc với một chút văn xuôi:

  • ThêmACustomerOrderFailWhenCustomersIdIsInvalid: Không thành công
  • OutOfBoundpriceReturnsAnError: Đã qua
  • CanDeleteAnEventFromAS Lý do: Đã qua

Ngay cả điều này nên được thực hiện một cách tiết kiệm, nhưng tôi có thể thấy nó là ít nhất một trường hợp trong đó việc bổ sung ngữ pháp có thể làm cho nó dễ dàng hơn một chút để diễn đạt những gì đã qua và những gì thất bại. Tất nhiên, điều này là trừ khi ngôn ngữ / khung của bạn cung cấp một cơ chế tốt cho các mô tả thử nghiệm trong phần đọc thử ngoài tên phương thức, trong trường hợp này cũng bỏ qua cái này.


1
+1 cho một ví dụ tốt về nơi tên phương thức văn xuôi thực sự có thể có lợi. Thật buồn cười, vì bây giờ bạn đề cập đến nó, tôi đã thực hiện điều này một cách cụ thể khi viết tên bài kiểm tra đơn vị, và đặc biệt để tôi biết bài kiểm tra đã làm cái quái gì khi tôi chạy chúng sau này.
Mike Spross

Điều đó hữu ích và phù hợp với MethodUnderTest_Condition_ExpectedBehaviour quy ước đặt tên thử nghiệm đơn vị được đề xuất của Roy Osherove . ví dụ AddOrder_WithInvalidCustomerId_Fails, CreateItem_WithOutOfBoundsPrice_ReturnsErrorDeleteEvent_EventExistsInSeason_Succeeds
StuperUser

@StuperUser cho hành vi dự kiến, bạn thực sự đã đặt kết quả kiểm tra dự kiến ​​và do đó tôi không biết phương thức nào được cho là trả về.
ediblecode

@danRhul Điểm công bằng, tôi không đủ rõ ràng; .._AdditionFails.._DeletionSucceedsnên tốt hơn Tôi đã đặt kết quả của phương thức, nhưng như bạn chỉ ra rằng chúng có thể bị nhầm lẫn với thuật ngữ kiểm tra vượt qua / thất bại.
StuperUser

10

Để diễn giải Lawrence từ Không gian văn phòng ...

Không, không, anh bạn, tôi tin rằng nếu ai đó tôi làm việc cùng ở đây đã đặt tên cho một chức năng 'UploadTheFileToTheServerPlease', anh ta sẽ bị một người đàn ông của mình đá.


10

Những cái tên "dài" như vậy không giống như văn xuôi . Khi một mình có lẽ, nhưng đi kèm với phần còn lại của mã, họ chỉ làm cho thêm một mớ hỗn độn. Kiểm tra xem nó:

bool ResultOfTheUpload
      = UploadTheFileToTheServerPlease(TheNameOfTheFile, TheServersAddress);

Yuuuuk! ..

Đây không phải là một văn bản tiếng Anh hợp lệ và không có ngôn ngữ lập trình nào sẽ giống như một văn bản. Vì vậy, không có ý nghĩa trong việc chi tiêu byte cho các bài viết.


1
Một ví dụ tốt về lý do tại sao tôi không thích cách tiếp cận này rất nhiều! Khi tôi viết câu hỏi, tôi chỉ tập trung vào các tên phương thức nghe có vẻ giống như văn xuôi, nhưng tôi đồng ý với bạn: thật khó để làm cho mã gọi thực sự đọc giống như văn xuôi, vì vậy không có lý do nào để làm cho các tên hàm riêng lẻ nghe giống như được viết Tiếng Anh.
Mike Spross

3
Tôi đề nghịbool ResultOfTheGentlyUploadOfTheFileToTheServer
Wizard79

Tôi đã làm việc với một người đã tạo ra các tiêu chuẩn của công ty, trong đó phải tuân theo 'biến đổi' và 'aMethod'. Người này cũng thích có tất cả các dòng mã thẳng hàng.
Chris

7

Từ quan điểm của các lập trình viên, "UploadFileToServer" có ý nghĩa và dễ đọc và dễ hiểu hơn so với "UploadTheFileToTheServerPlease".

Hơn cả ngữ pháp tiếng Anh, khả năng đọc và dễ hiểu quan trọng hơn trong lập trình!


Hoàn toàn đồng ý..nếu tôi đọc mã được viết theo phong cách đầu tiên trong vài ngày tôi chắc chắn nó sẽ khiến tôi phát điên ..
Naveen

@Naveen: Tôi đã làm việc với mã như thế này và cơ hội đầu tiên tôi nhận được đã đổi tên tất cả các phương thức đó. Và tôi không chắc đó có phải là nhà phát triển hay không, nhưng tôi nghĩ có xu hướng làm cho các hàm thực hiện nhiều việc khi bạn viết chúng dưới dạng câu, tức là UploadTheFileAndProcessItAndEmailTheOrdersToTheCustomers, mặc dù hy vọng không có gì quá tệ trong cuộc sống thực.
Mike Spross

@Mike Sau đó, tôi sẽ cấu trúc lại phương thức thành 2 phương thức khác nhau;)
Gopi

2

Cho bao nhiêu lỗi chính tả cuộc sống của tôi, tôi sẽ kết thúc với

* UploadTehFileToTehServerPleaz
* WriteTehRecordToTehDatabase
* ResetTehSystemClock
* ICanHazTehCheezburger

Nghiêm túc mà nói, tôi thậm chí sẽ nhìn vào tên lớp của tôi là tốt. Nếu lớp của tôi được gọi là "Tập tin", có lẽ tôi sẽ đi cùng

*UploadToServer
*DownloadFromServer

Vì vậy, nó sẽ là

   File file = new file;
   file.UploadtoServer(ServerAddress);

Chỉ là một ví dụ tầm thường, nhưng hy vọng điều đó đủ minh họa.


Hehe. Tôi thực sự đã thấy "Teh" leo vào các tên phương thức theo mẫu đặt tên "giống như tiếng Anh". Về điểm thứ hai của bạn: Tôi hoàn toàn đồng ý, sự dư thừa trong các tên phương thức là một tiểu thú cưng khác của tôi ( File.UploadFileToServer... ugh).
Mike Spross

0

Cá nhân tôi không quan tâm. Tôi đã nhìn thấy họ và họ không làm phiền tôi. Tôi thậm chí không nghĩ về họ cho đến khi một lập trình viên khác phát cuồng về họ. Tôi thấy thật sốc khi ai đó sẽ quan tâm rất nhiều về những thứ quan trọng quá ít. Tôi có nghĩa là anh ấy thực sự tức giận về nó. Nhưng đó là sớm trong sự nghiệp của tôi, khoảng 11 năm trước, và kể từ đó tôi thấy rằng các nhà phát triển tức giận về những điều nhỏ nhặt thực sự khá phổ biến. Đó là lý do tại sao các nhà quản lý của các nhà phát triển được trả tiền rất tốt. Họ phải đối phó với các nhà phát triển hàng ngày.

Và tôi thà thấy điều đó hơn là "UL_FlToSrv".

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.