JavaRush /Java blogi /Random-UZ /IntelliJ IDEA: Kod uslubi va formatlash
Viacheslav
Daraja

IntelliJ IDEA: Kod uslubi va formatlash

Guruhda nashr etilgan
Zamonaviy vositalar rivojlanish jarayonini osonlashtiradi. Xususan, "ruxsatsiz" formatlashni minimallashtirishga harakat qilib, kodingiz uslubini kuzatish osonroq. Ushbu sharhda men IntelliJ Idea IDE kodni o'qish uchun yoqimli va tushunarli qilish uchun ishlab chiquvchiga qanday vositalarni taqdim etishi bilan tanishishni taklif qilaman.
IntelliJ IDEA: kod uslubi va formatlash - 1

Kirish

Dasturlash tili odamlar gapiradigan tilga juda o'xshaydi. Yagona farq shundaki, bu maxsus til bo'lib, dastlab kompyuterdan nima istayotganimizni tushuntirish uchun u bilan muloqot qilish uchun ishlatiladi. Lekin kompyuter bilan yakkama-yakka muloqot bo'lishi mumkin emas. Dasturlash tilini o'rganishni boshlaganingizda ham, siz kitob yoki JavaRush kabi ta'lim manbasini ko'rib chiqdingiz. Va bu manbada siz kompyuter tushunadigan kodni ko'rdingiz. Lekin siz Java tilini bilishingiz bilan ham buni tushunishingiz kerak. Har qanday tilda bo'lgani kabi, dasturlashda ham kodni shakllantirish uchun ba'zi qoidalar mavjud. Masalan, muloyim jamiyatda panjara bilan yozish yomon odob hisoblanadi, Javada esa bosh harf bilan usulni chaqirish kod uslubini qo'pol ravishda buzish hisoblanadi. Java kodini formatlash qoidalari Java Code Convention hujjatida tuzilgan . Bundan tashqari, kod uslubi kichikroq tafsilotlarni, masalan, chekinishni tartibga solishi mumkin. Va versiyani boshqarish vositalaridan foydalanilganda, har bir kishi faylni yorliq sifatida yoki bo'sh joy sifatida chekingan holda saqlaganida, butun dahshatli tushni tasavvur qiling. Tahrirlashni faqat bitta usulda tekshirishi kerak bo'lgan odam uchun bu qanday bo'ladi, lekin yorliqlardagi bo'shliqlar to'g'rilanganligi sababli butun fayl o'zgaradi yoki aksincha. Tabiiyki, oddiy tilda bo'lgani kabi, uslub ham qaerda ishlatilishiga qarab farq qilishi mumkin. Misol uchun, Internetda siz Google Java Style Guide yoki Twitter Java Style Guide ni topishingiz mumkin . Ushbu sharh maqolasi uchun bizga test mavzusi kerak bo'ladi. Keling, Gradle loyihasini qurish tizimi xizmatidan foydalanaylik. Bu bizga tezkor boshlash uchun shablon yordamida yangi loyiha yaratish imkonini beradi. Gradle ajoyib plaginga ega: Build Init Plugin . Keling, yangi katalogga o'tamiz va u erda buyruqni bajaramiz: gradle init --type java-application Shundan so'ng IntelliJ Idea-ni ishga tushiring. Agar siz allaqachon ochiq loyihaga ega oynani ko'rsangiz (siz kod muharriri, loyiha tuzilmasi daraxtini ko'rasiz), yordamida ushbu loyihani yoping File -< Close Project. Endi xush kelibsiz oynada biz "Import Project"yangi loyihamizni bajaramiz va import qilamiz. Import qilishda bayroqni o'rnating "Use autoimport". Keling, zamonaviy rivojlanish vositalari yordamida hayotni qandaydir soddalashtirish mumkinligini aniqlaylik.

Ideada kodni formatlash

Loyihani import qilgandan so'ng, tugmalar birikmasini bosing Ctrl+Nva sinfga o'ting AppTest. Bu sinf standart sinov sinfidir. Bu shunday ko'rinadi:
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());
    }
}
Bu erda nima darhol e'tiboringizni tortadi? Xunuk ko'rinadigan bir qatorda usul deklaratsiyasiga ega annotatsiya rozi. Buni qanday tuzatish kerak? "Code"IntelliJ Idea-da turli xil kod manipulyatsiyalari uchun menyu bo'limi mavjud . Bunday manipulyatsiyalardan biri "Reformat Code"kalit birikmasi Ctrl + L. Qo'llashdan so'ng, izoh bir satrda, usulning o'zi esa boshqasida bo'ladi. Darhol ta'kidlash joizki, ushbu operatsiya tanlangan kod bo'limida amalga oshiriladi . Va agar bunday narsa bo'lmasa, formatlash jarayoni barcha tarkibda amalga oshiriladi. Keling, yangi sinov usulini qo'shamiz:
@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));
}
Va ikkita import:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Ko'rib turganingizdek, Stream-dagi operatsiya bitta satrda joylashgan. Ammo qo'ng'iroqlari zanjirlangan usullar har doim bir nuqtada yangi qatorlarga bo'linishiga ishonch hosil qilishni istasak nima bo'ladi? Bir tomondan, biz buni qo'lda qilishimiz mumkin. Ammo unutmangki, biz hamma narsa biz uchun ishlashini xohlaymiz. Axir, vaqti-vaqti bilan biz unutamiz va kod formati hamma joyda har xil bo'ladi va bu yaxshi emas. Ma'lum bo'lishicha, siz Idea formatlashni amalga oshiradigan qoidani tahrirlashingiz kerak. Menyuda Idea bandini tanlang File -> Settings(yoki ni bosing Ctrl + Alt + S). Sozlamalar oynasidagi qidiruv maydoniga "Kod uslubi" ni yozing. Kod uslubi bo'limida nafaqat Java uchun sozlamalarni belgilash mumkin. Ammo hozir biz Java-ga qiziqamiz. Ko'rib turganingizdek, sozlamalar bir nechta yorliqlarga bo'lingan. Eng foydalisi shundaki, o'zgartirish natijasi oynaning o'ng tomonidagi misolda ko'rsatiladi:
IntelliJ IDEA: Kod uslubi va formatlash - 2
Skrinshotda ko'rib turganingizdek, biz "Zanjirlangan usul chaqiruvlari" uchun sozlamani "har doim o'rash" deb belgilashimiz mumkin, ya'ni. har doim birlashtirilgan usul chaqiruvlari uchun bo'linadi. Endi testda formatlashni yana bosamiz va u haqiqatan ham ishlayotganini ko'ramiz! Ammo ba'zida shunday bo'ladiki, ba'zi kodlarni formatlashning umumiy qoidalaridan tashqarida formatlash zarurati paydo bo'ladi. Keling, formatlashni quyidagicha o'rnatamiz:
IntelliJ IDEA: Kod uslubi va formatlash - 3
Formatlashni o'chirib qo'yish uchun "Kod uslubi" bo'limida formatlashni o'chirish belgilarini qo'llab-quvvatlash yoqilgan bo'lishi kerak:
IntelliJ IDEA: Kod uslubi va formatlash - 4
Endi biz test kodini o'zgartirishimiz mumkin, shunda uning formatlanishi biz yozgan shaklda qoladi:
@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
}
Ha, agar e'tibor bersangiz: Tab tugmasini bosganingizda, Idea uni siz uchun bo'sh joy sifatida izohlaydi (standart xatti-harakatlar). Lekin buni Kod uslubida o'zgartirishingiz mumkin:
IntelliJ IDEA: Kod uslubi va formatlash - 5
Ko'rib turganingizdek, juda ko'p turli xil sozlamalar mavjud. Kod uslubi sozlamalari haqida ko'proq ma'lumotni bu yerda o'qishingiz mumkin: " Idea Help: Code Style ". Yana bir muhim formatlash xususiyati mavjud - import formatlash. U alohida bajariladi va chaqiriladi "Optimize Imports"va menyu bandida joylashgan Code -> Optimize Imports(Ctrl + Alt + O). Importni optimallashtirish keraksiz importlarni olib tashlaydi va ularni Java sozlamalari uchun Kod uslubidagi Importlar yorlig'idagi sozlamalarga muvofiq to'g'ri tartibga soladi. Bundan tashqari, agar siz formatlash avtomatik ravishda amalga oshirilishini istasangiz, yaxshi xabar shundaki, siz buni Saqlash Action plaginidan foydalanib qilishingiz mumkin .

