Kết nối niềng răng
Trò chơi giúp hình dung hiệu ứng của kiểu đặt nẹp trong Java
Mục tiêu là khách quan
Vài năm trước, tôi đã nghĩ ra một cách tiếp cận sáng tạo để giúp thiết lập và thống nhất phong cách viết mã với một nhóm mới mà tôi đang làm việc. Chúng tôi đang ở giai đoạn đầu viết mã cho một dự án mới bằng ngôn ngữ lập trình Java. Tôi đã yêu cầu chúng ta quyết định và thống nhất trước các nguyên tắc về kiểu mã nhất quán với tư cách là một nhóm. Tôi biết mình cần phải đưa ra một lập luận khách quan và sáng tạo để giải quyết một trong những cuộc tranh luận gây tranh cãi về kiểu mã trong Java — vị trí đặt các dấu ngoặc nhọn.
Lựa chọn sáng tạo thay vì xung đột
Bơi ngược dòng “nhưng mọi người khác làm theo cách này” thật khó. Thậm chí còn khó hơn khi một công ty tìm kiếm có uy tín cao đóng dấu chấp thuận của họ đối với một phong cách viết mã Java cụ thể.
Để giúp tôi trình bày lập luận khách quan cho một phong cách đặt mắc cài cụ thể, tôi đã tạo một trò chơi mà tôi gọi là “Nối các mắc cài”. Tôi lấy mã từ hai lớp ví dụ mà tôi đã tạo và dán chúng vào bản Powerpoint và vẽ các đường thẳng lên trên mã theo đúng nghĩa đen để kết nối các dấu ngoặc nhọn bắt đầu và kết thúc. Trò chơi được lấy cảm hứng từ một trong những trò chơi thời thơ ấu yêu thích của tôi - “Connect the Dots”.
Điều tuyệt vời về “Connect the Dots” là luật chơi rất đơn giản và hầu hết mọi người đều đã từng chơi trò chơi này ở trường. “Kết nối Niềng răng” cũng rất đơn giản. Chỉ cần kết nối các dấu ngoặc nhọn bắt đầu và kết thúc của từng phạm vi mã bằng cách vẽ một đường thẳng giữa chúng. Dễ dàng.
Tôi trình bày trò chơi cho cả nhóm, và sau khi tôi hoàn thành, không ai phản hồi “nhưng những người khác đều làm theo cách này”. Điều này xác nhận rằng ít nhất một nhóm đã phản ứng tốt với một cuộc tranh luận sáng tạo về phong cách đặt nẹp.
Tự động hóa trò chơi
Tôi đã nói với người bạn Vladimir Zakharov (Vlad) của mình về trò chơi này và cách nó xoa dịu hiệu quả những gì tôi đã trải qua trước đây như một cuộc tranh luận gay gắt. Tôi hỏi Vlad liệu anh ấy có thể viết một số mã Java để trực quan hóa trò chơi mà tôi đã mô tả cho anh ấy không. Vlad giỏi lập trình trực quan hơn tôi, vì vậy tôi biết anh ấy sẽ hoàn thành mã nhanh hơn tôi.
Vlad đã làm điều gì đó thậm chí còn tốt hơn là chỉ kết nối các dấu ngoặc nhọn trong tệp nguồn. Anh ấy cũng tô màu các khối mã bằng màu xanh lá cây nổi bật. Điều này có thêm lợi ích là làm nổi bật khoảng trắng một cách trực quan.
Các hình ảnh trong phần sau đây được tạo bằng cách sử dụng phiên bản tự động của “Connect the Braces” của Vlad trên mã thực tế từ Eclipse Collections Kata .
Cảnh báo! Trò chơi trên!
Các hình ảnh sau đây là đồ họa. Một số nhà phát triển có thể thấy chúng đáng lo ngại. Mã nguồn thực tế đã được sử dụng để tạo ra các hình ảnh sau đây. Bất kỳ hình ảnh nào không thể xem được sau khi cuộn ra ngoài văn bản này là trách nhiệm duy nhất của người cuộn chứ không phải tác giả. Bất kỳ loại trái cây hoặc vật nuôi nào bị hại trong hai vòng “Kết nối Niềng răng” đều là kết quả của các lựa chọn kiểu mã, không phải tác giả. Chọn một cách khôn ngoan. Bạn đã được cảnh báo!
Vòng một: Enum trái cây
Vòng hai: PetType Enum
Chọn rõ ràng thay vì lộn xộn
Tôi biết có lẽ mình vừa lội xuống một dòng sông dữ dội đầy đàn cá piranha đói khát trong khi mặc một chiếc quần bơi làm từ bít tết. Tôi không tìm cách thuyết phục mọi người rằng một phong cách đặt mắc cài cụ thể là “một phong cách thực sự”. Chắc chắn có một phong cách mà tôi thích hơn khi viết mã và tôi phải tranh luận về phong cách đó trong mọi dự án mà tôi thực hiện. Tôi thấy rằng khi tôi trình bày lập luận của mình bằng trò chơi này, chúng ta có thể thảo luận lành mạnh về tầm quan trọng của tính thẩm mỹ, khoảng trắng và theo dõi trực quan để quét và đọc mã.
Tôi chọn sự rõ ràng thay vì lộn xộn. Tín hiệu qua tiếng ồn. Tôi chọn phong cách bên phải.
Để trích dẫn người bạn của tôi Vlad:
Khi tôi đọc mã, tôi thường muốn xem “cái gì”, ví dụ: trách nhiệm của lớp này là gì, hợp đồng của phương thức này là gì, điều kiện để kích hoạt nhánh này là gì — hoặc “làm thế nào”, ví dụ: làm thế nào để phương pháp này làm những gì nó làm, điều gì xảy ra nếu tôi theo nhánh này, v.v. Việc tách biệt trực quan giữa nội dung và cách thức giúp tôi quét mã và tập trung sự chú ý của mình vào những nội dung quan trọng vào thời điểm đó.
Kiểu định dạng dấu ngoặc nhọn dọc có tác dụng tự nhiên là phân tách rõ ràng “cái gì” khỏi “cách thức” bằng cách đưa vào khoảng trắng giữa chữ ký (định nghĩa lớp và phương thức) và triển khai (biến và mã). Các dấu ngoặc nhọn bắt đầu và kết thúc luôn ở cùng một vị trí nằm ngang, với sự thay đổi nhất quán dựa trên độ sâu của các phạm vi lồng nhau (ví dụ: các câu lệnh điều khiển như if, for và while). Bạn muốn nhìn thấy đáy của hình kim tự tháp với các dấu ngoặc nhọn, vì vậy có thể yên tâm bỏ qua vị trí của chúng, bởi vì bạn biết chúng ở đâu. Kiểu này dễ triển khai định dạng tự động trong IDE của bạn và thực thi trong bản dựng CheckStyle.
Tôi đã lội ngược dòng bằng cách sử dụng kiểu định dạng dấu ngoặc nhọn này trong Java trong hơn 20 năm. Đối với các nhà phát triển, những người phải đọc hoặc làm việc trong các cơ sở mã được định dạng bằng cách sử dụng kiểu đặt dấu ngoặc dọc vì tôi, tôi có điều muốn nói.
Không có gì!
Một ngoại lệ cho quy tắc
Tôi chọn một kiểu đặt dấu ngoặc nhọn khác khi tạo trang trình bày Powerpoint hoặc văn bản cho một cuốn sách bằng mã Java. Chỉ với hai phương tiện in này, hầu như tôi luôn chọn kiểu có ít dòng mã hơn. Phá vỡ mã trên các trang là điều không mong muốn. Đây là một sự cân bằng được thực hiện do giới hạn về không gian dọc có sẵn. Giới hạn áp đặt này không tồn tại trong mã bạn đang đọc trong IDE hoặc trong trình duyệt đọc nguồn từ VCS như GitHub hoặc GitLab nơi cuộn dọc hoạt động tốt.
Bảy thói quen mã hóa không hiệu quả của nhiều lập trình viên
Một vài tháng sau khi tôi tạo trò chơi “Kết nối niềng răng”, tôi đã xem một bài nói chuyện tuyệt vời của Kevlin Henney , người đã trình bày một lập luận tuyệt vời cho một phong cách đặt niềng răng cụ thể, trong số nhiều điểm tuyệt vời khác mà anh ấy đưa ra trong bài nói chuyện về phong cách viết mã.
Vì vậy, những gì tôi vừa nói với bạn, trong trường hợp bạn đang thắc mắc, vâng, có một cách để xác định cách sắp xếp niềng răng của bạn một cách chính xác… một cách khách quan.
Không có spoilers. Tôi thực sự khuyên bạn nên xem cuộc nói chuyện này. Cảnh báo, bài nói chuyện này có thể là một sự gián đoạn mang tính xây dựng đối với phong cách mã hóa hiện tại của bạn.
Lời kêu gọi hành động trên kiểu mã Java
Chúng tôi để lại hàng tỷ dòng mã nguồn Java trong các hệ thống kiểm soát phiên bản để được duy trì bởi bản thân tương lai của chúng tôi và các thế hệ nhà phát triển tương lai. Phong cách mã có tác động trực tiếp và tinh tế đến sự rõ ràng và dễ đọc. Không phải ai cũng đọc mã với tốc độ như nhau. Có thể có những thách thức về khả năng tiếp cận mà bạn nên thảo luận và xem xét với tư cách là một nhóm. Mọi người cuối cùng sẽ có thể phân tích mã bằng cách đọc nó, bất kể kiểu mã. Nếu chúng ta có thể dành ít chu kỳ hơn để phân tách cái gì với cách thức và mã tìm kiếm mà chúng ta đang tìm kiếm, thì đó sẽ là một điều tốt.
Dưới đây là các quy tắc của tôi để xây dựng phong cách viết mã có thể chấp nhận được trong nhóm.
- Thảo luận với nhóm của bạn về các nguyên tắc về kiểu mã.
- Áp dụng các nguyên tắc về kiểu mã nhất quán trong dự án của bạn bằng cách sử dụng các quy tắc định dạng tự động được mã hóa và tùy chỉnh trong IDE yêu thích của bạn.
- Chạy bản dựng liên tục tự động sẽ phá vỡ các cam kết kiểu mã không nhất quán (ví dụ: CheckStyle).
- Xuất bản các hướng dẫn về kiểu mã của bạn trong VCS dự án của bạn.
- Hãy can đảm và dành thời gian để phát triển các hướng dẫn về kiểu mã của bạn khi bạn khám phá hoặc học được điều gì đó mới.
Vui lòng sử dụng trò chơi Kết nối dấu ngoặc nhọn để giúp tạo điều kiện thuận lợi cho các cuộc thảo luận hợp lý và khách quan về kiểu mã, đặc biệt khi trò chơi này áp dụng cho các cuộc thảo luận xung quanh kiểu đặt dấu ngoặc nhọn trong Java. Nếu bạn thích phong cách này và muốn xem cài đặt kiểu mã mà chúng tôi đã sử dụng trong IntelliJ IDEA cho Bộ sưu tập Eclipse trong bảy năm qua, hãy kiểm tra chúng trong GitHub tại đây .
Vui thích!
Tôi là người tạo ra và là Người ủy quyền cho dự án PMNM Bộ sưu tập Eclipse được quản lý tại Quỹ Eclipse . Bộ sưu tập Eclipse được mở để đóng góp .

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































