JavaRush /Blog Java /Random-VI /IntelliJ IDEA: Kiểu mã và định dạng
Viacheslav
Mức độ

IntelliJ IDEA: Kiểu mã và định dạng

Xuất bản trong nhóm
Các công cụ hiện đại giúp quá trình phát triển dễ dàng hơn. Đặc biệt, việc theo dõi kiểu mã của bạn sẽ dễ dàng hơn, cố gắng giảm thiểu định dạng "trái phép" của nó. Trong bài đánh giá này, tôi khuyên bạn nên tự làm quen với những công cụ mà IntelliJ Idea IDE cung cấp cho nhà phát triển để làm cho mã dễ đọc và dễ hiểu.
IntelliJ IDEA: kiểu mã và định dạng - 1

Giới thiệu

Ngôn ngữ lập trình rất giống với ngôn ngữ mà mọi người nói. Sự khác biệt duy nhất là đây là một ngôn ngữ đặc biệt ban đầu được sử dụng để giao tiếp với máy tính nhằm giải thích cho nó những gì chúng ta muốn từ nó. Nhưng không thể có sự giao tiếp trực tiếp với máy tính. Ngay cả khi bạn bắt đầu học một ngôn ngữ lập trình, bạn cũng đã xem một cuốn sách hoặc một số tài nguyên giáo dục như JavaRush. Và trong nguồn này, bạn đã thấy mã mà máy tính có thể hiểu được. Nhưng bạn cũng nên hiểu nó khi bạn có được kiến ​​thức về ngôn ngữ Java. Như trong bất kỳ ngôn ngữ nào, lập trình có một số quy tắc để tạo mã. Ví dụ, viết bằng hàng rào trong xã hội lịch sự bị coi là cách cư xử xấu và trong Java việc gọi một phương thức bằng chữ in hoa là một sự vi phạm nghiêm trọng đối với kiểu mã. Các quy tắc định dạng mã Java được xây dựng trong tài liệu Công ước mã Java . Ngoài ra, kiểu mã có thể điều chỉnh các chi tiết nhỏ hơn, chẳng hạn như thụt lề. Và khi sử dụng các công cụ kiểm soát phiên bản, hãy tưởng tượng toàn bộ cơn ác mộng khi mọi người đều lưu một tệp được thụt lề dưới dạng tab hoặc thụt lề dưới dạng khoảng trắng. Sẽ như thế nào đối với người cần kiểm tra chỉnh sửa chỉ bằng một phương pháp nhưng toàn bộ tệp sẽ bị thay đổi do chỉnh sửa khoảng trắng thành tab hoặc ngược lại. Đương nhiên, giống như ngôn ngữ thông thường, phong cách có thể khác nhau tùy thuộc vào nơi nó được sử dụng. Ví dụ: trên Internet, bạn có thể tìm thấy Hướng dẫn về Phong cách Java của Google hoặc Hướng dẫn về Phong cách Java của Twitter . Đối với bài viết đánh giá này, chúng tôi sẽ cần một đối tượng thử nghiệm. Hãy sử dụng dịch vụ của hệ thống xây dựng dự án Gradle. Nó sẽ cho phép chúng ta tạo một dự án mới bằng cách sử dụng một mẫu để bắt đầu nhanh chóng. Gradle có một plugin rất hay: Build init Plugin . Hãy chuyển đến thư mục mới và thực hiện lệnh ở đó: gradle init --type java-application Sau đó, khởi chạy IntelliJ Idea. Nếu bạn thấy một cửa sổ có dự án đã mở (bạn sẽ thấy trình soạn thảo mã, cây cấu trúc 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, chúng tôi sẽ thực hiện "Import Project"và nhập dự án mới của mình. Khi nhập, hãy đặt cờ "Use autoimport". Hãy cùng xem liệu có thể đơn giản hóa cuộc sống bằng cách nào đó với sự trợ giúp của các công cụ phát triển hiện đại hay không.

Mã định dạng trong ý tưởng

Sau khi nhập dự án, nhấn tổ hợp phím Ctrl+Nvà vào lớp AppTest. Lớp nà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 thu hút sự chú ý của bạn ở đây? Một chú thích có khai báo phương thức trên một dòng, trông xấu xí, đồng ý. Làm thế nào để khắc phục điều này? IntelliJ Idea có một phần menu "Code"dành cho nhiều thao tác mã khác nhau. Một trong những thao tác như vậy là "Reformat Code"tổ hợp phím Ctrl + L. Sau khi áp dụng, chú thích sẽ nằm trên một dòng và chính 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ột đoạn mã đã chọn . Và nếu không có thứ đó thì thao tác định dạng sẽ được thực hiện trên tất cả nội dung. Bây giờ hãy thêm một phương pháp thử nghiệm mới:
@Test
public void testSummOfOddNumbers() {
	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 lần 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 Stream được đặt trên một dòng. Nhưng điều gì sẽ xảy ra nếu chúng ta muốn đảm bảo rằng các phương thức có lệnh gọi được nối chuỗi luôn được chia tại các điểm thành các dòng mới? Một mặt, chúng ta có thể thực hiện việc này một cách thủ công. Nhưng hãy nhớ rằng chúng ta muốn mọi thứ đều có lợi cho mình. Rốt cuộc, đôi khi chúng ta sẽ quên và định dạng mã sẽ trở nên khác nhau ở mọi nơi, và điều này là không tốt. Hóa ra bạn cần chỉnh sửa quy tắc mà Idea thực hiện định dạng. Chọn mục Ý tưởng trong menu File -> Settings(hoặc nhấn vào Ctrl + Alt + S). Trong trường tìm kiếm trong cửa sổ cài đặt, hãy viết “kiểu mã”. Trong phần Kiểu mã, có thể chỉ định các cài đặt không chỉ cho Java. Nhưng bây giờ chúng tôi quan tâm đến Java. Như bạn có thể thấy, cài đặt được chia thành nhiều tab. Điều hữu ích nhất là kết quả của thay đổi sẽ được hiển thị trong ví dụ ở bên phải cửa sổ:
IntelliJ IDEA: Kiểu mã và định dạng mã - 2
Như bạn có thể thấy trong ảnh chụp màn hình, chúng ta có thể chỉ định cài đặt cho "Cuộc gọi phương thức theo chuỗi" là "luôn luôn bao bọc", tức là. luôn phân chia cho các cuộc gọi phương thức đã hợp nhất. Bây giờ chúng ta hãy nhấn định dạng lại trong bài kiểm tra và xem nó có thực sự hoạt động không! Nhưng đôi khi cần phải định dạng một số mã nằm ngoài các quy tắc định dạng chung. Hãy thiết lập định dạng như sau:
IntelliJ IDEA: Kiểu mã và định dạng mã - 3
Để bật tính năng tắt định dạng, tính năng hỗ trợ tắt dấu định dạng phải được bật trong phần Kiểu mã:
IntelliJ IDEA: Kiểu mã và định dạng mã - 4
Bây giờ chúng ta có thể thay đổi mã kiểm tra để định dạng của nó vẫn ở dạng mà chúng ta viết:
@Test
public void testSummOfOddNumbers() {
	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
}
Có, nếu bạn để ý: khi bạn nhấn Tab, Idea sẽ hiểu nó là khoảng trắng cho bạn (hành vi mặc định). Nhưng bạn có thể thay đổi điều này trong Kiểu Mã:
IntelliJ IDEA: Kiểu mã và định dạng mã - 5
Như bạn có thể thấy, có rất nhiều cài đặt. Bạn có thể đọc thêm về cài đặt Kiểu mã tại đây: " Trợ giúp ý tưởng: Kiểu mã ". Có một tính năng định dạng quan trọng khác - định dạng nhập. Nó được thực thi riêng biệt và được gọi "Optimize Imports"và nằm trong mục menu Code -> Optimize Imports(Ctrl + Alt + O). Tối ưu hóa nhập sẽ loại bỏ các mục nhập không cần thiết và cũng sắp xếp chúng theo đúng thứ tự theo cài đặt trong tab Nhập của cài đặt Kiểu mã cho Java. Ngoài ra, nếu bạn muốn quá trình định dạng diễn ra tự động, tin vui là bạn có thể thực hiện việc đó bằng cách sử dụng plugin Save Actions .

Phân phối cài đặt cho một nhóm

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

Yêu cầu thắt chặt

Ngoài các công cụ Idea, bạn cũng có thể sử dụng các plugin xây dựng hệ thống để thắt chặt các yêu cầu. Không có cách nào để kiểm tra xem một người có sử dụng định dạng hay không. Nếu trong đội có 5 người thì vẫn được. Nếu công ty có 100 người thì điều đó là không thực tế. Có, ngay cả năm cũng sẽ khó theo dõi. Và tại sao lại lãng phí thời gian vào việc này? Việc cấm thu thập dự án sẽ dễ dàng hơn nhiều nếu vi phạm một số quy tắc nhất định. Trên thực tế, đây là một chủ đề hoàn toàn riêng biệt được gọi là "Kiểm tra mã". Với mục đích của bài viết này, tôi chỉ muốn chỉ ra cách nó hoạt động. Một trong những plugin phổ biến nhất dành cho Gradle (vì nó thu thập dự án của chúng tôi, nếu bạn còn nhớ) là pmd . Để kích hoạt nó, chỉ cần đi tới tập lệnh xây dựng của dự án gradle của chúng tôi (tệp build.gradle trong thư mục gốc của dự án của chúng tôi) và chỉ định pmd trong đó bên cạnh các plugin 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ể đặt cài đặt chi tiết hơn ở đó:

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ả trong dự án của chúng tôi, mọi thứ cũng không còn tốt nữa. Hãy chạy gradle build và gặp lỗi. Điều tuyệt vời là một báo cáo được tạo ra trong quá trình lắp ráp. Và nếu có lỗi chúng ta sẽ nhận được thông báo như sau:

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
Nếu vào report chúng ta sẽ thấy như sau:
IntelliJ IDEA: Kiểu mã và định dạng mã - 11
Hơn nữa, trong cột Sự cố có liên kết đến mô tả sự cố trên trang web plugin pmd. Ví dụ: đối với lỗi "headerCommentRequirementRequired", liên kết sẽ xuất hiện ở đây: pmd - CommentRequired . Lỗi này gợi ý cho chúng ta rằng lớp của chúng ta không có JavaDoc. Sự hiện diện của JavaDoc trên các lớp có thể được cấu hình bằng các mẫu:
IntelliJ IDEA: Kiểu mã và định dạng mã - 12
Và chỉ định nội dung cho File Header:
IntelliJ IDEA: Kiểu mã và định dạng mã - 13
Sau này, chúng ta có thể biến nhận xét phía trên lớp Ứng dụng thành JavaDoc và xem với Bản dựng mới, lỗi đã biến mất.

Điểm mấu chốt

Kiểu mã rất quan trọng đối với một dự án hiệu quả. Mã đẹp được viết theo các quy tắc chung là 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 nói một vài điều trìu mến về bạn. Với các công cụ phát triển hiện đại, việc tuân thủ các quy tắc không quá khó khăn. Tôi hy vọng đánh giá này đã cho thấy rằng đây thực sự là trường hợp. Vâng, như thường lệ, một ít tài liệu về chủ đề này: #Viacheslav
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION