Par exemple, chaque fois que vous avez une boucle comme ceci:
List<Employee> retiredEmployees = new List<Employee>();
foreach (Employee employee in EmployeeList)
{
if (employee.IsRetired)
retiredEmployees.Add(employee);
}
En utilisant un prédicat, vous devez le changer pour:
retiredEmployees = EmployeeList.FindAll(e => e.IsRetired);
Mais je crois, dans tout le débat "if statement considered evil", predicate
vs if
est juste mentionné comme un cas particulier de l'utilisation de la POO et la programmation fonctionnelle vs programmation procédurale.Ce paradigme peut être facilement généralisé à n'importe quel type de délégué (pas simplement un prédicat), ou toute utilisation de POO pour remplacer un conditionnel:
Par exemple, si vous parcourez votre code, vous pouvez facilement trouver le code suivant:
public class Employee
{
private bool _isRetired;
private double _amount;
public double GetPayAmount()
{
if (_isRetired)
return _amount * 0.9;
else
return _amount;
}
}
partisans purs POO vous diront que vous avez immédiatement besoin d'extraire un type d'employé différent et traiter chaque branche comme un sous-type différent, ce qui supprimera le « mal instruction if »:
public interface IEmployee
{
double GetPayAmount();
}
public class Employee : IEmployee
{
private double _amount;
public double GetPayAmount()
{
return _amount;
}
}
public class RetiredEmployee : IEmployee
{
private double _amount;
public double GetPayAmount()
{
return _amount * 0.9;
}
}
Bien que le code soit plus facile à maintenir de cette façon, la quantité de code dans le second cas a clairement doublé. Pour une hiérarchie aussi simple, il n'y a pas besoin de refactoring à ce stade. Si vous décidez que vous avez besoin de beaucoup plus de cas spéciaux, alors votre condition peut devenir trop complexe, et vous pouvez facilement le refactoriser plus tard.
semble être lié à cette question: http://stackoverflow.com/questions/1554180/why-is-the-if-statement-considered-evil (pas dupe, juste contexte) –
Cela pourrait aide aussi bien - http://stackoverflow.com/questions/556425/predicate-delegates-in-c –
Un programme sans branchement est en effet un très désolé. –