JavaRush /จาวาบล็อก /Random-TH /IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ
Viacheslav
ระดับ

IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ

เผยแพร่ในกลุ่ม
เครื่องมือที่ทันสมัยทำให้กระบวนการพัฒนาง่ายขึ้น โดยเฉพาะอย่างยิ่ง การตรวจสอบสไตล์โค้ดของคุณทำได้ง่ายกว่า โดยพยายามลดการจัดรูปแบบที่ "ไม่ได้รับอนุญาต" ให้เหลือน้อยที่สุด ในการทบทวนนี้ ฉันเสนอให้ทำความคุ้นเคยกับเครื่องมือที่ IntelliJ Idea IDE มอบให้กับนักพัฒนา เพื่อทำให้โค้ดน่าอ่านและเข้าใจง่าย
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 1

การแนะนำ

ภาษาโปรแกรมมีความคล้ายคลึงกับภาษาที่ผู้คนพูดกันมาก ข้อแตกต่างเพียงอย่างเดียวคือนี่เป็นภาษาพิเศษที่ใช้ในการสื่อสารกับคอมพิวเตอร์ในตอนแรกเพื่ออธิบายสิ่งที่เราต้องการจากคอมพิวเตอร์ แต่ไม่สามารถสื่อสารแบบตัวต่อตัวกับคอมพิวเตอร์ได้ แม้ว่าคุณจะเริ่มเรียนภาษาการเขียนโปรแกรม แต่คุณก็ยังดูหนังสือหรือแหล่งข้อมูลทางการศึกษาเช่น JavaRush และในแหล่งนี้ คุณเห็นโค้ดที่คอมพิวเตอร์จะเข้าใจ แต่คุณควรเข้าใจเมื่อคุณได้รับความรู้เกี่ยวกับภาษา Java เช่นเดียวกับภาษาอื่นๆ การเขียนโปรแกรมมีกฎบางประการในการสร้างโค้ด ตัวอย่างเช่นการเขียนแบบมีรั้วกั้นในสังคมสุภาพถือเป็นมารยาทที่ไม่ดี และในภาษา Java การเรียกวิธีการด้วยตัวพิมพ์ใหญ่ถือเป็นการละเมิดรูปแบบโค้ดอย่างร้ายแรง กฎสำหรับการจัดรูปแบบโค้ด Java ได้รับการกำหนดไว้ในเอกสารJava Code Convention นอกจากนี้ รูปแบบของโค้ดสามารถควบคุมรายละเอียดเล็กๆ น้อยๆ ได้ เช่น การเยื้อง และเมื่อมีการใช้เครื่องมือควบคุมเวอร์ชัน ลองจินตนาการถึงฝันร้ายทั้งหมดที่ทุกคนบันทึกไฟล์โดยเยื้องเป็นแท็บหรือเยื้องเป็นช่องว่าง สำหรับคนที่ต้องตรวจสอบการแก้ไขเพียงวิธีเดียวจะเป็นอย่างไร แต่ไฟล์ทั้งหมดจะเปลี่ยนไปเนื่องจากการแก้ไขช่องว่างในแท็บหรือในทางกลับกัน โดยปกติแล้ว เช่นเดียวกับภาษาทั่วไป สไตล์อาจแตกต่างกันไปขึ้นอยู่กับว่ามีการใช้ภาษาใด ตัวอย่างเช่น บนอินเทอร์เน็ต คุณจะพบGoogle Java Style GuideหรือTwitter Java Style Guide สำหรับบทความทบทวนนี้ เราจะต้องมีหัวข้อทดสอบ มาใช้บริการของระบบสร้างโปรเจ็กต์ Gradle กัน มันจะช่วยให้เราสามารถสร้างโครงการใหม่โดยใช้เทมเพลตเพื่อการเริ่มต้นอย่างรวดเร็ว Gradle มีปลั๊กอินที่ยอดเยี่ยม: Build Init Plugin ไปที่ไดเร็กทอรีใหม่และดำเนินการคำสั่งที่นั่น: gradle init --type java-application หลังจากนั้นให้เปิด IntelliJ Idea หากคุณเห็นหน้าต่างที่มีโปรเจ็กต์ที่เปิดอยู่แล้ว (คุณจะเห็นตัวแก้ไขโค้ด แผนผังโครงสร้างโปรเจ็กต์) ให้ปิดโปรเจ็กต์นี้โดยใช้File -< Close Project. ตอนนี้ในหน้าต่างต้อนรับ เราจะดำเนินการ"Import Project"และนำเข้าโครงการใหม่ของเรา เมื่อนำเข้า ให้ตั้งค่า"Use autoimport"สถานะ เรามาดูกันว่าเป็นไปได้หรือไม่ที่จะทำให้ชีวิตง่ายขึ้นด้วยความช่วยเหลือของเครื่องมือการพัฒนาที่ทันสมัย

การจัดรูปแบบโค้ดใน Idea

หลังจากนำเข้าโปรเจ็กต์แล้ว ให้กดคีย์ผสมCtrl+Nแล้วไปที่ชั้นAppTestเรียน คลาสนี้เป็นคลาสการทดสอบเริ่มต้น ดูเหมือนว่านี้:
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());
    }
}
อะไรดึงดูดสายตาคุณที่นี่ทันที? เห็นด้วยคำอธิบายประกอบที่มีการประกาศวิธีการในหนึ่งบรรทัดซึ่งดูน่าเกลียด จะแก้ไขปัญหานี้ได้อย่างไร? IntelliJ Idea มีส่วนเมนู"Code"สำหรับการปรับแต่งโค้ดต่างๆ หนึ่งในการปรับเปลี่ยนดังกล่าวคือ"Reformat Code"การรวมกันที่Ctrl + Lสำคัญ หลังจากแอปพลิเคชัน คำอธิบายประกอบจะอยู่บนบรรทัดหนึ่ง และวิธีการจะอยู่ที่อีกบรรทัดหนึ่ง เป็นที่น่าสังเกตทันทีว่าการดำเนินการนี้ดำเนินการกับส่วนของโค้ดที่เลือก และหากไม่มีสิ่งนั้น การดำเนินการฟอร์แมตจะดำเนินการกับเนื้อหาทั้งหมด ตอนนี้เรามาเพิ่มวิธีทดสอบใหม่:
@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));
}
และการนำเข้าสองรายการ:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
อย่างที่คุณเห็น การดำเนินการบน Stream นั้นอยู่ในบรรทัดเดียว แต่จะเกิดอะไรขึ้นถ้าเราต้องการให้แน่ใจว่าเมธอดที่มีการเรียกที่ถูกล่ามโซ่นั้นจะถูกแยกออกเป็นบรรทัดใหม่เสมอ? ประการหนึ่ง เราสามารถทำได้ด้วยตนเอง แต่จำไว้ว่าเราต้องการให้ทุกอย่างทำงานให้เรา ท้ายที่สุดเราจะลืมเป็นครั้งคราวและรูปแบบโค้ดจะแตกต่างไปจากทุกที่ซึ่งนั่นไม่ดี ปรากฎว่าคุณต้องแก้ไขกฎที่ Idea ดำเนินการจัดรูปแบบ เลือกรายการแนวคิดในเมนูFile -> Settings(หรือคลิกCtrl + Alt + S) ในช่องค้นหาในหน้าต่างการตั้งค่า ให้เขียน "รูปแบบโค้ด" ในส่วนสไตล์โค้ด คุณสามารถระบุการตั้งค่าได้ไม่เพียงแต่สำหรับ Java เท่านั้น แต่ตอนนี้เราสนใจ Java แล้ว อย่างที่คุณเห็น การตั้งค่าจะแบ่งออกเป็นหลายแท็บ สิ่งที่มีประโยชน์มากที่สุดคือผลลัพธ์ของการเปลี่ยนแปลงจะแสดงในตัวอย่างทางด้านขวาของหน้าต่าง:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 2
ดังที่คุณเห็นในภาพหน้าจอ เราสามารถระบุการตั้งค่าสำหรับ "การเรียกใช้เมธอดแบบลูกโซ่" เป็น "ตัดคำเสมอ" เช่น แยกเสมอสำหรับการเรียกเมธอดแบบรวม ตอนนี้เรามาคลิกการจัดรูปแบบอีกครั้งในการทดสอบแล้วดูว่าใช้งานได้จริง! แต่บางครั้งก็เกิดขึ้นว่าจำเป็นต้องจัดรูปแบบโค้ดบางส่วนนอกกฎการจัดรูปแบบทั่วไป มาตั้งค่าการจัดรูปแบบดังนี้:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 3
หากต้องการเปิดใช้งานการจัดรูปแบบ จะต้องเปิดใช้งานการสนับสนุนการปิดใช้งานเครื่องหมายการจัดรูปแบบในส่วนสไตล์โค้ด:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 4
ตอนนี้เราสามารถเปลี่ยนโค้ดการทดสอบของเราเพื่อให้การจัดรูปแบบยังคงอยู่ในรูปแบบที่เราเขียน:
@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
}
ใช่ หากคุณสังเกตเห็น: เมื่อคุณกด Tab Idea จะตีความว่าเป็นช่องว่างสำหรับคุณ (พฤติกรรมเริ่มต้น) แต่คุณสามารถเปลี่ยนสิ่งนี้ได้ใน Code Style:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 5
อย่างที่คุณเห็น มีการตั้งค่าที่หลากหลายมาก คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการตั้งค่าสไตล์โค้ดได้ที่นี่: " ความช่วยเหลือเกี่ยวกับแนวคิด: สไตล์โค้ด " มีคุณสมบัติการจัดรูปแบบที่สำคัญอีกประการหนึ่งคือการนำเข้าการจัดรูปแบบ มันถูกดำเนินการแยกกันและถูกเรียก"Optimize Imports"และอยู่ในรายการเมนูCode -> Optimize Imports(Ctrl + Alt + O) การเพิ่มประสิทธิภาพการนำเข้าจะลบการนำเข้าที่ไม่จำเป็นออกและยังจัดลำดับที่ถูกต้องตามการตั้งค่าในแท็บการนำเข้าของการตั้งค่าลักษณะโค้ดสำหรับ Java นอกจากนี้ หากคุณต้องการให้การจัดรูปแบบเกิดขึ้น โดย อัตโนมัติ ข่าวดีก็คือ คุณสามารถทำได้โดยใช้ ปลั๊กอิน Save Actions

การกระจายการตั้งค่าให้กับทีม

เยี่ยมมาก เราเห็นแล้วว่าเราสามารถปรับแต่งรูปแบบการจัดรูปแบบให้เหมาะกับเราได้ แต่จะใช้สไตล์นี้ในทีมได้อย่างไร? ง่ายมาก. มีหลายตัวเลือก วิธีที่ง่ายที่สุดคือการบันทึกไดอะแกรม เปิดการตั้งค่าแนวคิดผ่านไฟล์ -> การตั้งค่า (หรือกด Ctrl + Alt + S) ในส่วน Code Style เราจะเห็น Scheme จารึก นี่คือรูปแบบการจัดรูปแบบของเรา ตามค่าเริ่มต้น รูปแบบจะถูกระบุด้วยชื่อ ค่าเริ่มต้น และถัดจากนั้นคือคำอธิบายประกอบ IDE ซึ่งหมายความว่าการตั้งค่านี้มีไว้สำหรับ IDE ของเราเท่านั้น และไม่มีผลกับใครเลย หากต้องการสร้างรูปแบบ "กำหนดเอง" ให้คลิกปุ่มทางด้านขวาเพื่อสร้าง "ซ้ำ" และตั้งชื่อเช่น: JavaRush
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 6
หลังจากนี้เราจะสามารถนำเข้าหรือส่งออกการตั้งค่าได้:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 7
อีกทางเลือกหนึ่งคือการนำเข้าการตั้งค่าการนำเข้าไอเดีย:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 8
ตัวเลือกที่สามคือพื้นที่เก็บข้อมูลการตั้งค่า สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Settings Repository โปรดดูเอกสารประกอบ "IntelliJ Idea Help: Settings Repository " ในหัวข้อการกระจายสไตล์เดียวในทีม ฉันอดไม่ได้ที่จะสังเกตการสนับสนุนที่ดีสำหรับสไตล์จาก Eclipse IDE ในการดำเนินการนี้คุณจะต้องติดตั้งปลั๊กอินแยกต่างหาก: เปิดการตั้งค่าไอเดียผ่านไฟล์ -> การตั้งค่า (Ctrl + Alt + S) และไปที่ส่วนปลั๊กอิน หากต้องการค้นหาปลั๊กอินใหม่ ให้คลิกปุ่ม"Browse Repositories"หลังจากนั้นเราจะพบปลั๊กอิน Eclipse Code Formatter ในหน้าต่างค้นหา
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 9
ตอนนี้หลังการติดตั้งคุณต้องรีสตาร์ท Idea - นี่เป็นขั้นตอนมาตรฐาน หลังจากนั้นในที่เดียวกันในการตั้งค่า Idea เราจะพบส่วนใหม่: “Eclipse Code Formatter” สามารถดูตัวอย่างไฟล์รูปแบบสำหรับ Eclipse ได้ ที่นี่ . มันจะมีลักษณะดังนี้:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 10

ข้อกำหนดในการกระชับ

นอกจากเครื่องมือ Idea แล้ว คุณยังสามารถใช้ปลั๊กอินระบบบิลด์เพื่อกระชับข้อกำหนดได้อีกด้วย ไม่มีวิธีตรวจสอบได้ว่าบุคคลนั้นใช้การจัดรูปแบบหรือไม่ ถ้าในทีมมี 5 คนก็ยังเป็นไปได้ หากบริษัทมีพนักงาน 100 คน ก็ถือว่าไม่สมจริง ใช่แล้ว แม้แต่ห้าคนก็ยังยากต่อการติดตาม และทำไมต้องเสียเวลากับเรื่องนี้? การห้ามการรวบรวมโครงการจะง่ายกว่ามากหากมีการละเมิดกฎเกณฑ์บางประการ อันที่จริง นี่เป็นหัวข้อแยกต่างหากทั้งหมดที่เรียกว่า "ตรวจสอบรหัส" สำหรับวัตถุประสงค์ของบทความนี้ ฉันแค่อยากจะแสดงให้เห็นว่ามันทำงานอย่างไร pmdหนึ่งในปลั๊กอินที่พบบ่อยที่สุดสำหรับ Gradle (เนื่องจากมันรวบรวมโครงการของเรา หากคุณจำได้) คือ หากต้องการเปิดใช้งาน เพียงไปที่สคริปต์บิลด์ของโปรเจ็กต์ gradle ของเรา (ไฟล์ build.gradle ในรูทของโปรเจ็กต์ของเรา) และระบุ pmd ไว้ถัดจากปลั๊กอินที่เหลือ:

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'
}
ตอนนี้เราสามารถตั้งค่ารายละเอียดเพิ่มเติมได้ที่นั่น:

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'
    ]
}
แม้แต่ในโครงการของเราทุกอย่างก็ไม่ดีอีกต่อไป มารัน gradle build และรับข้อผิดพลาดกัน สิ่งที่ดีคือมีการสร้างรายงานระหว่างการประกอบ และหากมีข้อผิดพลาดเราจะได้รับข้อความดังนี้:

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
ถ้าเราไปที่รายงานเราจะเห็นสิ่งนี้:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 11
นอกจากนี้ ในคอลัมน์ปัญหา ยังมีลิงก์ไปยังคำอธิบายปัญหาบนเว็บไซต์ปลั๊กอิน pmd ตัวอย่างเช่น สำหรับข้อผิดพลาด "headerCommentRequirement Requirement Requirement" ลิงก์จะไปที่นี่: pmd - CommentRequired ข้อผิดพลาดนี้บอกเป็นนัยว่าคลาสของเราไม่มี JavaDoc การมีอยู่ของ JavaDoc บนคลาสสามารถกำหนดค่าได้โดยใช้เทมเพลต:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 12
และระบุเนื้อหาสำหรับ File Header:
IntelliJ IDEA: รูปแบบโค้ดและการจัดรูปแบบ - 13
หลังจากนี้ เราสามารถเปลี่ยนความคิดเห็นเหนือคลาส App ให้เป็น JavaDoc และดูว่าข้อผิดพลาดนั้นหายไปใน Build ใหม่แล้ว

บรรทัดล่าง

รูปแบบโค้ดเป็นสิ่งสำคัญสำหรับโครงการที่มีประสิทธิผล โค้ดที่สวยงามที่เขียนตามกฎทั่วไปคือการรับประกันว่าเพื่อนร่วมงานของคุณจะเข้าใจได้ง่ายและรวดเร็วยิ่งขึ้น และจะไม่พูดอะไรที่น่ารักเกี่ยวกับคุณเลย ด้วยเครื่องมือการพัฒนาที่ทันสมัย ​​การยึดติดกับกฎเกณฑ์จึงไม่ใช่เรื่องยาก ฉันหวังว่ารีวิวนี้แสดงให้เห็นว่านี่เป็นกรณีนี้จริงๆ ตามปกติมีเนื้อหาเล็กน้อยในหัวข้อ: #เวียเชสลาฟ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION