JavaRush /Блоги Java /Random-TG /IntelliJ IDEA: Услуби код ва форматкунӣ
Viacheslav
Сатҳи

IntelliJ IDEA: Услуби код ва форматкунӣ

Дар гурӯҳ нашр шудааст
Воситаҳои муосир раванди рушдро осон мекунанд. Аз ҷумла, назорат кардани услуби codeи шумо осонтар аст ва кӯшиш кунед, ки форматкунии "беиҷозат"-и онро кам кунед. Дар ин барраси, ман пешниҳод мекунам, ки бо кадом асбобҳое шинос шавам, ки IntelliJ Idea IDE ба таҳиягар пешкаш мекунад, то codeро барои хондан гуворо ва осон фаҳмад.
IntelliJ IDEA: услуби code ва форматкунӣ - 1

Муқаддима

Забони барномасозӣ ба забоне, ки одамон ҳарф мезананд, хеле монанд аст. Ягона тафовут дар он аст, ки ин забони махсусест, ки дар аввал барои муошират бо компютер истифода мешавад, то ба он чизе бифаҳмем, ки мо аз он чӣ мехоҳем. Аммо бо компютер муоширати як ба як вуҷуд дошта наметавонад. Ҳатто вақте ки шумо ба омӯзиши забони барномасозӣ шурӯъ кардед, шумо ба китоб ё манбаи таълимӣ, ба монанди JavaRush назар мекардед. Ва дар ин манбаъ шумо codeеро дидед, ки компютер онро мефаҳмад. Аммо шумо инчунин бояд онро ҳангоми гирифтани дониши забони Java дарк кунед. Мисли ҳама забонҳо, барномасозӣ барои ташаккули code баъзе қоидаҳо дорад. Масалан, бо девор навиштан дар ҷомеаи хушмуомила одоби бад ҳисобида мешавад ва дар Java бо ҳарфи калон даъват кардани усул вайронкунии дағалонаи услуби рамз аст. Қоидаҳои форматкунии codeи Java дар ҳуҷҷати Java Code Convention таҳия шудаанд . Илова бар ин, услуби code метавонад тафсилоти хурдтарро танзим кунад, ба монанди абзор. Ва ҳангоме ки абзорҳои идоракунии version истифода мешаванд, тасаввур кунед, ки ҳама даҳшатоваранд, вақте ки ҳама як файлро ҳамчун ҷадвал ё ҳамчун фосила захира мекунанд. Ин барои касе, ки бояд таҳрирро танҳо бо як усул тафтиш кунад, чӣ гуна хоҳад буд, аммо тамоми файл аз ҳисоби ислоҳи ҷойҳо ба ҷадвалҳо ё баръакс тағир дода мешавад. Табиист, ки мисли забони маъмулӣ, услуб вобаста ба ҷои истифода шудани он метавонад фарқ кунад. Масалан, дар Интернет шумо метавонед Google Java Style Guide ё Twitter Java Style Guide -ро пайдо кунед . Барои ин мақолаи барраси ба мо мавзӯи санҷиш лозим аст. Биёед аз хидмати системаи сохтани лоиҳаи Gradle истифода барем. Он ба мо имкон медиҳад, ки лоиҳаи навро бо истифода аз қолаб барои оғози зуд эҷод кунем. Gradle як плагини олӣ дорад: Сохтани Init Plugin . Биёед ба директорияи нав равем ва дар он ҷо фармонро иҷро кунем: gradle init --type java-application Пас аз он, IntelliJ Idea -ро оғоз кунед. Агар шумо равзанаи дорои лоиҳаи аллакай кушодашударо бинед (шумо муҳаррири code, дарахти сохтори лоиҳаро хоҳед дид), ин лоиҳаро бо истифода аз пӯшед File -< Close Project. Ҳоло дар равзанаи истиқбол мо "Import Project"лоиҳаи нави худро иҷро ва ворид мекунем. Ҳангоми воридот, парчамро насб кунед "Use autoimport". Биёед бифаҳмем, ки оё бо ёрии асбобҳои муосири рушд ҳаётро бо ягон роҳ содда кардан мумкин аст.

Форматкунии code дар 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. Пас аз дархост, эзоҳ дар як сатр ва худи усул дар сатри дигар хоҳад буд. Дарҳол бояд қайд кард, ки ин амалиёт дар қисмати интихобшудаи code иҷро карда мешавад . Ва агар чунин чизе набошад, амалиёти форматкунӣ дар ҳама мундариҷа иҷро карда мешавад. Биёед ҳоло усули нави санҷишро илова кунем:
@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 дар як сатр ҷойгир карда шудааст. Аммо чӣ мешавад, агар мо мехоҳем боварӣ ҳосил кунем, ки усулҳое, ки зангҳояшон занҷир аст, ҳамеша дар як нуқта ба хатҳои нав тақсим мешаванд? Аз як тараф, мо ин корро дастй карда метавонем. Аммо дар хотир доред, ки мо мехоҳем, ки ҳама чиз барои мо кор кунад. Охир, гох-гох фаромуш мекунем ва формати code дар хама чо дигар мешавад ва ин хуб нест. Маълум мешавад, ки шумо бояд қоидаеро таҳрир кунед, ки тавассути он Idea форматкуниро иҷро мекунад. Дар меню банди Идеяро интихоб кунед File -> Settings(ё клик кунед Ctrl + Alt + S). Дар майдони ҷустуҷӯ дар равзанаи танзимот "Услуби code" -ро нависед. Дар қисмати услуби code танзимотро на танҳо барои Java муайян кардан мумкин аст. Аммо ҳоло мо ба Java таваҷҷӯҳ дорем. Тавре ки шумо мебинед, танзимот ба якчанд ҷадвалҳо тақсим карда мешаванд. Аз ҳама муфид он аст, ки натиҷаи тағирот дар мисол дар тарафи рости тиреза нишон дода мешавад:
IntelliJ IDEA: Услуби code ва форматкунӣ - 2
Тавре ки шумо дар скриншот мебинед, мо метавонем танзимоти "Зангҳои усули занҷирӣ" -ро ҳамчун "ҳамеша печонед", яъне. ҳамеша барои зангҳои усули якҷоя тақсим карда мешавад. Акнун биёед форматро дар санҷиш бори дигар пахш кунем ва бубинем, ки он воқеан кор мекунад! Аммо баъзан чунин мешавад, ки зарурати формат кардани баъзе codeҳо берун аз қоидаҳои умумии форматкунӣ вуҷуд дорад. Биёед форматкуниро ба таври зерин танзим кунем:
IntelliJ IDEA: Услуби code ва форматкунӣ - 3
Барои ғайрифаъол кардани форматкунӣ, дастгирӣ барои хомӯш кардани аломатҳои форматкунӣ бояд дар қисмати услуби code фаъол карда шавад:
IntelliJ IDEA: Услуби code ва форматкунӣ - 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 тағир диҳед:
IntelliJ IDEA: Услуби code ва форматкунӣ - 5
Тавре ки шумо мебинед, як қатор танзимотҳо мавҷуданд. Шумо метавонед бештар дар бораи танзимоти услуби codeро дар ин ҷо хонед: " Кӯмаки идея: Услуби code ". Боз як хусусияти муҳими форматкунӣ вуҷуд дорад - форматкунии воридот. Он алоҳида иҷро карда мешавад ва даъват карда мешавад "Optimize Imports"ва дар банди меню ҷойгир аст Code -> Optimize Imports(Ctrl + Alt + O). Оптимизатсияи воридот воридоти нолозимро нест мекунад ва инчунин онҳоро мувофиқи танзимот дар ҷадвали Воридоти услуби code барои танзимоти Java ба тартиби дуруст мегузорад. Инчунин, агар шумо хоҳед, ки форматкунӣ ба таври худкор сурат гирад, хушхабар ин аст, ки шумо метавонед онро бо истифода аз плагини Save Actions иҷро кунед .

Тақсим кардани танзимот ба даста

Аҷоиб, мо дар боло дидем, ки мо метавонем услуби форматкуниро барои мувофиқи худ танзим кунем. Аммо ин услубро дар коллектив чй тавр истифода бурдан мумкин аст? Хеле содда. Якчанд вариант вуҷуд дорад. Осонтаринаш захира кардани диаграмма аст. Танзимоти идеяро тавассути Файл -> Танзимот кушоед (ё Ctrl + Alt + S -ро пахш кунед). Дар бахши услуби code мо метавонем Схемаи навиштаҷотро бинем. Ин нақшаи форматкунии мост. Бо нобаёнӣ, схема бо номи Default муайян карда мешавад ва дар паҳлӯи он шарҳи IDE аст: ин маънои онро дорад, ки ин танзимот танҳо барои IDE-и мост ва он ба касе таъсир намекунад. Барои сохтани нақшаи "муштарӣ" тугмаи ростро пахш карда "дубликат" созед ва ба он ном диҳед, масалан: JavaRush
IntelliJ IDEA: Услуби code ва форматкунӣ - 6
Пас аз ин мо метавонем танзимотро ворид ё содир кунем:
IntelliJ IDEA: Услуби code ва форматкунӣ - 7
Варианти дигар воридоти танзимоти Idea аст:
IntelliJ IDEA: Услуби code ва форматкунӣ - 8
Варианти сеюм Анбори Танзимот аст. Барои маълумоти бештар дар бораи истифодаи анбори танзимот, ба ҳуҷҷатҳои "IntelliJ Idea Help: Repository Settings " нигаред. Дар мавзӯи паҳн кардани як услуб дар даста, ман инчунин наметавонам дастгирии хуби услубҳоро аз Eclipse IDE қайд кунам. Барои ин ба шумо лозим меояд, ки плагини алоҳида насб кунед: танзимоти идеяро тавассути Файл -> Танзимотҳо (Ctrl + Alt + S) кушоед ва ба бахши Васлкунакҳо гузаред. Барои ҷустуҷӯи плагинҳои нав, тугмаро пахш кунед "Browse Repositories", пас аз он мо плагини Eclipse Code Formatterро дар равзанаи ҷустуҷӯ пайдо хоҳем кард.
IntelliJ IDEA: Услуби code ва форматкунӣ - 9
Акнун, пас аз насб, шумо бояд Idea-ро бозоғоз кунед - ин тартиби муқаррарӣ аст. Пас аз он, дар ҳамон ҷо, дар танзимоти Idea, мо қисмати навро пайдо хоҳем кард: "Formatter Code Eclipse" Намунаи файли формат барои Eclipse дар ин ҷо пайдо мешавад . Он чизе монанди ин хоҳад буд:
IntelliJ IDEA: Услуби code ва форматкунӣ - 10

Талаботи пурзӯр

Илова ба абзорҳои Idea, шумо инчунин метавонед плагинҳои системаро барои пурзӯр кардани талабот истифода баред. Ягон роҳи тафтиш кардани он, ки шахс форматро истифода кардааст, вуҷуд надорад. Агар дар даста 5 нафар бошанд, ин имконпазир аст. Агар ширкат 100 нафар дошта бошад, ин ғайривоқеист. Бале, ҳатто панҷ нафарро пайгирӣ кардан душвор хоҳад буд. Ва чаро вақтро барои ин беҳуда сарф мекунанд? Дар сурати вайрон кардани қоидаҳои муайян манъ кардани ҷамъоварии лоиҳа хеле осонтар аст. Дар асл, ин як мавзӯи алоҳида бо номи "Кодекси тафтиш" аст. Барои мақсадҳои ин мақола, ман танҳо мехоҳам нишон диҳам, ки он чӣ гуна кор мекунад. Яке аз плагинҳои маъмултарин барои Gradle (зеро он лоиҳаи моро ҷамъ меорад, агар дар хотир доред) pmd мебошад . Барои фаъол кардани он, танҳо ба скрипти сохтани лоиҳаи 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: Услуби code ва форматкунӣ - 11
Ғайр аз он, дар сутуни мушкилот истинод ба тавсифи мушкилот дар вебсайти плагини pmd мавҷуд аст. Масалан, барои хатогии "headerCommentRequirement Required" истиноди ин ҷо меравад: pmd - CommentRequired . Ин хато ба мо ишора мекунад, ки синфи мо JavaDoc надорад. Мавҷудияти JavaDoc дар синфҳо метавонад бо истифода аз қолабҳо танзим карда шавад:
IntelliJ IDEA: Услуби code ва форматкунӣ - 12
Ва мундариҷаи сарлавҳаи файлро муайян кунед:
IntelliJ IDEA: Услуби code ва форматкунӣ - 13
Пас аз ин, мо метавонем шарҳи болои синфи Барномаро ба JavaDoc табдил диҳем ва бо сохтани нав бубинем, ки хатогӣ аз байн рафтааст.

Хатти поён

Услуби code барои лоиҳаи самаранок муҳим аст. Рамзи зебое, ки мувофиқи қоидаҳои умумӣ навишта шудааст, кафолати он аст, ки ҳамкасбони шумо онро осонтар ва зудтар мефаҳманд ва дар бораи шумо чанд суханони меҳрубонона намегӯянд. Бо назардошти воситаҳои муосири рушд, риояи қоидаҳо он қадар душвор нест. Ман умедворам, ки ин барраси нишон дод, ки ин воқеан чунин аст. Хуб, чун маъмул, як маводи каме дар бораи мавзӯъ: #Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION