Przewiń do głównej treści
  1. Java - Tutorial Programowania (1990s)/

11. Komentarze

·1023 słów·5 min·

2.10 Komentarze
#

Rodzaje komentarzy w Javie
#

Java obsługuje trzy rodzaje komentarzy:

  1. Komentarze jednoliniowe - //
  2. Komentarze wieloliniowe - /* */
  3. Komentarze dokumentujące - /** */

Komentarze “standardowe”
#

Komentarze jednoliniowe
#

public class Przykład {
    private int x; // To jest komentarz jednoliniowy
    
    public void metoda() {
        int y = 10; // Inicjalizacja zmiennej y
        // Ta linia jest całkowicie skomentowana
        x = y * 2;
    }
}

Komentarze wieloliniowe
#

/*
 * To jest komentarz wieloliniowy.
 * Może zawierać wiele linii tekstu
 * i jest ignorowany przez kompilator.
 */
public class KomentarzWieloliniowy {
    
    public void metoda() {
        /*
         * Komentarz może być umieszczony
         * w dowolnym miejscu kodu
         */
        int x = 5;
        
        /* Krótki komentarz wieloliniowy */
        int y = x * 2;
    }
}

Komentarze dokumentujące
#

Komentarze dokumentujące służą do automatycznego generowania dokumentacji za pomocą narzędzia javadoc. Zaczynają się od /** i kończą */.

Podstawowa składnia
#

/**
 * Klasa reprezentująca prostokąt.
 * Zawiera metody do obliczania pola i obwodu.
 * 
 * @author Jan Kowalski
 * @version 1.0
 * @since 1.0
 */
public class Prostokąt {
    private double szerokość;
    private double wysokość;
    
    /**
     * Konstruktor tworzący prostokąt o podanych wymiarach.
     * 
     * @param szerokość szerokość prostokąta (musi być > 0)
     * @param wysokość wysokość prostokąta (musi być > 0)
     * @throws IllegalArgumentException gdy wymiary są <= 0
     */
    public Prostokąt(double szerokość, double wysokość) {
        if (szerokość <= 0 || wysokość <= 0) {
            throw new IllegalArgumentException("Wymiary muszą być większe od zera");
        }
        this.szerokość = szerokość;
        this.wysokość = wysokość;
    }
    
    /**
     * Oblicza pole prostokąta.
     * 
     * @return pole prostokąta jako iloczyn szerokości i wysokości
     */
    public double obliczPole() {
        return szerokość * wysokość;
    }
    
    /**
     * Oblicza obwód prostokąta.
     * 
     * @return obwód prostokąta
     * @see #obliczPole()
     */
    public double obliczObwód() {
        return 2 * (szerokość + wysokość);
    }
    
    /**
     * Zwraca szerokość prostokąta.
     * 
     * @return szerokość prostokąta
     */
    public double getSzerokość() {
        return szerokość;
    }
    
    /**
     * Ustawia nową szerokość prostokąta.
     * 
     * @param szerokość nowa szerokość (musi być > 0)
     * @throws IllegalArgumentException gdy szerokość <= 0
     */
    public void setSzerokość(double szerokość) {
        if (szerokość <= 0) {
            throw new IllegalArgumentException("Szerokość musi być większa od zera");
        }
        this.szerokość = szerokość;
    }
}

Tagi dokumentujące
#

Najważniejsze tagi używane w komentarzach dokumentujących:

TagOpisZastosowanie
@authorAutor klasy/interfejsuKlasy, interfejsy
@versionWersja klasy/interfejsuKlasy, interfejsy
@sinceWersja od której element istniejeWszystkie
@paramOpis parametru metodyMetody, konstruktory
@returnOpis wartości zwracanejMetody
@throwsOpis zgłaszanego wyjątkuMetody, konstruktory
@seeOdniesienie do innego elementuWszystkie
@deprecatedElement przestarzałyWszystkie

Przykład z wszystkimi tagami
#

/**
 * Kalkulator do podstawowych operacji matematycznych.
 * 
 * @author Anna Nowak
 * @author Piotr Kowalski
 * @version 2.1
 * @since 1.0
 */
public class Kalkulator {
    
    /**
     * Stała reprezentująca PI.
     * 
     * @since 2.0
     */
    public static final double PI = 3.14159265359;
    
    /**
     * Dodaje dwie liczby.
     * 
     * @param a pierwsza liczba
     * @param b druga liczba
     * @return suma liczb a i b
     * @see #odejmij(double, double)
     * @since 1.0
     */
    public double dodaj(double a, double b) {
        return a + b;
    }
    
    /**
     * Dzieli dwie liczby.
     * 
     * @param dzielna liczba dzielona
     * @param dzielnik liczba przez którą dzielimy
     * @return wynik dzielenia
     * @throws ArithmeticException gdy dzielnik wynosi zero
     * @see #pomnóż(double, double)
     * @since 1.0
     */
    public double podziel(double dzielna, double dzielnik) {
        if (dzielnik == 0) {
            throw new ArithmeticException("Dzielenie przez zero");
        }
        return dzielna / dzielnik;
    }
    
    /**
     * Oblicza pierwiastek kwadratowy.
     * 
     * @param liczba liczba z której obliczamy pierwiastek
     * @return pierwiastek kwadratowy z liczby
     * @throws IllegalArgumentException gdy liczba jest ujemna
     * @deprecated Użyj {@link Math#sqrt(double)} zamiast tej metody
     * @since 1.0
     */
    @Deprecated
    public double pierwiastek(double liczba) {
        if (liczba < 0) {
            throw new IllegalArgumentException("Liczba nie może być ujemna");
        }
        return Math.sqrt(liczba);
    }
}

Komentarze dla pól
#

public class KonfiguracjaAplikacji {
    
    /**
     * Maksymalna liczba połączeń do bazy danych.
     * Domyślna wartość to 10 połączeń.
     * 
     * @since 1.0
     */
    private static final int MAX_POŁĄCZEŃ = 10;
    
    /**
     * Timeout dla operacji sieciowych w milisekundach.
     * 
     * @see #setTimeout(int)
     * @since 1.2
     */
    private int timeout = 5000;
    
    /**
     * Flaga określająca czy logowanie jest włączone.
     * 
     * @deprecated Będzie usunięte w wersji 3.0
     * @since 1.0
     */
    @Deprecated
    public boolean debugMode = false;
}

Generowanie dokumentacji
#

Polecenie javadoc
#

# Podstawowe użycie
javadoc *.java

# Z określeniem katalogu docelowego
javadoc -d docs *.java

# Z dodatkowymi opcjami
javadoc -d docs -author -version -use -windowtitle "Moja Aplikacja" *.java

# Dla pakietu
javadoc -d docs com.mojafirma.projekt

Opcje javadoc
#

  • -d katalog - katalog docelowy dla dokumentacji
  • -author - uwzględnij informacje o autorach
  • -version - uwzględnij informacje o wersji
  • -use - generuj strony z informacjami o użyciu klas
  • -windowtitle - tytuł okna przeglądarki
  • -doctitle - tytuł dokumentacji
  • -bottom - tekst na dole każdej strony

Przykład pliku HTML generowanego przez javadoc
#

Po uruchomieniu javadoc dla klasy Prostokąt, zostanie wygenerowana dokumentacja HTML zawierająca:

  • Przegląd klasy z opisem
  • Listę konstruktorów z opisami parametrów
  • Listę metod z opisami parametrów i zwracanych wartości
  • Informacje o wyjątkach
  • Odnośniki między powiązanymi elementami

Najlepsze praktyki
#

Dobre komentarze
#

/**
 * Oblicza podatek VAT od podanej kwoty.
 * 
 * @param kwotaNetto kwota netto w złotych
 * @param stawkaVAT stawka VAT jako procent (np. 23 dla 23%)
 * @return kwota podatku VAT
 */
public double obliczVAT(double kwotaNetto, double stawkaVAT) {
    return kwotaNetto * (stawkaVAT / 100.0);
}

// Korekta zaokrąglenia dla obliczeń finansowych
BigDecimal result = amount.setScale(2, RoundingMode.HALF_UP);

Komentarze do unikania
#

// ZŁE PRZYKŁADY:

// Zwiększ i o 1
i++;

/**
 * Getter dla pola nazwa
 * @return nazwa
 */
public String getNazwa() {
    return nazwa; // To oczywiste z kodu
}

// TODO: Naprawić to później (komentarz z 2018 roku)

Wskazówki
#

  1. Komentuj DLACZEGO, nie CO - kod pokazuje co robi, komentarz powinien wyjaśniać dlaczego
  2. Aktualizuj komentarze wraz ze zmianami w kodzie
  3. Używaj javadoc dla publicznego API
  4. Bądź zwięzły ale konkretny
  5. Unikaj komentarzy oczywistych
  6. Komentuj algorytmy złożone i nietypowe rozwiązania
Narzędzie javadoc było rewolucyjne w latach 90. - umożliwiało automatyczne generowanie dokumentacji bezpośrednio z kodu źródłowego, co znacznie ułatwiło utrzymanie aktualnej dokumentacji.

Czy ten artykuł był pomocny? Podziel się nim z innymi!