Một ngôn ngữ lập trình rất giống với ngôn ngữ nói. Sự khác biệt duy nhất là nó là một ngôn ngữ đặc biệt với mục đích chính là tạo điều kiện giao tiếp với máy tính để giải thích cho máy tính những gì chúng ta muốn nó làm. Nhưng bạn không thể trò chuyện cá nhân với máy tính. Khi bạn bắt đầu học một ngôn ngữ lập trình, bạn đã xem sách hoặc một số tài nguyên giáo dục như CodeGym. Và tài nguyên này cho bạn thấy mã mà máy tính hiểu được. Nhưng bạn cũng nên hiểu nó khi tìm hiểu về ngôn ngữ Java. Như với bất kỳ ngôn ngữ nào, một số quy ước định dạng đã được áp dụng trong lập trình. Ví dụ, trong xã hội lịch sự, WRITiNg LiKe ThIs sẽ được coi là cách cư xử xấu. Và trong Java, bắt đầu tên của một phương thức bằng một chữ in hoa là vi phạm nghiêm trọng các quy ước mã hóa. IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 1Các quy tắc dành cho mã Java được đưa ra trong tài liệu Code Conventions for the Java Programming Language . Các quy ước mã hóa cũng có thể điều chỉnh các chi tiết nhỏ hơn, chẳng hạn như thụt đầu dòng. Hãy tưởng tượng cơn ác mộng hoàn toàn mà kiểm soát phiên bản sẽ trở thành nếu thụt đầu dòng không nhất quán, một số người sử dụng tab và những người khác sử dụng khoảng trắng. Điều gì sẽ xảy ra đối với một người cần kiểm tra bản sửa lỗi chỉ bằng một phương pháp nhưng nhận thấy toàn bộ tệp đã thay đổi do sự khác biệt về dấu cách và tab? Tất nhiên, như với ngôn ngữ thông thường, các quy ước có thể thay đổi tùy thuộc vào nơi ngôn ngữ được sử dụng. Ví dụ: trong phạm vi rộng lớn của web, bạn có thể tìm thấy Google Java Style GuideTwitter Java Style Guide. Đối với đánh giá này, chúng tôi cần một chủ đề thử nghiệm. Chúng tôi sẽ sử dụng hệ thống tự động hóa bản dựng Gradle. Nó sẽ cho phép chúng ta bắt đầu nhanh chóng bằng cách tạo một dự án mới từ một mẫu. Gradle có một plugin tuyệt vời: Build Init Plugin . Hãy chuyển đến một thư mục mới và chạy lệnh sau ở đó: gradle init --type java-application Sau đó, khởi động IntelliJ IDEA. Nếu bạn thấy một cửa sổ có dự án đang mở (nghĩa là bạn thấy trình soạn thảo mã và cây dự án), hãy đóng dự án này bằng cách sử dụng File -> Close Project. Bây giờ, trong cửa sổ chào mừng, hãy chạy " Import Project" và nhập dự án mới của chúng ta. Khi nhập, hãy đặt Use autoimporthộp kiểm " ". Hãy tìm hiểu xem liệu chúng ta có thể sử dụng các công cụ phát triển tiên tiến nhất để đơn giản hóa cuộc sống bằng cách nào đó hay không.

Định dạng mã trong IDEA

Sau khi nhập dự án, nhấn Ctrl+N và chuyển đến AppTestlớp học. Đây là lớp kiểm tra mặc định. Nó trông như thế này:

 import org.junit.Test;
 import static org.junit.Assert.*;
 
 public class AppTest {
     @Test public void testAppHasAGreeting() {
         App classUnderTest = new App();
         assertNotNull("app should have a greeting", classUnderTest.getGreeting());
     }
 }
Điều gì ngay lập tức đập vào mắt bạn? Một chú thích trên cùng một dòng với một khai báo phương thức, trông xấu xí, phải không? Làm thế nào để khắc phục điều này? IntelliJ IDEA có Codemục trình đơn " " cho các thao tác mã khác nhau. Một thao tác như vậy là " Reformat Code", bạn có thể áp dụng thao tác này bằng Ctrl+L. Sau khi bạn thực hiện việc này, chú thích sẽ nằm trên một dòng và phần khai báo phương thức sẽ nằm trên một dòng khác. Cần lưu ý ngay rằng thao tác này được thực hiện trên mã hiện được chọn . Nếu không có lựa chọn nào, thì thao tác định dạng được thực hiện trên mọi thứ. Bây giờ hãy thêm một phương pháp kiểm tra mới:

 @Test
 public void testSumOfOddNumbers() {
 	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
 	Integer result = data.stream().filter(number -> number % 2 == 0).reduce((n1, n2) -> n1 + n2).get();
 	assertThat(result, is(12));
 }
