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. Cá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 Guide và Twitter 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 autoimport
hộ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 đếnAppTest
lớ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ó Code
mụ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 -> Settings
trong 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ổ: Ả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: Để ngăn chặn định dạng, trong phần "Kiểu mã", hãy bật các dấu định dạng: Bâ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 Style
phần " ": Như 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 style
cà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 Imports
tab " " của Code Style
cà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ằngFile -> Settings
(hoặc nhấn Ctrl+Alt+S). Trong Code Style
phầ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 Sau đó, chúng ta có thể nhập hoặc xuất cài đặt: Một tùy chọn khác là nhập cài đặt IDEA: Tù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. Sau 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:
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 build
và 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: Ngoà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 Required
lỗ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: Và chỉ định nội dung cho File Header
: Sau đó, 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:- Video từ JetBrainsTV: " Kiểm tra mã (IntelliJ IDEA) "
- Đánh giá về " Phân tích mã với plugin Gradle "
- Khóa học " Tự động hóa mã chất lượng "
GO TO FULL VERSION