Inhaltsverzeichnis
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 | / <summary>…</summary> |
| Rust | rustdoc |
Zuletzt geändert: il 30/01/2026 alle 01:42