Là hướng dẫn quy ước đặt tên đáng quan tâm?


13

Tôi đặt tên cho các biến của mình bằng cách sử dụng các quy ước .Net:

  • camelCase cho các biến và trường (Tôi có xu hướng sử dụng _camelCase cho các trường riêng trong một lớp)
  • PascalCase cho các phương thức, thuộc tính và các lớp

Nơi duy nhất tôi đi chệch là các hằng số và Enums nơi tôi thực sự thích kiểu Java SCREAMING_CAPS.

Cơ sở mã của công ty tôi nằm rải rác với kiểu ký hiệu Hungary giả từ VB6 và VBScript, nếu không phải là tiếng Hungary đầy đủ tức là

  • s hoặc str cho chuỗi
  • tôi hoặc int cho Ints
  • d cho số thập phân (hoặc đôi khi gấp đôi)
  • o hoặc obj cho bất kỳ loại đối tượng

Tôi co rúm lại bất cứ khi nào tôi thấy kiểu mã đó được sử dụng trong mã của người khác (ngay cả trong mã trường xanh, không chỉ là hành trình kế thừa) và tôi từ chối sử dụng kiểu đó. Tôi đã đưa ra tiêu chuẩn hóa về các quy ước đặt tên .Net trong quá khứ và nó chỉ bị bỏ qua - những người viết bằng ký hiệu Hungary tiếp tục làm như vậy, những người trong chúng ta không thích tôi tiếp tục sử dụng phong cách của riêng mình; Tôi là một chút sợ rằng nếu chúng ta làm Chuẩn hóa (mà tôi tiếp tục đẩy cho, nhưng không ai khác dường như chăm sóc), nó sẽ được vào ký hiệu Hungary và không phải là cách đề nghị và sau đó tôi sẽ bị buộc phải viết mã như thế .

Tôi có đang tạo ra một ngọn núi từ một nốt ruồi liên quan đến điều này không? Tôi có nên không quan tâm nếu mã được rải rác với các định danh dư thừa và không phải tên mô tả, và tiếp tục sử dụng cách riêng của tôi và thúc đẩy để trở thành tiêu chuẩn?


2
Câu hỏi hay. Các quy ước đặt tên là có để giúp đỡ, không cản trở. Khi chúng cản trở (vì mục đích ban đầu của chúng không còn phù hợp nữa) thì hãy bỏ chúng.
Gary Rowe

Câu trả lời:


7

Điều duy nhất bạn nên quan tâm là bạn đang làm việc trong một nhóm nơi mọi người không quan tâm đến việc dọn dẹp mọi thứ một chút. Rất buồn.

Làm những gì bạn làm, tiếp tục sử dụng phong cách hiện đại và mời mọi người (nhưng không ép buộc họ) cũng chấp nhận nó. Nó sẽ mất thời gian của khóa học. Sau một thời gian, bạn sẽ thấy liệu nó có đi đến đâu không và bạn có thể làm gì tiếp theo.

PS Làm thế nào về việc sắp xếp một cuộc họp về vấn đề này và mời mọi người tham gia. Sau đó, bạn sẽ nhận được sự chú ý đầy đủ của họ, biểu thị vấn đề và trình bày cách tiếp cận của bạn. Nó sẽ cho họ một cái gì đó để suy nghĩ. Có lẽ từ những nỗ lực địa phương của bạn, họ không coi trọng bạn lắm.


+1 Những ngày này Refactor Rename hiệu quả đến mức bạn sẽ khó nhận thấy tác động của việc thay đổi.
Gary Rowe

2
Đáng buồn thay, những người trong nhóm của tôi thậm chí không sử dụng điều đó. Họ sợ phải đổi tên mọi thứ ngay cả khi tên bị sai lệch. Ví dụ, có một phương thức được gọi SendNewCustomerEmaillà được sử dụng để gửi tất cả các loại email, không chỉ email khách hàng mới. Nó có một nhận xét từ một nhà phát triển hiện tại nói rằng "Lưu ý tên này là sai lệch" nhưng chưa ai từng thực sự đổi tên nó thành một cái gì đó chung chung và hữu ích hơn, và nếu tôi làm điều đó tôi sẽ được người quản lý yêu cầu giải thích lý do tại sao tôi Thay đổi mã không cần thay đổi thay vì thêm giá trị.
Wayne Molina

3

Tôi nghĩ rằng bạn có thể cần phải tự hỏi liệu ký hiệu của ai đó có ảnh hưởng đến đầu ra / chất lượng cá nhân của bạn hay không, hay nó chỉ làm tổn thương đến cái tôi của bạn. Theo bản ngã, tôi có nghĩa là mọi thứ thường hoạt động tốt, nhưng bạn sẽ không bao giờ muốn ai đó mà bạn tôn trọng từ bên ngoài nhìn thấy mã lỗi thời đáng xấu hổ. Trong khi tôi nghĩ rằng mối quan tâm đó có giá trị riêng của nó, bạn phải cân nhắc nó với chất lượng / năng suất đạt được sẽ được thực hiện bởi tất cả những người phải chuyển đổi.

Đây là một câu hỏi về nợ kỹ thuật, vì bạn rõ ràng chính xác rằng phong cách Hungary này không có ý nghĩa gì trong .Net (ngoại trừ giao diện với "I", nhưng đó là một lần khác), tuy nhiên, đây có thể là loại nợ kỹ thuật mà nhóm của bạn có thể sống với cho đến khi nó tự nhiên biến mất .


4
Tôi thậm chí không quan tâm đến tiền tố "Tôi" và chỉ sử dụng nó bởi vì nó tránh có câu hỏi hóc búa về Java, ví dụ, một tên được giao thoa CustomerRepositoryvà lớp CustomerRepositoryImpltương tự.
Wayne Molina

3
+1 - Có vẻ như nên có một số cách tốt hơn. Thỉnh thoảng tôi vẫn sử dụng "Ánh sáng Hungary", nhưng các tiền tố luôn liên quan đến kinh doanh, không liên quan đến loại hình. Ví dụ: mọi thứ trong Kế toán đều có AP và bên AR và chúng thường có cùng tên, chẳng hạn như Hóa đơn. Có một ARInvoice và APInvoice dường như hoàn toàn hợp lý với tôi. Hungary không phải là TẤT CẢ TẤT CẢ thời gian.
Morgan Herlocker

@Wayne M Bạn có thể muốn nhìn vào programmers.stackexchange.com/questions/75956/...
Gary Rowe

Tôi thực sự sẽ không xem xét "ký hiệu Hungary" bởi vì như bạn đã nói đó là một ý nghĩa kinh doanh với một từ viết tắt được xác định rõ mà mọi người biết, cùng một dòng có mã sử dụng tiền tố XML Xmlthay vì ExtensibleMarkupLanguage. Trong một mô-đun chiếm tôi sẽ mong đợi để xem đối tượng hoá đơn như arInvoiceapInvoicetruyền đạt bối cảnh kinh doanh, nhưng nhìn thấy objArInvoicehay oApInvoicechỉ là ngớ ngẩn IMO. Tôi đoán nó có thể tồi tệ hơn, nó có thể là tên lớpclsApInvoice thực tế
Wayne Molina

1
@ironcode: Đó thực sự là những gì được gọi là Ký hiệu ứng dụng Hungary, so với Ký hiệu hệ thống Hungary, và tốt hơn rất nhiều. Hầu hết mọi người đang sử dụng Hệ thống không may. vi.wikipedia.org/wiki/ từ
Miki Watts

2

Lập luận tốt nhất chống lại ký hiệu của Lynn, bên cạnh các IDE hiện đại, có rất nhiều phương pháp để hiển thị loại, khả năng hiển thị và nhiều thứ khác của biến số với màu sắc, với các biểu tượng nhỏ và với các chú giải công cụ trong khi nới lỏng, là nghiêm túc.

  • Khuyến khích thêm distintcion (b) ool (f) loat (c) har (l) ong (s) hort (xung đột với String? No: (S) tring), (v) oid.
  • Khuyến khích mã hóa khả năng hiển thị. Tôi đến từ Javaland và hy vọng nó cũng phù hợp với .net: (pr) vate, (pub) blic, (pro) tected (def) ault nên được sử dụng.
  • .net có cuối / const? Làm cho nó một tiền tố! Tôi có nghe thấy 'dễ bay hơi' không?
  • Tại sao int và long cần một tiền tố, nhưng các đối tượng khác nhau thì không? Điều đó không hợp lý. Tạo một chữ viết tắt.tab. trong đó mọi đối tượng mới được viết tắt riêng biệt.
  • Các biến có thể là null và như vậy, không bao giờ là null, cũng có thể được thêm tiền tố. Những người thông minh đặt toàn bộ DbC vào tiền tố của một biến.

Nghiêm túc: Khi tái cấu trúc, bạn có thể thay đổi một biến từ int thành long, từ String sang char. Bạn cũng không cần phải thay đổi tên.

Trong IDE, bạn nhận được các tên thường được sắp xếp trong Hộp ở bên cạnh. sắp xếp theo tên, nơi dễ tìm. Nếu hầu hết các biến bắt đầu bằng o hoặc i, điều đó gây khó chịu cho mắt, để đi đến phần quan trọng của tên.

Các ký tự bổ sung làm xáo trộn ngữ nghĩa của biến. Một số nguyên 'sane' được 'i_sane', trông giống như 'mất trí'.

Các ký hiệu tiếng Anh rất hữu ích trong các ngôn ngữ, thiếu một hệ thống loại. Bạn không cần nó, nếu trình biên dịch thực thi các loại cụ thể. Nếu bạn trang trí lamento của bạn về ký hiệu của người Đức bằng một sự đồng cảm 'vâng, đối với các lập trình viên lớn tuổi, thì trong quá khứ, việc sử dụng nó sẽ có ý nghĩa!', Những lập trình viên cao tuổi đó có thể là vô ích, và không muốn được xác định là cũ.

