2009-11-06 3 views
1

S'il vous plaît considérer le corps de la fonction suivante:Concaténation booléenne? Quel est le vrai terme pour ce modèle?

var isValidated = true; 
$(selector1).each(function(){ 
    //do validation with local f()... 
    isValidated = f() && isValidated; 
}); 

$(selector2).each(function(){ 
    //do validation with local f()... 
    isValidated = f() && isValidated; 
}); 

$(selector3).each(function(){ 
    //do validation with local f()... 
    isValidated = f() && isValidated; 
}); 

return isValidated; 

Ma description des progrès de isValidated est concaténation booléenne --- mais il doit être un fonctionnaire, terme science informatique pour cette chose. Qu'Est-ce que c'est? Pour clarifier, l'idée ici est de laisser fonctionner chaque bloc $() --- mais quand l'un de ces blocs a un échec de validation, les résultats de cet échec doivent retourner false sur tous les blocs (true && true && false == false). Donc, comme beaucoup de programmeurs, j'utilise une sorte de pattern mais souvent nous ne savons pas comment il s'appelle. Alors ce modèle ressemble-t-il à quelque chose d'utile?

Répondre

10

Boolean Logic. (et regardez la section "opérations de chaînage").

+1

+1 pour George Boole! –

+3

Également d'intérêt: Évaluation de court-circuit: http://en.wikipedia.org/wiki/Short-circuit_evaluation –

+0

Okay: donc cela pourrait également être appelé * Boolean chaînage * ... – rasx

3

Je ne sais pas si c'est un modèle nommé en soi, mais je voulais juste souligner une observation mineure ... Puisque vous venez de renvoyer un booléen, il vaudrait mieux changer vos chèques afin qu'après le premier échec, le la logique sera tout simplement court-circuit comme faux sans courir inutilement fonctions supplémentaires:

isValidated = isValidated && f(); 

la seule raison pour vous assurer d'exécuter encore tous les f() est si elles sont en train de faire quelque chose comme le marquage des champs de l'interface utilisateur avec des erreurs pour l'utilisateur. S'ils valident simplement, pas besoin de les lancer une fois que le contrôle externe est faux.

+0

@bmoeskau vous avez raison: chaque f() doit fonctionner pour marquer les champs de l'interface utilisateur ... – rasx

+1

Si vos fonctions exécutent la validation et marquent l'interface utilisateur, elles font trop de choses. Ce sont des préoccupations distinctes. – rmeador

1

Je suppose de votre utilisation de .each() que vous avez également accès à une fonction .inject(), ce que je recommande d'utiliser lorsque vous construisez une seule valeur à partir d'un énumérable.

function validated(a) { 
    return a.inject(true, function(acc, el){ return(acc && f()); }); 
} 

return validated($(selector1)) && validated($(selector2)) && validated($(selector3)); 
+0

@ mattgillooly.com: J'aime votre approche ici car elle évite de partager une variable comme 'isValidated' parmi différentes fonctions ... – rasx

Questions connexes