Əsas məzmuna keçin

Javadoc

Javadoc Java kodunu avtomatik olaraq HTML sənədlərə çevirən standart sənədləşdirmə alətidir. Kodla yanaşı saxlanan mətn + tag-lar sayəsində API istifadəsi aydınlaşır, IDE-lərdə (hover, completion) zəngin yardım göstərilir.

Niyə Javadoc?

  • Komandadaxili bilik paylaşımı
  • Public API sabitliyinin qorunması
  • IDE inteqrasiyası (IntelliSense / Quick Doc)
  • Mürəkkəb biznes məntiqində niyyətin açıqlanması

Harada Yazılır?

YerSənədləşdir
Public Class / InterfaceÜmumi məqsəd, invariants
Public MethodMəntiq, parametrlər, edge case davranışı
Public Field (lazımdırsa)Mənası, vahidi
Package-info.javaPaket səviyyəli konsept
Module-info.javaModul təsviri

Əsas Tag-lar

TagMəqsəd
@paramParametr izahı
@returnGeri dönüş dəyəri
@throws / @exceptionAtıla bilən Exception səbəbi
@sinceVersiya məlumatı
@deprecatedİstifadə etmə xəbərdarlığı
@seeƏlaqəli sinif/metod
@implNoteImplementation detalları
@implSpecContract tələbləri (override edənlər üçün)
@authorMüəllif
@versionVersiya nömrəsi
@serialSerializable sahələr

Sadə Nümunə

Koda bax
/**
* İstifadəçi hesabı üçün əsas domain modeli.
* @implNote Immutable deyil – setter-lər vasitəsilə dəyişir.
*/
public class Account {
/** Unikal identifikator (DB auto increment). */
private Long id;

/** İstifadəçi login adı (unikal). */
private String username;

/** SHA-256 + salt ilə hash-lənmiş parol. */
private String passwordHash;

/**
* Parolu yeniləyir.
* @param rawPassword Plain-text parol (məsuliyyət: çağıran tərəf boş olmamalıdır)
* @throws IllegalArgumentException əgər parol boşdursa
*/
public void updatePassword(String rawPassword){
if(rawPassword == null || rawPassword.isBlank()) {
throw new IllegalArgumentException("Boş parol");
}
this.passwordHash = PasswordUtil.hash(rawPassword);
}
}

Stil Qaydaları

Qaydaİzah
Birinci cümlə qısaİlk cümlə summary kimi HTML-də çıxır
Imperativ stil"Gets the value" əvəzinə "Get value" ilə başlama
Texniki detallar @implNoteAPI contract ilə implementation qarışmasın
@param sırasıMetoddakı real parametr sırası
Tag-lar ardıcıllığı@param → @return → @throws → digər

@deprecated İstifadəsi

Koda bax
/**
* @deprecated Yerinə {@link #hashPassword(String)} istifadə edin.
*/
@Deprecated(since = "2.1", forRemoval = true)
public String legacyHash(String p){
// köhnə alqoritm
return md5(p);
}

@implSpec vs @implNote

TagMəqsəd
@implSpecOverride edənlər üçün contract şərtləri
@implNoteInternal detalları izah edir
Koda bax
/**
* Returns cached total.
* @implSpec Override edənlər cache invalidation qaydasını qoruyub saxlamalıdır.
* @implNote Daxildə LRU cache istifadə olunur.
*/
public int total(){ return cache.getOrCompute(...); }

Method Davranışını Aydın Yazmaq

Pis:

@return siyahı

Yaxşı:

@return Heç bir uyğun element tapılmazsa boş (null deyil) siyahı

Edge Case-lərin Sənədləşdirilməsi

MövzuNəyi qeyd et
Null icazəsiParametr null ola bilərmi?
Thread-safetySinif thread-safe-dirmi?
MutationDönən kolleksiya dəyişdirilə bilərmi?
PerformanceÇox böyük inputda komplekslik
ExceptionHansı şərtdə atılır

Generic Metodlar

Koda bax
/**
* Birinci elementi qaytarır.
* @param <T> siyahının element tipi
* @param list emal ediləcək siyahı (null olmamalıdır)
* @return birinci element
* @throws IllegalArgumentException əgər siyahı boşdursa
*/
public static <T> T first(List<T> list){
if(list.isEmpty()) throw new IllegalArgumentException("Boş");
return list.get(0);
}

Package Sənədləşməsi

package-info.java faylı ilə paket konseptləri, arxitektura qaydaları.

Koda bax
/**
* Payment domeninin əsas axınları:
* <ul>
* <li>Ödəniş yaradılması</li>
* <li>Risk yoxlanışı</li>
* <li>Kompensasiya prosesləri</li>
* </ul>
*/
package com.example.payment;

Modullar (Java 9+)

module-info.java daxilində module səviyyəli Javadoc.

Avtomatik Javadoc Yaratmaq

Maven:

Koda bax
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>17</source>
<failOnError>true</failOnError>
</configuration>
<executions>
<execution>
<goals><goal>jar</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Gradle:

Koda bax
tasks.withType(Javadoc) {
options.encoding = 'UTF-8'
options.addBooleanOption('html5', true)
failOnError = true
}

IDE Praktikası

IDE FeatureFaydası
Live templatesStandart tag skeleton
InspectorsBoş @param, uyğunsuz tag xəbərdarlığı
Quick DocHover ilə tez oxu

Sual-Cavab

SualCavab
Bütün private metodları sənədləşdirim?Yox, sadəcə kompleks məntiq varsa inline comment
@author yazım?Komanda siyasətindən asılı
Niyə failOnError?CI-də keyfiyyət düşməsinin qarşısı
@deprecated nə zaman?Funksionallıq planlı silinməyə gedirsə

Ən Yaxşı Təcrübələr

  • Public API-ləri 100% document et
  • "Nə edir" fokuslan, "Necə edir" deyil (implementation dəyişə bilər)
  • Throw olunan hər custom exception üçün səbəb yaz
  • Təkrar ifadələrdən qaç (məs: metod adı + description eyni cümlə)
  • Dönən kolleksiyanın boş/null davranışını açıq de

Tipik Səhvlər

ProblemNəticə
Copy-paste docYanlış/yanıltıcı məlumat
Boş @param tag-larIDE warning seli
Implementation leakDaxili detallar dəyişəndə doc yalnış olur
Return davranışı qeyri-müəyyənConsumer yanlış istifadə

Növbəti Addım

Kod keyfiyyəti ilə əlaqəli daha geniş yanaşma üçün: design-patternler/2.clean-code və test strategiyası üçün testing/unit-testing sənədlərinə bax.