Nhưng bạn phải cẩn thận, cho kỹ thuật để làm việc. Có lẽ bạn có thể hạ giọng khi nói về 'lập trình viên lớn tuổi', để cho họ cảm nhận, bạn cẩn thận với họ đến mức nào, họ cần sự chăm sóc như thế nào. Vì vậy, một người thứ ba trong phòng sẽ nhận ra rằng bạn đang cố gắng che giấu điều gì đó, điều này tất nhiên sẽ làm tăng sự tò mò của anh ta.


Đáng buồn thay, tôi cũng đã thấy eSomeEnumđược sử dụng ở những nơi; rất may không thường xuyên
Wayne Molina

2

Mua một bản sao của Hướng dẫn thiết kế khung và thả nó trên bàn của người quản lý (hoặc bất cứ ai kiểm soát phong cách mã hóa). Hãy chắc chắn để đặt một bài đăng nó lưu ý rõ ràng chỉ vào phần giới thiệu nơi họ làm nổi bật tầm quan trọng của tính nhất quán. Để tiếp tục lái xe về nhà, hãy lấy một bản sao của Clean Code và đặt một dấu trang vào đó trên phần liên quan đến các quy ước mã hóa.


1

Trong một số khía cạnh, đây là một vấn đề chủ quan, và đó là một trong những cuộc tranh luận về minutae (chính tả?) Mà tôi giải trí trong một thời gian sau đó tránh. Trong khi tôi nghĩ rằng ký hiệu của Lynn là một tội lỗi cần phải bị trục xuất, tôi nghĩ rằng tính nhất quán là quan trọng hơn.

Theo cách đó, tôi sẽ làm hết sức mình để thuyết phục một nhóm sử dụng cách đặt tên biến trung tâm tên miền thay vì các quy ước đặt tên dựa trên loại, nhưng nếu mọi thứ trở nên khó khăn, tôi sẽ lùi lại để chấp nhận một tiêu chuẩn đặt tên mà mọi người phải tuân thủ một cơ sở mã phổ biến.

Tôi không ủng hộ một số tiêu chuẩn bắt buộc chung do một nhóm tiêu chuẩn áp đặt, nhưng các nhóm phần mềm đó phát triển tiêu chuẩn của riêng họ, và quan trọng hơn là tuân thủ nó.


1

Với việc chia sẻ lại các biến đổi tên nhanh đến mức tôi có thể hoàn tác các quy ước đặt tên quá nhanh, đến nỗi tôi không phải rời bỏ các quy ước cũ, sai lầm.

Nếu bạn không có các công cụ tái cấu trúc, thì tôi đồng ý với các nhà bình luận khác, những người đã đề xuất theo quy ước hiện tại của codebase càng nhiều càng tốt, ngay cả khi nó bị sai. (tối đa một điểm, có các quy ước đặt tên thay đổi sẽ biến thành các trình tạo lỗi nếu bạn cho phép chúng)


0

Hầu hết các mối quan tâm của bạn là hợp lệ và sẽ làm cho cuộc sống dễ dàng hơn cho một nhà phát triển mới và có lẽ sự tỉnh táo của bạn. Một quy ước bạn nên áp dụng là tên mô tả. Bạn sẽ có thể đi đến một số sự đồng thuận về điều đó mà không thay đổi mạnh mẽ phong cách tùy thuộc vào mức độ xấu của chúng. Đối với mọi thứ khác, hãy đợi cho đến khi bạn chịu trách nhiệm hoặc bạn thay thế các thành viên hiện tại bằng các nhà phát triển mới nghĩ và cảm nhận theo cách bạn làm.


0

Những sai lệch của tôi:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • chức năng riêng
  • thông số
  • Nút riêng okBU; //Vân vân. giới hạn 3 ký tự
  • struct SOMESTRVEL // cho các cấu trúc pinvoke

Khu vực mã chung và bố cục tệp:

  • Các thành viên
    • (riêng tư | nội bộ | được bảo vệ | công khai) X [tĩnh] X [const / readonly]
  • Tính chất
    • (riêng tư | nội bộ | được bảo vệ | công khai) X [tĩnh] X [chỉ đọc]
  • Người xây dựng
    • (riêng tư | nội bộ | được bảo vệ | công khai) X [tĩnh]
  • Các lệnh // bất cứ thứ gì có void return hoặc status return
    • (công khai | được bảo vệ | nội bộ | riêng tư) X [tĩnh]
  • Xử lý sự kiện / riêng tư /
    • (Điều khiển | Từ xa | Dịch vụ | Khác) Sự kiện
  • Hàm // truy vấn trạng thái, không có tác dụng phụ
    • (công khai | được bảo vệ | nội bộ | riêng tư) X [tĩnh]
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.