====== 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 | ''/// ...'' | | C# | XMLDoc | ''/// ...'' | | Rust | rustdoc | ''/// Opis'' | ===== Glejte tudi ===== * [[.:qualitaetssicherung|Pregled zagotavljanja kakovosti]] * [[.:code-konventionen|Konvencije kode]] * [[.:audit-codequalitaet|Kontrolni seznam kakovosti kode]]