Una funzione (o qualsiasi blocco discreto di codice) può essere considerata come avente varie forme di "correttezza" o "sicurezza", ad esempio se una funzione non accede o non modifica uno stato condiviso (o lo fa in modo sicuro, ad es. usando le serrature) quindi è considerato "sicuro per i thread". In C ++, una funzione è "const-correct" se solo i parametri minimi assoluti mancano del modificatore const
e "type-safety" significa che la funzione non si basa su un comportamento tardivo o dinamico che potrebbe causare un errore di accesso membro in fase di runtime.
Ora considera una funzione che prende il valore di "now", ad es. System.DateTime.UtcNow
in .NET:
public static Resource CreateResource() {
Resource ret = new Resource();
ret.Created = DateTime.UtcNow;
ret.Modified = DateTime.UtcNow;
return ret;
}
Il bug qui è che il valore di UtcNow
potrebbe cambiare tra l'impostazione .Created
e .Modified
, quindi i due valori di proprietà sarebbero diversi, implicando che la risorsa è stata modificata dopo che è stata creata.
L'implementazione corretta memorizzerebbe nella cache il valore iniziale di UtcNow
in modo che i valori delle due proprietà siano identici:
DateTime now = DateTime.UtcNow;
Resource ret = new Resource();
ret.Created = now;
ret.Modified = now;
O in alternativa:
Resource ret = new Resource();
ret.Modified = ret.Created = DateTime.UtcNow;
return ret;
Qual è il termine per descrivere questa "correttezza"? Ho pensato a "time-correct" o leggermente più pretenzioso "temporalmente corretto" o "cronologicamente corretto", ma mi chiedo se quei termini potrebbero implicare qualcos'altro.