Và hai nhập khẩu:

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Như bạn có thể thấy, thao tác trên Luồng nằm trên một dòng. Nhưng nếu chúng ta muốn đảm bảo rằng các cuộc gọi phương thức chuỗi luôn được chia thành các dòng mới ở mỗi toán tử chu kỳ thì sao? Chúng tôi có thể làm điều này bằng tay. Nhưng hãy nhớ rằng chúng tôi muốn mọi thứ diễn ra tự động. Thật vậy, đôi khi chúng ta chắc chắn sẽ quên bước thủ công và sau đó chúng ta sẽ kết thúc với các định dạng khác nhau ở mọi nơi, và điều đó là không tốt. Vì vậy, chúng tôi cần chỉnh sửa quy tắc mà IDEA sử dụng để định dạng. ChọnFile -> Settingstrong menu IDEA (hoặc nhấn Ctrl+Alt+S). Nhập "Kiểu mã" vào trường tìm kiếm trong cửa sổ cài đặt. Trong phần "Kiểu mã", bạn có thể chỉ định cài đặt cho nhiều ngôn ngữ hơn là chỉ Java. Nhưng Java mới là điều chúng tôi quan tâm lúc này. Như bạn có thể thấy, các cài đặt được chia thành nhiều tab. Một tính năng cực kỳ hữu ích là một ví dụ về thao tác được hiển thị ở phần bên phải của cửa sổ: IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 2Ảnh chụp màn hình cho thấy chúng ta có thể đặt "Các cuộc gọi phương thức theo chuỗi" thành "luôn bao bọc", tức là luôn chia các cuộc gọi phương thức theo chuỗi thành các dòng riêng biệt. Bây giờ hãy nhấp lại vào nút định dạng trong lớp kiểm tra và chúng tôi thấy rằng nó thực sự hoạt động! Nhưng đôi khi bạn cần định dạng một số mã bên ngoài các quy tắc định dạng tiêu chuẩn. Thiết lập định dạng như sau: IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 3Để ngăn chặn định dạng, trong phần "Kiểu mã", hãy bật các dấu định dạng: IntelliJ IDEA: Kiểu viết mã và định dạng mã - 4Bây giờ chúng ta có thể thay đổi lớp thử nghiệm của mình để mã của nó không bị định dạng lại:

 @Test
 public void testSumOfOddNumbers() {
 	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
 	// @formatter:off
 	Integer result = data.stream().filter(number -> number % 2 == 0)
                              .reduce((n1, n2) -> n1 + n2)
                              .get();
 	assertThat(result, is(12));
 	// @formatter:on
 }
Bạn có thể nhận thấy rằng khi bạn nhấn Tab, IDEA sẽ hiểu nó là khoảng trắng (đây là hành vi mặc định). Nhưng bạn có thể thay đổi điều này trong Code Stylephần " ": IntelliJ IDEA: Kiểu viết mã và định dạng mã - 5Như bạn có thể thấy, có rất nhiều cài đặt ở đó. Bạn có thể đọc thêm chi tiết về Code stylecài đặt " " tại đây: " Trợ giúp IDEA: Kiểu mã ". Có một tính năng định dạng quan trọng khác: định dạng nhập. Thao tác này được chạy riêng và được gọi là " Optimize Imports". Nó nằm bên dưới Code -> Optimize Imports(Ctrl+Alt+O). Việc tối ưu hóa quá trình nhập sẽ loại bỏ các hoạt động nhập không cần thiết và sắp xếp quá trình nhập theo đúng thứ tự theo cài đặt trong Importstab " " của Code Stylecài đặt " " cho Java. Ngoài ra, nếu bạn muốn định dạng này tự động diễn ra, thì có một tin tốt:Lưu plugin Hành động.

Phân phối cài đặt trong một lệnh

Ở trên, chúng tôi đã thấy rằng bạn có thể tùy chỉnh kiểu định dạng của mình theo ý muốn. Nhưng làm thế nào để bạn sử dụng phong cách này trong một nhóm? Rất dễ dàng. Có một số tùy chọn. Đơn giản nhất là lưu lược đồ kiểu mã. Mở cài đặt IDEA bằng File -> Settings(hoặc nhấn Ctrl+Alt+S). Trong Code Stylephần " ", chúng ta có thể thấy "Lược đồ". Đây là sơ đồ định dạng của chúng tôi. Theo mặc định, lược đồ "Mặc định" được sử dụng và được gắn nhãn "IDE", có nghĩa là cài đặt này chỉ áp dụng cho IDE của chúng tôi — cài đặt này không ảnh hưởng đến bất kỳ ai khác. Để tạo lược đồ "tùy chỉnh", hãy sử dụng nút ở bên phải để tạo một bản sao và đặt tên cho nó, ví dụ: CodeGym IntelliJ IDEA: Kiểu viết mã và định dạng mã - 6Sau đó, chúng ta có thể nhập hoặc xuất cài đặt: IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 7 Một tùy chọn khác là nhập cài đặt IDEA: IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 8Tùy chọn thứ ba là Kho lưu trữ Cài đặt. Để sử dụng Settings Repository, hãy xem tài liệu Trợ giúp IntelliJ IDEA để biết thêm chi tiết tại liên kết sau: Settings Repository ". Nói đến việc thúc đẩy một phong cách thống nhất trong một nhóm, tôi cũng không thể không nhắc đến sự hỗ trợ tốt cho các phong cách từ Eclipse IDE. Để thực hiện việc này, bạn cần cài đặt plugin riêng: mở cài đặt IDEA qua Tệp -> Cài đặt (Ctrl+Alt+S) và chuyển đến phần "Plugin". Để tìm plugin mới, hãy nhấp vào nút " ". Sau đó Browse Repositories, tìm plugin Trình định dạng mã Eclipse trong cửa sổ tìm kiếm. IntelliJ IDEA: Kiểu viết mã và định dạng mã - 9Sau khi cài đặt nó, bạn sẽ phải khởi động lại IDEA — đây là quy trình chuẩn. Bây giờ mọi thứ đã hoàn tất. Có một phần mới trong cài đặt IDEA: "Trình định dạng mã Eclipse".. Nó sẽ trông giống như thế này: IntelliJ IDEA: Kiểu viết mã và định dạng mã - 10

