2010-07-01 11 views
13

Diciamo che ho un metodo, Foo(). Ci sono solo alcuni momenti in cui è opportuno specificare Foo(), come determinato dal metodo ShouldFooNow(). Tuttavia, ci sono molte volte in cui il programma deve considerare se Foo() è appropriato in questo momento. Così, invece di scrivere:Qual è una buona convenzione di denominazione per i metodi che richiedono un'azione condizionale?

if ShouldFooNow(): 
    Foo() 

ovunque, ho solo fare che in una sola funzione:

def __name(): 
    if ShouldFooNow(): 
     Foo() 

Quale sarebbe un buon nome per questo metodo? Mi viene difficile trovare una buona convenzione. IfNecessaryFoo() è scomodo, in particolare se Foo() ha un nome più lungo. DoFooIfShould()? Ancora più imbarazzante.

Quale sarebbe uno stile di nome migliore?

risposta

13

penso che tu sia abbastanza vicino. Metti l'azione/l'intento all'inizio del nome del metodo, per una ricerca alfabetica più semplice. Se dovessi scrivere una cosa del genere, mi piacerebbe prendere in considerazione

FooIfNecessary() 
FooIfRequired() 

Supponiamo, ad esempio,

ElevatePermissionsIfNecessary() 
0

Si potrebbe utilizzare EnsureFoo().

Ad esempio, il metodo EnsurePermissions() provvederà in appropriato se necessario. Se le autorizzazioni sono già corrette, il metodo non farà nulla.

1

Recentemente ho iniziato utilizzando la convenzione:

FooIf(args, bool); 

Dove sono args qualsiasi argomento che il metodo prende e bool sta aspettandosi un valore booleano o un Func di qualche tipo che si risolva in un booleano. Quindi, all'interno di quel metodo, controllo il bool e gestisco la logica. Mantiene tali affermazioni su una riga e mi sembra pulita.

esempio nel mio codice C# per la registrazione:

public void WarnIf<T>(T value, string message, Func<T, bool> isTrue) 
{ 
    if (isTrue(value)) _log.Warn(message); 
} 

quindi vorrei chiamarlo con qualcosa di simile:

WarnIf(someObject, "This is a warning message to be logged.", s => s.SomeCondition == true); 

(Che chiamante potrebbe non essere corretta, ma si ottiene l'idea .. Non ho il codice di fronte a me in questo momento.)

+1

È davvero come si chiamerebbe 'WarnIf()?' Wheres è il primo argomento? –

+0

Modificato. Ho perso quella in fretta. Mi sono abituato troppo ai metodi di estensione che ho scritto tutto il giorno :) – David

Problemi correlati