Un mini-curs gratuit foarte interesant despre cum poți face refactor la anumite părți din cod.
Mi s-a părut ingenios modul în care poți simplifica un if mai complex: extragi totul într-un array, după care îl iterezi. În curs se folosește underscore, dar se poate extrage destul de ușor respectiva funcționalitate:
Mie tot mi se pare ingenioasă abordarea. În practică aș extrage fiecare condiție (sau grup de condiții) în metode separate, cu nume sugestiv (așa cum a zis și Eugen mai sus, aș folosi prefixurile is* sau has*; e.g. isFeatured(), hasChildren() etc)
Dar între abordarea de mai sus si un set de condiții ce se întinde pe patru rânduri ce crezi că aș alege?
var SpecialOfferChecker = function(age, gamer, adNetworks, specialStuff) {
this.age = age;
this.gamer = gamer;
this.adNetworks = adNetworks;
this.specialStuff = specialStuff;
this.validators = ['isTeenager', 'isFirstTimeGame', 'isPartOfAdNetwork'];
}
SpecialOfferChecker.prototype = {
isTeenager: function() { return (this.age > 0 && this.age < 20); },
isFirstTimeGame: function() { return false; /* bla bla */ },
isPartOfAdNetwork: function() { return false; /* bla bla */ },
isValid: function() {
// disclaimer: I was just having fun here do not use in real code
// this is false bc. the original code uses `||`; for `&&`set it to true
var valid = false;
for(var i = 0; i < this.validators.length; i++) {
funcNameString = this.validators[i];
valid = valid || this[funcNameString]();
}
return valid;
}
}
test = new SpecialOfferChecker(18)
test.isValid() // => true