====== Standardi komentiranja ====== Jedinstvena pravila za komentare izvornog koda i dokumentacijske komentare. ===== Osnovna načela ===== **Komentari objašnjavaju ZAŠTO, ne ŠTO.** * Dokumentiraj javne API-je; drži interne komentare minimalnima * Preferiraj jasan kod nad komentarima * Komentiraj samo neočito * **Standardni jezik: Engleski** ===== Inline-komentari ===== Koristi za: * Intent (namjera) * Constraints (ograničenja) * Trade-offs (kompromisi) * Edge Cases (rubni slučajevi) **Izbjegavaj:** Prepričavanje koda. ==== Primjer: Dobri vs. Loši komentari ==== (* LOŠE - Prepričava kod *) I := 0; (* Postavi I na 0 *) while I < Count do (* Petlja dok je I manji od Count *) begin ProcessItem(Items[I]); (* Obradi Item *) Inc(I); (* Povećaj I za 1 *) end; (* DOBRO - Objašnjava namjeru i ograničenje *) (* 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]); ===== Doc-komentari (PasDoc) ===== Za Pascal/FPC koristi se **PasDoc**-format. ==== Struktura ==== (* @abstract(Kratki opis funkcije/klase) Opširni opis ako je potrebno. Objasni KADA i ZAŠTO se ova funkcija koristi. @param(APath Putanja do ulazne datoteke. Mora postojati.) @param(AOptions Opcionalne postavke obrade) @returns(True kod uspjeha, False kod validacijske greške) @raises(EFileNotFound ako APath ne postoji) @raises(EAccessDenied kod nedostatka dozvola) @seealso(ProcessDirectory za obradu direktorija) Security: - CWE-22: Putanja se validira protiv traversala *) function ProcessFile(const APath: string; AOptions: TOptions): Boolean; ==== Obvezni tagovi ==== ^ Tag ^ Kada ^ Opis ^ | ''@abstract'' | Uvijek | Jednolinijski kratki opis | | ''@param'' | Kod parametara | Svaki parametar pojedinačno | | ''@returns'' | Kod funkcija | Objasni povratnu vrijednost | | ''@raises'' | Kod iznimki | Svaka moguća iznimka | ==== Opcionalni tagovi ==== ^ Tag ^ Kada ^ Opis ^ | ''@seealso'' | Kod povezanih funkcija | Unakrsne reference | | ''@deprecated'' | Kod zastarjelih API-ja | Navedi zamjenu | | ''@since'' | Kod novih API-ja | Verzija uvođenja | | ''@note'' | Kod važnih napomena | Posebna pozornost | | ''@warning'' | Kod zamki | Mogući problemi | ===== Dokumentacija klasa ===== (* @abstract(DateEdit Control za unos datuma s Kalender-popupom) TWvdSDateEdit nudi polje za odabir datuma s: - Direktnim tekstualnim unosom s validacijom formata - Kalender-popupom za vizualni odabir - Validacijom raspona datuma (Min/Max) @bold(Uporaba:) - U formularima za unos datuma - Kao filter u pregledima podataka - Za odabir vremenskog raspona (od/do) @bold(Primjer:) @longcode(# DateEdit := TWvdSDateEdit.Create(Self); DateEdit.MinDate := EncodeDate(2000, 1, 1); DateEdit.MaxDate := Now; DateEdit.OnDateChanged := @HandleDateChanged; #) @seealso(TWvdSTimeEdit za odabir vremena) @seealso(TWvdSDateTimePicker za kombinirani odabir) *) TWvdSDateEdit = class(TWvdSCustomEdit) ===== Dokumentacija metoda ===== (* @abstract(Validira unesenu vrijednost datuma) Provjerava je li uneseni datum: - U ispravnom formatu - Unutar MinDate/MaxDate - Validan datum (npr. ne 31. veljače) @param(AValue Vrijednost datuma za validaciju) @param(AError Poruka o grešci ako validacija ne uspije) @returns(True ako je datum validan, False kod greške) @note(Prazan unos smatra se validnim ako je AllowEmpty = True) *) function ValidateDate(const AValue: TDateTime; out AError: string): Boolean; ===== Dokumentacija svojstava ===== (* @abstract(Minimalni dopušteni datum) Postavlja najraniji datum koji se može odabrati. Unosi prije ovog datuma bit će odbijeni. @seealso(MaxDate za gornju granicu) *) property MinDate: TDateTime read FMinDate write SetMinDate; ===== Kontrolna lista pregleda ===== [ ] Komentar objašnjava namjeru/trade-offs, ne mehaniku [ ] Komentar odgovara trenutnom ponašanju (bez drifta) [ ] Komentar je na engleskom i sažet [ ] Javni API ima potpune doc-komentare [ ] @param za svaki parametar prisutan [ ] @returns za funkcije prisutan [ ] @raises za moguće iznimke prisutan [ ] Bez TODO/FIXME-komentara ===== Kada komentirati ===== ==== Komentirati ==== * Javne API-je (obvezno) * Neočite algoritme * Workaround-e za poznate bugove * Sigurnosno relevantne odluke * Optimizacije performansi s trade-offs * Vanjske ovisnosti ==== Ne komentirati ==== * Očit kod * Samorazumljiv kod * Privremeni debug-kod (treba ukloniti) * Zakomentirani kod (treba obrisati) ===== Formati specifični za jezik ===== ^ Jezik ^ Format ^ Primjer ^ | Pascal/FPC | PasDoc | ''(* @abstract(...) *)'' | | Delphi | XMLDoc-stil | ''/// ...'' | | C# | XMLDoc | ''/// ...'' | | Rust | rustdoc | ''/// Opis'' | ===== Vidi također ===== * [[.:qualitaetssicherung|Pregled osiguranja kvalitete]] * [[.:code-konventionen|Konvencije koda]] * [[.:audit-codequalitaet|Kontrolna lista kvalitete koda]]