JavaRush /Blog Java /Random-PL /IntelliJ IDEA: styl i formatowanie kodu
Viacheslav
Poziom 3

IntelliJ IDEA: styl i formatowanie kodu

Opublikowano w grupie Random-PL
Nowoczesne narzędzia ułatwiają proces rozwoju. W szczególności łatwiej jest monitorować styl swojego kodu, starając się minimalizować jego „nieautoryzowane” formatowanie. W tej recenzji proponuję zapoznać się z tym, jakie narzędzia udostępnia programiście IntelliJ Idea IDE, aby kod był przyjemny w czytaniu i łatwy do zrozumienia.
IntelliJ IDEA: styl i formatowanie kodu - 1

Wstęp

Język programowania jest bardzo podobny do języka, którym posługują się ludzie. Jedyną różnicą jest to, że jest to specjalny język, który początkowo służy do komunikacji z komputerem, aby wyjaśnić mu, czego od niego chcemy. Jednak komunikacja jeden na jeden z komputerem nie jest możliwa. Nawet gdy zaczynałeś uczyć się języka programowania, przeglądałeś książkę lub inne zasoby edukacyjne, takie jak JavaRush. W tym źródle widziałeś kod, który zrozumie komputer. Ale powinieneś to także zrozumieć, gdy zdobędziesz wiedzę o języku Java. Jak w każdym języku, programowanie ma pewne zasady tworzenia kodu. Na przykład pisanie z płotem w uprzejmym towarzystwie jest uważane za złe maniery, a w Javie wywoływanie metody wielką literą jest rażącym naruszeniem stylu kodu. Zasady formatowania kodu Java są sformułowane w dokumencie Java Code Convention . Ponadto styl kodu może regulować mniejsze szczegóły, takie jak wcięcia. A kiedy używane są narzędzia kontroli wersji, wyobraźcie sobie cały koszmar, gdy wszyscy zapisują plik z wcięciem jako tabulator lub z wcięciem jako spacja. Jak to będzie wyglądać dla kogoś, kto będzie musiał sprawdzić edycję tylko w jeden sposób, ale cały plik zostanie zmieniony w wyniku korekty spacji na tabulatory i odwrotnie. Oczywiście, podobnie jak w przypadku zwykłego języka, styl może się różnić w zależności od tego, gdzie jest używany. Na przykład w Internecie można znaleźć Przewodnik po stylu Java Google lub Przewodnik po stylu Java na Twitterze . Do tego artykułu przeglądowego będziemy potrzebować obiektu testowego. Skorzystajmy z usługi systemu budowania projektów Gradle. Pozwoli nam to na szybkie utworzenie nowego projektu przy użyciu szablonu. Gradle ma świetną wtyczkę: Build Init Plugin . Przejdźmy do nowego katalogu i wykonaj tam polecenie: gradle init --type java-application Następnie uruchom IntelliJ Idea. Jeśli zobaczysz okno z już otwartym projektem (zobaczysz edytor kodu, drzewo struktury projektu), zamknij ten projekt za pomocą File -< Close Project. Teraz w oknie powitalnym wykonamy "Import Project"i zaimportujemy nasz nowy projekt. Podczas importowania ustaw flagę "Use autoimport". Zastanówmy się, czy można w jakiś sposób uprościć życie za pomocą nowoczesnych narzędzi programistycznych.

Formatowanie kodu w Idea

Po zaimportowaniu projektu naciśnij kombinację klawiszy Ctrl+Ni przejdź do zajęć AppTest. Ta klasa jest domyślną klasą testową. To wygląda tak:
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());
    }
}
Co od razu rzuca się tutaj w oczy? Adnotacja z deklaracją metody w jednej linii, która wygląda brzydko, zgadza się. Jak to naprawić? IntelliJ Idea ma sekcję menu "Code"umożliwiającą różne manipulacje kodem. Jedną z takich manipulacji jest "Reformat Code"kombinacja klawiszy Ctrl + L. Po zastosowaniu adnotacja będzie w jednej linii, a sama metoda w drugiej. Warto od razu zaznaczyć, że operacja ta wykonywana jest na wybranym fragmencie kodu . A jeśli czegoś takiego nie ma, operacja formatowania zostanie przeprowadzona na całej zawartości. Dodajmy teraz nową metodę testową:
@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));
}
I dwa importy:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Jak widać, operacja na Streamie jest umieszczona w jednej linii. Ale co, jeśli chcemy mieć pewność, że metody, których wywołania są połączone łańcuchowo, są zawsze dzielone w punktach na nowe linie? Z jednej strony możemy to zrobić ręcznie. Pamiętaj jednak, że chcemy, żeby wszystko nam służyło. W końcu od czasu do czasu zapomnimy, a format kodu będzie wszędzie inny, a to nie jest dobre. Okazuje się, że trzeba edytować regułę według której Idea wykonuje formatowanie. Wybierz z menu opcję Pomysł File -> Settings(lub kliknij Ctrl + Alt + S). W polu wyszukiwania w oknie ustawień wpisz „Styl kodu”. W sekcji Styl kodu można określić ustawienia nie tylko dla Javy. Ale teraz jesteśmy zainteresowani Javą. Jak widać, ustawienia podzielone są na kilka zakładek. Najbardziej przydatne jest to, że wynik zmiany zostanie pokazany na przykładzie po prawej stronie okna:
IntelliJ IDEA: styl i formatowanie kodu — 2
Jak widać na zrzucie ekranu, możemy określić ustawienie „Łańcuchowych wywołań metod” jako „zawijaj zawsze”, tj. zawsze dzielone dla scalonych wywołań metod. Teraz wciśnijmy ponownie formatowanie w teście i przekonajmy się, że to naprawdę działa! Ale czasami zdarza się, że istnieje potrzeba sformatowania jakiegoś kodu poza ogólnymi zasadami formatowania. Skonfigurujmy formatowanie w następujący sposób:
IntelliJ IDEA: styl i formatowanie kodu — 3
Aby umożliwić wyłączenie formatowania, w sekcji Styl kodu musi być włączona obsługa znaczników wyłączania formatowania:
IntelliJ IDEA: styl i formatowanie kodu — 4
Teraz możemy zmienić kod naszego testu, aby jego formatowanie pozostało w formie, w jakiej go zapisaliśmy:
@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
}
Tak, jeśli zauważysz: kiedy naciśniesz klawisz Tab, Idea zinterpretuje to jako spację (zachowanie domyślne). Ale możesz to zmienić tam w stylu kodu:
IntelliJ IDEA: styl i formatowanie kodu — 5
Jak widać, istnieje ogromna różnorodność ustawień. Więcej o ustawieniach stylu kodu możesz przeczytać tutaj: „ Pomoc dotycząca pomysłu: Styl kodu ”. Istnieje jeszcze jedna ważna funkcja formatowania — formatowanie importu. Jest wykonywany osobno i jest wywoływany "Optimize Imports"i znajduje się w pozycji menu Code -> Optimize Imports(Ctrl + Alt + O). Optymalizacja importu usuwa niepotrzebne importy, a także umieszcza je we właściwej kolejności, zgodnie z ustawieniami na karcie Importy w ustawieniach Styl kodu dla Java. Ponadto, jeśli chcesz, aby formatowanie odbywało się automatycznie, dobrą wiadomością jest to, że możesz to zrobić za pomocą wtyczki Zapisz działania .

Dystrybucja ustawień do zespołu

Świetnie, widzieliśmy powyżej, że możemy dostosować styl formatowania do naszych potrzeb. Ale jak można wykorzystać ten styl w zespole? Bardzo prosta. Istnieje kilka opcji. Najłatwiej jest zapisać diagram. Otwórz ustawienia pomysłu poprzez Plik -> Ustawienia (lub naciśnij Ctrl + Alt + S). W sekcji Styl kodu możemy zobaczyć napis Schemat. To jest nasz schemat formatowania. Domyślnie schemat jest określony z nazwą Domyślny i obok niej adnotacją IDE: oznacza to, że to ustawienie jest tylko dla naszego IDE i nikogo nie dotyczy. Aby stworzyć „niestandardowy” schemat, kliknij przycisk po prawej stronie, aby utworzyć „duplikat” i nadać mu nazwę, na przykład: JavaRush
IntelliJ IDEA: styl i formatowanie kodu — 6
Następnie będziemy mogli zaimportować lub wyeksportować ustawienia:
IntelliJ IDEA: styl i formatowanie kodu — 7
Inną opcją jest zaimportowanie ustawień importu pomysłu:
POMYSŁ IntelliJ: Styl i formatowanie kodu — 8
Trzecią opcją jest Repozytorium ustawień. Więcej informacji na temat korzystania z Repozytorium ustawień można znaleźć w dokumentacji „Pomoc IntelliJ Idea: Repozytorium ustawień ”. Jeśli chodzi o dystrybucję jednego stylu w zespole, nie mogę również nie zauważyć dobrego wsparcia dla stylów z Eclipse IDE. Aby to zrobić, musisz zainstalować osobną wtyczkę: otwórz ustawienia Idea poprzez Plik -> Ustawienia (Ctrl + Alt + S) i przejdź do sekcji Wtyczki. Aby wyszukać nowe wtyczki należy kliknąć przycisk "Browse Repositories", po czym w oknie wyszukiwania znajdziemy wtyczkę Eclipse Code Formatter.
IntelliJ IDEA: styl i formatowanie kodu — 9
Teraz po instalacji należy ponownie uruchomić Idea – jest to standardowa procedura. Następnie w tym samym miejscu w ustawieniach Idea znajdziemy nową sekcję: „Eclipse Code Formatter” Przykładowy plik formatu dla Eclipse znajdziesz tutaj . Będzie to wyglądać mniej więcej tak:
IntelliJ IDEA: styl i formatowanie kodu — 10

Wymagania dotyczące dokręcania

Oprócz narzędzi Idea możesz także użyć wtyczek do systemu kompilacji, aby zaostrzyć wymagania. Nie ma możliwości sprawdzenia, czy dana osoba użyła formatowania. Jeśli w zespole jest 5 osób, jest to nadal możliwe. Jeśli firma zatrudnia 100 osób, jest to nierealne. Tak, nawet pięć będzie trudnych do wyśledzenia. I po co tracić na to czas? O wiele łatwiej jest zakazać odbioru projektu, jeśli zostaną naruszone określone zasady. W rzeczywistości jest to zupełnie osobny temat zatytułowany „Sprawdź kod”. Na potrzeby tego artykułu chcę tylko pokazać, jak to działa. Jedną z najpopularniejszych wtyczek do Gradle (ponieważ gromadzi nasz projekt, jeśli pamiętasz) jest pmd . Aby to włączyć, wystarczy przejść do skryptu kompilacji naszego projektu gradle (plik build.gradle w katalogu głównym naszego projektu) i wpisać w nim pmd obok pozostałych wtyczek:

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'
}
Teraz możemy tam ustawić bardziej szczegółowe ustawienia:

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'
    ]
}
Nawet w naszym projekcie nie wszystko jest już dobrze. Uruchommy kompilację gradle i otrzymamy błąd. Fajne jest to, że podczas montażu generowany jest raport. A jeśli wystąpią błędy, otrzymamy komunikat typu:

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
Jeśli przejdziemy do raportu, zobaczymy coś takiego:
POMYSŁ IntelliJ: Styl i formatowanie kodu — 11
Ponadto w kolumnie Problem znajduje się odnośnik do opisu problemu na stronie wtyczki pmd. Na przykład w przypadku błędu „headerCommentRequirement Requirement” link prowadzi tutaj: pmd - CommentRequired . Ten błąd wskazuje nam, że nasza klasa nie ma JavaDoc. Obecność JavaDoc w klasach można skonfigurować za pomocą szablonów:
IntelliJ IDEA: styl i formatowanie kodu — 12
I określ zawartość nagłówka pliku:
POMYSŁ IntelliJ: Styl i formatowanie kodu — 13
Następnie możemy przekształcić komentarz nad klasą App w dokument JavaDoc i sprawdzić w nowej kompilacji, czy błąd zniknął.

Konkluzja

Styl kodu jest ważny dla produktywnego projektu. Piękny kod napisany według ogólnych zasad to gwarancja, że ​​Twoi współpracownicy łatwiej i szybciej go zrozumieją i nie powiedzą o Tobie kilku czułych rzeczy. Biorąc pod uwagę nowoczesne narzędzia programistyczne, trzymanie się zasad nie jest takie trudne. Mam nadzieję, że ta recenzja pokazała, że ​​rzeczywiście tak jest. No cóż, jak zwykle trochę materiału na ten temat: #Wiaczesław
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION