====== Standard di Commento ======
Regole uniformi per commenti nel codice sorgente e commenti di documentazione.
===== Principi Base =====
**I commenti spiegano PERCHE, non COSA.**
* Documenta le API pubbliche; mantieni i commenti interni minimali
* Preferisci codice chiaro ai commenti
* Commenta solo ciò che non è ovvio
* **Lingua standard: Inglese**
===== Commenti Inline =====
Usa per:
* Intent (Intenzione)
* Constraints (Vincoli)
* Trade-offs (Compromessi)
* Edge Cases (Casi limite)
**Evita:** Raccontare il codice.
==== Esempio: Commenti Buoni vs. Cattivi ====
(* CATTIVO - Racconta il codice *)
I := 0; (* Imposta I a 0 *)
while I < Count do (* Cicla finché I è minore di Count *)
begin
ProcessItem(Items[I]); (* Elabora Item *)
Inc(I); (* Incrementa I di 1 *)
end;
(* BUONO - Spiega intenzione e vincolo *)
(* 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]);
===== Commenti Doc (PasDoc) =====
Per Pascal/FPC si usa il formato **PasDoc**.
==== Struttura ====
(*
@abstract(Breve descrizione della funzione/classe)
Descrizione dettagliata se necessario.
Spiega QUANDO e PERCHE questa funzione viene usata.
@param(APath Percorso al file di input. Deve esistere.)
@param(AOptions Impostazioni di elaborazione opzionali)
@returns(True in caso di successo, False in caso di errore di validazione)
@raises(EFileNotFound se APath non esiste)
@raises(EAccessDenied in caso di permessi mancanti)
@seealso(ProcessDirectory per elaborazione directory)
Security:
- CWE-22: Il percorso viene validato contro traversal
*)
function ProcessFile(const APath: string; AOptions: TOptions): Boolean;
==== Tag Obbligatori ====
^ Tag ^ Quando ^ Descrizione ^
| ''@abstract'' | Sempre | Breve descrizione su una riga |
| ''@param'' | Con parametri | Ogni parametro singolarmente |
| ''@returns'' | Con funzioni | Spiegare valore di ritorno |
| ''@raises'' | Con exception | Ogni possibile exception |
==== Tag Opzionali ====
^ Tag ^ Quando ^ Descrizione ^
| ''@seealso'' | Con funzioni correlate | Riferimenti incrociati |
| ''@deprecated'' | Con API obsolete | Indicare sostituto |
| ''@since'' | Con nuove API | Versione di introduzione |
| ''@note'' | Con note importanti | Attenzione particolare |
| ''@warning'' | Con insidie | Possibili problemi |
===== Documentazione Classi =====
(*
@abstract(Control DateEdit per input date con popup calendario)
TWvdSDateEdit offre un campo di input per selezione date con:
- Input testo diretto con validazione formato
- Popup calendario per selezione visiva
- Validazione range date (Min/Max)
@bold(Utilizzo:)
- In form per input date
- Come filtro in viste dati
- Per selezione periodo (da/a)
@bold(Esempio:)
@longcode(#
DateEdit := TWvdSDateEdit.Create(Self);
DateEdit.MinDate := EncodeDate(2000, 1, 1);
DateEdit.MaxDate := Now;
DateEdit.OnDateChanged := @HandleDateChanged;
#)
@seealso(TWvdSTimeEdit per selezione ora)
@seealso(TWvdSDateTimePicker per selezione combinata)
*)
TWvdSDateEdit = class(TWvdSCustomEdit)
===== Documentazione Metodi =====
(*
@abstract(Valida il valore data inserito)
Verifica se la data inserita:
- E nel formato corretto
- E compresa in MinDate/MaxDate
- Rappresenta una data valida (es. nessun 31 febbraio)
@param(AValue Il valore data da validare)
@param(AError Messaggio di errore se la validazione fallisce)
@returns(True se la data e valida, False in caso di errore)
@note(Input vuoto e considerato valido se AllowEmpty = True)
*)
function ValidateDate(const AValue: TDateTime;
out AError: string): Boolean;
===== Documentazione Property =====
(*
@abstract(Data minima consentita)
Imposta la data selezionabile piu antica.
Gli input precedenti a questa data vengono rifiutati.
@seealso(MaxDate per limite superiore)
*)
property MinDate: TDateTime read FMinDate write SetMinDate;
===== Checklist Review =====
[ ] Il commento spiega Intent/Trade-offs, non la meccanica
[ ] Il commento corrisponde al comportamento attuale (nessun drift)
[ ] Il commento e in inglese e conciso
[ ] API pubblica ha commenti doc completi
[ ] @param per ogni parametro presente
[ ] @returns per funzioni presente
[ ] @raises per possibili exception presente
[ ] Nessun commento TODO/FIXME
===== Quando Commentare =====
==== Commentare ====
* API pubbliche (Obbligatorio)
* Algoritmi non ovvi
* Workaround per bug noti
* Decisioni rilevanti per la sicurezza
* Ottimizzazioni performance con trade-off
* Dipendenze esterne
==== Non Commentare ====
* Codice ovvio
* Codice auto-esplicativo
* Codice debug temporaneo (dovrebbe essere rimosso)
* Codice commentato (dovrebbe essere eliminato)
===== Formati Specifici per Linguaggio =====
^ Linguaggio ^ Formato ^ Esempio ^
| Pascal/FPC | PasDoc | ''(* @abstract(...) *)'' |
| Delphi | XMLDoc-style | ''/// ...'' |
| C# | XMLDoc | ''/// ...'' |
| Rust | rustdoc | ''/// Descrizione'' |
===== Vedi anche =====
* [[.:qualitaetssicherung|Panoramica Garanzia Qualità]]
* [[.:code-konventionen|Convenzioni di Codice]]
* [[.:audit-codequalitaet|Checklist Qualità Codice]]