Mi imbatto in questo caso un po 'spesso, e sono sorpreso di trovare così poche discussioni simili sul web. Questa domanda è molto correlata, ma il mio problema è che voglio un metodo che faccia il più generale "fai X se Y" piuttosto che "fai X se necessario" . La risposta in questo link è usare il prefisso Ensure
, ma quella parola non si adatta se assicurare X non è l'intenzione del metodo.
Lo scenario che ho in mente è questo:
void mayPerformAction() {
// Do some preparatory calculations
// ...
if (shouldPerform) {
// Perform action
// ...
}
}
Il motivo per cui non sto usando due metodi separati ( shouldPerformAction()
e performAction()
) è perché sia la condizione che l'azione dipendono da alcuni calcoli preparatori, che dovrebbero essere ripetuti altrimenti. Ora, la mia domanda è: qual è il nome più logico e leggibile per il metodo mayPerformAction()
?
Per chiarire, è importante per il chiamante che l'azione possa talvolta non essere eseguita, altrimenti mi sembra logico usare performAction()
.
Ammetto che questa è una specie di problema XY, e ci sono più soluzioni pubblicate, ognuna delle quali ha buoni argomenti a favore e contro di loro. Per riassumere:
- Estrarre il dubbio e assegnargli un nome meno dettagliato, ad es. solo
performAction()
. - Preferisci chiarezza e fai i calcoli due volte; la differenza di prestazioni sarà comunque trascurabile in molti casi:
if (shouldPerform()) performAction()
. - Come sopra, ma memorizza il risultato condiviso dei calcoli in una variabile globale o lo restituisce (preferisco quest'ultimo) quindi nessuna risorsa viene sprecata.
Ritengo che l'approccio migliore dipenda da quanto "grave" sia la condizione e da quanto costosi siano i calcoli preparatori; come tale sto lasciando la domanda senza risposta per ora.