Standardi za komentiranje

Enotna pravila za komentarje v izvorni kodi in dokumentacijske komentarje.

Osnovna načela

Komentarji pojasnjujejo ZAKAJ, ne KAJ.
  • Dokumentirajte javne API-je; notranje komentarje ohranite minimalne
  • Dajte prednost jasni kodi pred komentarji
  • Komentirajte samo neočitno
  • Standardni jezik: angleščina

Vrstični komentarji

Uporabite za:

  • Intent (namen)
  • Constraints (omejitve)
  • Trade-offs (kompromisi)
  • Edge Cases (robni primeri)

Izogibajte se: Pripovedovanju kode.

Primer: Dobri vs. slabi komentarji

(* SLABO - Pripoveduje kodo *)
I := 0;  (* Nastavi I na 0 *)
while I < Count do  (* Zanka dokler je I manjši od Count *)
begin
  ProcessItem(Items[I]);  (* Obdelaj element *)
  Inc(I);  (* Povečaj I za 1 *)
end;
 
(* DOBRO - Pojasnjuje namen in omejitev *)
(* Process items in reverse order to maintain dependency chain.
   Items may reference later items, so forward processing would fail. *)
for I := Count - 1 downto 0 do
  ProcessItem(Items[I]);

Dokumentacijski komentarji (PasDoc)

Za Pascal/FPC se uporablja format PasDoc.

Struktura

(*
  @abstract(Kratek opis funkcije/razreda)
 
  Podroben opis po potrebi.
  Pojasnite KDAJ in ZAKAJ se ta funkcija uporablja.
 
  @param(APath Pot do vhodne datoteke. Mora obstajati.)
  @param(AOptions Izbirne nastavitve obdelave)
 
  @returns(True ob uspehu, False ob napaki validacije)
 
  @raises(EFileNotFound kadar APath ne obstaja)
  @raises(EAccessDenied ob manjkajočih dovoljenjih)
 
  @seealso(ProcessDirectory za obdelavo imenikov)
 
  Security:
    - CWE-22: Pot je validirana proti prečkanju
*)
function ProcessFile(const APath: string; AOptions: TOptions): Boolean;

Obvezne oznake

Oznaka Kdaj Opis
@abstract Vedno Enovrstični kratek opis
@param Pri parametrih Vsak parameter posebej
@returns Pri funkcijah Pojasnitev vrnjene vrednosti
@raises Pri izjemah Vsaka možna izjema

Izbirne oznake

Oznaka Kdaj Opis
@seealso Pri sorodnih funkcijah Navzkrižne reference
@deprecated Pri zastarelih API-jih Navedite zamenjavo
@since Pri novih API-jih Verzija uvedbe
@note Pri pomembnih opombah Posebna pozornost
@warning Pri pasteh Možne težave

Dokumentacija razredov

(*
  @abstract(DateEdit Control za vnos datuma s pojavnim koledarjem)
 
  TWvdSDateEdit zagotavlja vnosno polje za izbiro datuma z:
  - Neposrednim tekstovnim vnosom z validacijo formata
  - Pojavnim koledarjem za vizualno izbiro
  - Validacijo datumskega območja (Min/Max)
 
  @bold(Uporaba:)
  - V obrazcih za vnos datuma
  - Kot filter v podatkovnih pogledih
  - Za izbiro obdobja (od/do)
 
  @bold(Primer:)
  @longcode(#
    DateEdit := TWvdSDateEdit.Create(Self);
    DateEdit.MinDate := EncodeDate(2000, 1, 1);
    DateEdit.MaxDate := Now;
    DateEdit.OnDateChanged := @HandleDateChanged;
  #)
 
  @seealso(TWvdSTimeEdit za izbiro časa)
  @seealso(TWvdSDateTimePicker za kombinirano izbiro)
*)
TWvdSDateEdit = class(TWvdSCustomEdit)

Dokumentacija metod

(*
  @abstract(Validira vneseno datumsko vrednost)
 
  Preveri, ali je vneseni datum:
  - V pravilnem formatu
  - Znotraj MinDate/MaxDate
  - Veljaven datum (npr. ni 31. februarja)
 
  @param(AValue Datumska vrednost za validacijo)
  @param(AError Sporočilo o napaki, če validacija ne uspe)
 
  @returns(True če je datum veljaven, False ob napaki)
 
  @note(Prazen vnos velja za veljavnega, če je AllowEmpty = True)
*)
function ValidateDate(const AValue: TDateTime;
  out AError: string): Boolean;

Dokumentacija lastnosti

(*
  @abstract(Najmanjši dovoljeni datum)
 
  Določa najzgodnejši datum, ki ga je mogoče izbrati.
  Vnosi pred tem datumom so zavrnjeni.
 
  @seealso(MaxDate za zgornjo mejo)
*)
property MinDate: TDateTime read FMinDate write SetMinDate;

Kontrolni seznam za pregled

[ ] Komentar pojasnjuje namen/kompromise, ne mehanike
[ ] Komentar ustreza trenutnemu obnašanju (brez odstopanja)
[ ] Komentar je v angleščini in jedrnat
[ ] Javni API ima popolne dokumentacijske komentarje
[ ] @param za vsak parameter prisoten
[ ] @returns za funkcije prisoten
[ ] @raises za možne izjeme prisoten
[ ] Brez komentarjev TODO/FIXME

Kdaj komentirati

Komentirajte

  • Javne API-je (obvezno)
  • Neočitne algoritme
  • Obvode za znane hrošče
  • Varnostno pomembne odločitve
  • Optimizacije zmogljivosti s kompromisi
  • Zunanje odvisnosti

Ne komentirajte

  • Očitne kode
  • Samoumevne kode
  • Začasne razhroščevalne kode (je treba odstraniti)
  • Izkomentiranega kode (je treba izbrisati)

Formati glede na jezik

Jezik Format Primer
Pascal/FPC PasDoc (* @abstract(…) *)
Delphi XMLDoc-style / <summary>…</summary> | | C# | XMLDoc | / <summary>…</summary>
Rust rustdoc
Zuletzt geändert: dne 29.01.2026 ob 22:24