Sozlamalarni jamoaga tarqatish

Ajoyib, biz yuqorida ko'rdikki, biz formatlash uslubini o'zimizga mos ravishda sozlashimiz mumkin. Ammo bu uslubni jamoada qanday ishlatish mumkin? Juda oddiy. Bir nechta variant mavjud. Eng oson yo'li - diagrammani saqlash. Fikr sozlamalarini Fayl -> Sozlamalar orqali oching (yoki Ctrl + Alt + S tugmalarini bosing). Kod uslubi bo'limida biz yozuv sxemasini ko'rishimiz mumkin. Bu bizning formatlash sxemamiz. Odatiy bo'lib, sxema Default nomi bilan ko'rsatilgan va uning yonida IDE izohi joylashgan: bu sozlama faqat bizning IDE uchun ekanligini anglatadi va u hech kimga ta'sir qilmaydi. "Maxsus" sxemani yaratish uchun "dublikat" qilish uchun o'ngdagi tugmani bosing va unga nom bering, masalan: JavaRush
IntelliJ IDEA: Kod uslubi va formatlash - 6
Shundan so'ng biz sozlamalarni import yoki eksport qilishimiz mumkin bo'ladi:
IntelliJ IDEA: Kod uslubi va formatlash - 7
Yana bir variant - Ideya sozlamalarini import qilish:
IntelliJ IDEA: Kod uslubi va formatlash - 8
Uchinchi variant - Sozlamalar ombori. Sozlamalar omboridan foydalanish boʻyicha qoʻshimcha maʼlumot olish uchun “IntelliJ Idea Help: Settings Repository ” hujjatiga qarang . Jamoada yagona uslubni tarqatish mavzusida men ham Eclipse IDE uslublarini yaxshi qo'llab-quvvatlashini ta'kidlay olmayman. Buning uchun siz alohida plaginni o'rnatishingiz kerak bo'ladi: Fayl -> Sozlamalar (Ctrl + Alt + S) orqali Idea sozlamalarini oching va Plaginlar bo'limiga o'ting. Yangi plaginlarni qidirish uchun tugmani bosing "Browse Repositories", shundan so'ng biz qidiruv oynasida Eclipse Code Formatter plaginini topamiz.
IntelliJ IDEA: Kod uslubi va formatlash - 9
Endi, o'rnatishdan so'ng, siz Idea-ni qayta ishga tushirishingiz kerak - bu standart protsedura. Shundan so'ng, xuddi shu joyda, Idea sozlamalarida biz yangi bo'limni topamiz: "Eclipse Code Formatter" Eclipse uchun format faylining namunasini bu erda topish mumkin . Bu shunday ko'rinadi:
IntelliJ IDEA: Kod uslubi va formatlash - 10

Qattiqlashuv talablari

Idea vositalaridan tashqari, siz talablarni kuchaytirish uchun tizim yaratish plaginlaridan ham foydalanishingiz mumkin. Biror kishi formatlashdan foydalanganligini tekshirishning hech qanday usuli yo'q. Agar jamoada 5 kishi bo'lsa, bu hali ham mumkin. Agar kompaniyada 100 kishi bo'lsa, bu haqiqiy emas. Ha, hatto beshtasini ham kuzatib borish qiyin bo'ladi. Va nega bunga vaqt sarflayapsiz? Agar ma'lum qoidalar buzilgan bo'lsa, loyihani yig'ishni taqiqlash ancha oson. Aslida, bu "Kodni tekshirish" deb nomlangan alohida mavzu. Ushbu maqolaning maqsadlari uchun men shunchaki uning qanday ishlashini ko'rsatmoqchiman. Gradle uchun eng keng tarqalgan plaginlardan biri (chunki u bizning loyihamizni to'playdi, agar esingizda bo'lsa) pmd . Uni yoqish uchun gradle loyihamizning qurish skriptiga (loyihamiz ildizidagi build.gradle fayli) o‘ting va qolgan plaginlar yonida pmd ni belgilang:

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'
}
Endi biz u erda batafsilroq sozlamalarni o'rnatishimiz mumkin:

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'
    ]
}
Bizning loyihamizda ham endi hamma narsa yaxshi emas. Keling, gradle build-ni ishga tushiramiz va xatoga yo'l qo'yamiz. Qizig'i shundaki, yig'ish paytida hisobot tuziladi. Va agar xatolar bo'lsa, biz quyidagi kabi xabarni olamiz:

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
Hisobotga o'tadigan bo'lsak, biz shunga o'xshash narsani ko'ramiz:
IntelliJ IDEA: Kod uslubi va formatlash - 11
Bundan tashqari, muammo ustunida pmd plaginining veb-saytidagi muammoning tavsifiga havola mavjud. Masalan, "headerCommentRequirement Required" xatosi uchun havola bu yerga o'tadi: pmd - CommentRequired . Bu xato bizning sinfimizda JavaDoc yo'qligiga ishora qiladi. JavaDoc ning sinflar ustida mavjudligi shablonlar yordamida sozlanishi mumkin:
IntelliJ IDEA: Kod uslubi va formatlash - 12
Fayl sarlavhasi uchun tarkibni belgilang:
IntelliJ IDEA: Kod uslubi va formatlash - 13
Shundan so'ng, biz App klassi ustidagi sharhni JavaDoc ga aylantirishimiz va yangi Build bilan xatolik yo'qolganligini ko'rishimiz mumkin.

Pastki chiziq

Kod uslubi samarali loyiha uchun muhimdir. Umumiy qoidalarga muvofiq yozilgan chiroyli kod - bu sizning hamkasblaringiz buni osonroq va tezroq tushunishi va siz haqingizda bir nechta mehrli so'zlarni aytmaslik kafolati. Zamonaviy rivojlanish vositalarini hisobga olgan holda, qoidalarga rioya qilish unchalik qiyin emas. Umid qilamanki, ushbu sharh haqiqatan ham shunday ekanligini ko'rsatdi. Odatdagidek, mavzu bo'yicha ozgina material: #Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION