CodeGym /Blog Java /Random-PL /IntelliJ IDEA: Styl kodowania i formatowanie kodu
Autor
Oleksandr Miadelets
Head of Developers Team at CodeGym

IntelliJ IDEA: Styl kodowania i formatowanie kodu

Opublikowano w grupie Random-PL
Język programowania jest bardzo podobny do języka mówionego. Jedyną różnicą jest to, że jest to specjalny język, którego głównym celem jest ułatwienie komunikacji z komputerem w celu wyjaśnienia komputerowi, co chcemy, aby zrobił. Ale nie możesz prowadzić osobistej rozmowy z komputerem. Kiedy zaczynałeś uczyć się języka programowania, przeglądałeś książki lub inne zasoby edukacyjne, takie jak CodeGym. A ten zasób pokazał ci kod, który rozumie komputer. Ale ty też powinieneś to zrozumieć, gdy poznasz język Java. Jak w każdym języku, w programowaniu przyjęto pewne konwencje formatowania. Na przykład w kulturalnym społeczeństwie pisanie w ten sposób byłoby uważane za złe maniery. A w Javie rozpoczynanie nazwy metody wielką literą jest rażącym naruszeniem konwencji kodowania. IntelliJ IDEA: Styl kodowania i formatowanie kodu - 1Zasady dotyczące kodu Java są podane w dokumencie Code Conventions for the Java Programming Language . Konwencje kodowania mogą również regulować mniejsze szczegóły, takie jak wcięcia. Wyobraź sobie całkowity koszmar, jakim stałaby się kontrola wersji, gdyby wcięcia były niespójne, niektórzy ludzie używali tabulatorów, a inni spacji. Co by to było dla kogoś, kto musi zaewidencjonować poprawkę tylko jedną metodą, ale stwierdza, że ​​cały plik został zmieniony z powodu różnic w spacjach i tabulatorach? Oczywiście, podobnie jak w przypadku języka potocznego, konwencje mogą się zmieniać w zależności od tego, gdzie używany jest dany język. Na przykład w rozległych przestrzeniach sieci można znaleźć przewodnik po stylach Google Java i przewodnik po stylach Java na Twitterze. Do tej recenzji potrzebujemy obiektu testowego. Wykorzystamy system automatyzacji kompilacji Gradle. Pozwoli nam to szybko rozpocząć tworzenie nowego projektu z szablonu. Gradle ma świetną wtyczkę: Build Init Plugin . Przejdźmy do nowego katalogu i uruchommy tam następującą komendę: gradle init --type java-application Następnie uruchommy IntelliJ IDEA. Jeśli widzisz okno z otwartym projektem (tj. widzisz edytor kodu i drzewo projektu), zamknij ten projekt za pomocą File -> Close Project. Teraz w oknie powitalnym uruchom „ Import Project” i zaimportuj nasz nowy projekt. Podczas importowania zaznacz Use autoimportpole wyboru „ ”. Zastanówmy się, czy możemy użyć najnowocześniejszych narzędzi programistycznych, aby w jakiś sposób uprościć życie.

Formatowanie kodu w IDEA

Po zaimportowaniu projektu naciśnij Ctrl+N i przejdź do AppTestklasy. To jest domyślna klasa testowa. 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ę w oczy? Adnotacja w tej samej linii co deklaracja metody, która wygląda brzydko, prawda? Jak to naprawić? IntelliJ IDEA ma Codepozycję menu „ ” do różnych manipulacji kodem. Jedną z takich manipulacji jest „ Reformat Code”, którą można zastosować za pomocą Ctrl+L. Gdy to zrobisz, adnotacja będzie w jednym wierszu, a deklaracja metody w innym. Warto od razu zaznaczyć, że operacja ta wykonywana jest na aktualnie wybranym kodzie . Jeśli nie ma wyboru, operacja formatowania jest wykonywana na wszystkim. Teraz dodajmy nową metodę testową:

 @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));
 }
I dwa importy:

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Jak widać, operacja na Strumieniu odbywa się w jednej linii. Ale co, jeśli chcemy się upewnić, że łańcuchowe wywołania metod są zawsze dzielone na nowe wiersze w każdym operatorze kropki? Moglibyśmy to zrobić ręcznie. Pamiętaj jednak, że chcemy, aby wszystko działo się automatycznie. Rzeczywiście, od czasu do czasu z pewnością zapomnimy o ręcznym kroku, a potem wszędzie będziemy mieć różne formatowanie, a to nie jest dobre. Musimy więc edytować regułę używaną przez IDEA do formatowania. WybieraćFile -> Settingsw menu POMYSŁ (lub naciśnij Ctrl+Alt+S). Wpisz „Styl kodu” w polu wyszukiwania w oknie ustawień. W sekcji „Styl kodu” możesz określić ustawienia dla większej liczby języków niż tylko Java. Ale teraz interesuje nas Java. Jak widać, ustawienia podzielone są na kilka zakładek. Bardzo przydatną funkcją jest to, że przykład operacji jest pokazany w prawej części okna: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 2Zrzut ekranu pokazuje, że możemy ustawić „Łańcuchowe wywołania metod” na „zawsze zawijaj”, tj. zawsze rozdzielaj wywołania metod łańcuchowych na osobne linie. Teraz ponownie klikamy przycisk formatowania w klasie testowej i widzimy, że to naprawdę działa! Ale czasami trzeba sformatować jakiś kod poza standardowymi regułami formatowania. Skonfiguruj formatowanie w następujący sposób: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 3Aby zapobiec formatowaniu, w sekcji „Styl kodu” włącz znaczniki formatera: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 4Teraz możemy zmienić naszą klasę testową, aby jej kod nie był przeformatowany:

 @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
 }
Być może zauważyłeś, że po naciśnięciu Tab IDEA interpretuje to jako spację (jest to zachowanie domyślne). Ale możesz to zmienić w Code Stylesekcji „ ”: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 5Jak widać, jest tam wiele ustawień. Możesz przeczytać więcej szczegółów na temat Code styleustawień „ ” tutaj: „ POMOC IDEA: Styl kodu ”. Jest jeszcze jedna ważna funkcja formatowania: formatowanie importu. Ta operacja jest wykonywana oddzielnie i nosi nazwę „ Optimize Imports”. Znajduje się pod Code -> Optimize Imports(Ctrl+Alt+O). Optymalizacja importu usuwa niepotrzebne importy i porządkuje importy we właściwej kolejności, zgodnie z ustawieniami w Importszakładce „ ” Code Styleustawień „ ” dla Javy. Co więcej, jeśli chcesz, aby to formatowanie odbywało się automatycznie, mamy dobrą wiadomość:Wtyczka Save Actions .

Dystrybucja ustawień w poleceniu

Widzieliśmy powyżej, że możesz dostosować swój styl formatowania w dowolny sposób. Ale jak wykorzystać ten styl w zespole? Bardzo łatwo. Istnieje kilka opcji. Najprościej jest zapisać schemat stylu kodu. Otwórz ustawienia IDEA za pomocą File -> Settings(lub naciśnij Ctrl+Alt+S). W Code Stylesekcji „ ” widzimy „Schemat”. To jest nasz schemat formatowania. Domyślnie używany jest schemat „Domyślny” i jest on oznaczony jako „IDE”, co oznacza, że ​​to ustawienie dotyczy tylko naszego IDE — nie wpływa na nikogo innego. Aby wykonać „niestandardowy” schemat, użyj przycisku po prawej stronie, aby zrobić kopię i nadać jej nazwę, na przykład: CodeGym IntelliJ IDEA: Styl kodowania i formatowanie kodu - 6Następnie możemy zaimportować lub wyeksportować ustawienia: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 7 Inną opcją jest zaimportowanie ustawień IDEA: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 8Trzecią opcją jest Repozytorium ustawień. Aby skorzystać z repozytorium ustawień, zapoznaj się z dokumentacją pomocy IntelliJ IDEA, aby uzyskać więcej informacji pod następującym linkiem: Repozytorium ustawień „. Mówiąc o wprowadzaniu ujednoliconego stylu w zespole, nie mogę nie wspomnieć o dobrym wsparciu dla stylów z Eclipse IDE. Aby to zrobić, musisz zainstalować oddzielną wtyczkę: otwórz ustawienia IDEA za pomocą Plik -> Ustawienia (Ctrl+Alt+S) i przejdź do sekcji „Wtyczki". Aby znaleźć nowe wtyczki, kliknij przycisk „ ". Browse RepositoriesNastępnie znajdź wtyczkę Eclipse Code Formatter w oknie wyszukiwania. IntelliJ IDEA: Styl kodowania i formatowanie kodu - 9Po jej zainstalowaniu będziesz musiał ponownie uruchomić IDEA — to standardowa procedura. Teraz wszystko jest gotowe. W ustawieniach IDEA pojawiła się nowa sekcja: „Eclipse Code Formatter”.. Będzie wyglądać mniej więcej tak: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 10

Bardziej rygorystyczne wymagania

Oprócz narzędzi IDEA możesz również użyć wtyczek do automatyzacji kompilacji, aby zaostrzyć wymagania. Nie ma możliwości ręcznego sprawdzenia, czy ktoś użył odpowiedniego formatowania. Może mógłbyś z 5 osobami w zespole. Ale przy 100 osobach w firmie nie jest to realistyczne. A nawet pięć będzie trudne do wyśledzenia. I po co marnować czas na to wszystko? Znacznie łatwiej byłoby uniemożliwić budowę projektu, gdyby zasady zostały naruszone. W rzeczywistości jest to cały osobny temat o nazwie „Inspekcja kodu”. W tym artykule chcę tylko pokazać, jak to działa. Jedną z najpopularniejszych wtyczek Gradle (ponieważ, jak zapewne pamiętasz, buduje nasz projekt) jest pmd. Aby ją włączyć, po prostu przejdź do skryptu kompilacji naszego projektu Gradle (plik build.gradle w katalogu głównym naszego projektu) i dodaj do niego 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 wprowadzić bardziej szczegółowe ustawienia w tym samym miejscu:

 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 nasz projekt jest teraz zepsuty. Uruchom gradle buildi otrzymujemy błąd. Fajną rzeczą jest to, że raport jest generowany podczas kompilacji. A jeśli są błędy, otrzymujemy taki komunikat:

 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
Przechodząc do raportu, widzimy coś takiego: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 11Ponadto w Problemkolumnie „ ” znajduje się link do opisu problemu na stronie wtyczki pmd. Na przykład w przypadku headerCommentRequirement Requiredbłędu „ ” link prowadzi tutaj: pmd — CommentRequired . Ten błąd jest wskazówką, że nasza klasa nie ma JavaDoc. Możemy użyć szablonów do skonfigurowania JavaDoc powyżej klas: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 12I określić zawartość dla File Header: IntelliJ IDEA: Styl kodowania i formatowanie kodu - 13Następnie możemy zamienić komentarz nad klasą App w JavaDoc i zobaczyć, że błąd zniknął w nowej kompilacji.

Najważniejsze

Styl kodu jest ważny dla maksymalizacji produktywności projektu. Piękny kod napisany według wspólnych zasad gwarantuje, że Twoi współpracownicy łatwiej i szybciej go zrozumieją i nie będą Cię krytykować. Dzięki nowoczesnym narzędziom programistycznym nie jest tak trudno trzymać się zasad stylu. Mam nadzieję, że ta recenzja udowodniła Ci, że to prawda. Zgodnie z tradycją, oto trochę dodatkowych materiałów na ten temat:
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION