Il "pattern var singolo" spesso trovato in Javascript suggerisce singoli punti di ritorno insistendo sul fatto che tutte le variabili sono dichiarate nella parte superiore del corpo della funzione per impedire "sollevamento". Quindi, registrare le valutazioni invece di ritornare può impedire la necessità di un ELSE (che ho una strana avversione per ...):
function doThis(required){
var result = false;
if(required){
//base implementation
result = doThat();
}
return result;
}
Se hai condizioni sequenziali o opzionali e non riesci ad accedere a un'altra funzione, puoi farlo:
function doThis(required, opt){
var result = false,
oRequirement = 'foo';
if(required){
//base implementation
result = doThat();
if(result !== false && opt !== undefined && opt === oRequirement){
//optional implementations
result = doOptional();
} else {
//undo previous truthiness
result = false;
}
}
}
return result;
}
È possibile delegare il consumo di variabili esternamente, rendendo questa funzione effettivamente una "clausola di salvaguardia":
function vA(a){
return true;
}
function vB(c){
return true;
}
function vB(c){
return true;
}
function doThis(required, opt){
var result = false;
if(vA(required)){
//base implementation
result = doThat(required);
if(vB(result) && vC(opt)){
//optional
result = doOptional(opt);
}else{
result = false;
}
}
return result;
}
Potresti suddividere le tue valutazioni:
function doThis(required, opt){
var result = false;
if(if(vA(required)){
//base
result = doThat(required);
}
if(if(vB(result) && vC(opt)){
//optional
result = doOptional(opt);
}
return result;
}
Le ternarie possono ridurre le dimensioni e sono molto carine, ma possono essere un po 'più difficili da eseguire il debug e un po' scomode se si ha bisogno di molte fasi di valutazione annidate:
function doThis(a, b, c){
var o = false;
if(valid(a)){ //assuming some sort of validation is required
if(b !== undefined && valid(b)){
o = c ? //an optional step
doMore(a) ?
new Foo(a, b) :
false :
new Bar(b, a) ;
}
}
return o;
}
In generale, ho bisogno di annidare le istruzioni IF se sono presenti argomenti facoltativi . Quando il risultato è il risultato di un processo all'interno del corpo, suggerisce di delegare o concatenare in un metodo separato.
Detto questo, non posso fare a meno di pensare che non c'è un modo "giusto" (anche se ci sono sicuramente quelli sbagliati ...), ed è questo fatto che rende la codifica una professione creativa capace di una vasta gamma di espressione. Voglio dire, chi non ama un po 'di refactoring?