Yêu cầu chặt chẽ hơn

Ngoài các công cụ IDEA, bạn cũng có thể sử dụng các plugin tự động hóa bản dựng để thắt chặt các yêu cầu. Không có cách nào bạn có thể kiểm tra thủ công xem ai đó đã sử dụng định dạng phù hợp chưa. Có lẽ bạn có thể với 5 người trong một nhóm. Nhưng với 100 người tại một công ty, điều đó không thực tế. Và thậm chí năm sẽ khó theo dõi. Và tại sao lãng phí thời gian của bạn vào bất kỳ điều này? Sẽ dễ dàng hơn nhiều để ngăn chặn dự án được xây dựng nếu các quy tắc bị vi phạm. Trên thực tế, đây là một chủ đề hoàn toàn riêng biệt có tên là "Kiểm tra mã". Trong bài viết này, tôi chỉ muốn cho bạn thấy nó hoạt động như thế nào. Một trong những plugin Gradle phổ biến nhất (vì nó xây dựng dự án của chúng ta, bạn sẽ nhớ lại) là pmd. Để kích hoạt nó, chỉ cần truy cập tập lệnh xây dựng của dự án Gradle (tệp build.gradle ở thư mục gốc của dự án) và thêm pmd vào đó bên cạnh phần bổ trợ còn lại:

 plugins {
     // Apply the java plugin to add support for Java
     id 'java'
     // Check source code
     id 'pmd'
     // Apply the application plugin to add support for building an application
     id 'application'
 }
Bây giờ chúng ta có thể nhập các cài đặt chi tiết hơn ở cùng một nơi:

 pmd {
     ignoreFailures = false
     pmdTest.enabled = true
     ruleSets = [
             'java-basic',
             'java-braces',
             'java-clone',
             'java-codesize',
             'java-comments',
             'java-controversial',
             'java-coupling',
             'java-design',
             'java-empty',
             'java-finalizers',
             'java-imports',
             'java-optimizations',
             'java-strictexception',
             'java-strings',
             'java-typeresolution',
             'java-unnecessary',
             'java-unusedcode'
     ]
 }
Ngay cả dự án của chúng tôi cũng bị phá vỡ. Chạy gradle buildvà chúng tôi nhận được một lỗi. Điều thú vị là một báo cáo được tạo trong quá trình xây dựng. Và nếu có lỗi, chúng tôi nhận được một thông báo như thế này:

 BUILD FAILED in 35s
 6 actionable tasks: 6 executed
 7 PMD rule violations were found. See the report at: file:///C:/_study/codestyle/build/reports/pmd/main.html
Đi đến báo cáo, chúng tôi thấy một cái gì đó như thế này: IntelliJ IDEA: Kiểu viết mã và định dạng mã - 11Ngoài ra, cột " Problem" cung cấp liên kết đến mô tả sự cố trên trang web của plugin pmd. Ví dụ: đối với headerCommentRequirement Requiredlỗi " ", liên kết ở đây: pmd — CommentRequired . Lỗi này là một gợi ý rằng lớp của chúng tôi không có JavaDoc. Chúng ta có thể sử dụng các mẫu để định cấu hình JavaDoc ở trên các lớp: IntelliJ IDEA: Kiểu mã hóa và định dạng mã - 12Và chỉ định nội dung cho File Header: IntelliJ IDEA: Kiểu viết mã và định dạng mã - 13Sau đó, chúng ta có thể biến nhận xét phía trên lớp Ứng dụng thành JavaDoc và thấy rằng lỗi đã biến mất trong bản dựng mới.

Điểm mấu chốt

Phong cách mã rất quan trọng để tối đa hóa năng suất của một dự án. Mã đẹp được viết theo các quy tắc được chia sẻ đảm bảo rằng đồng nghiệp của bạn sẽ hiểu nó dễ dàng và nhanh chóng hơn và sẽ không dành cho bạn nhiều lời chỉ trích. Với các công cụ phát triển hiện đại, không quá khó để tuân thủ các quy tắc về phong cách. Tôi hy vọng đánh giá này đã chứng minh cho bạn thấy rằng điều này là đúng. Theo truyền thống, đây là một tài liệu bổ sung nhỏ về chủ đề này: