В этой конкретной ситуации ветвь if-else является вашим самым простым решением.Это просто потому, что существует слишком много альтернатив для сравнения, и вы можете быть уверены, что больше никогда не будет.По сути, ваш код должен соответствовать строчкам
if( in == "==" )
cond = salary[i] == 9000;
else if( in == "!=" )
cond = salary[i] != 9000;
// ...
else
// throw, return -1, raise a flag or burst out in laughter
Это на самом деле безопаснее, чем динамическое eval()
, потому что здесь вы дезинфицируете ввод.Вы убедитесь, что там нет вредоносного кода, по типу атаки Little Bobby Tables.
Конечно, вы могли бы использовать здесь полиморфизм, но смысл полиморфизма - поддержка open-альтернативы законченного типа.Когда вы хотите добавить случай, полиморфизм позволяет вам сделать это с легкостью.Но вам нужно проделать определенную работу, чтобы поднять основы, и здесь есть ровно 6 вариантов сравнения.Или 7, если вы хотите добавить поддержку произвольного предиката.