Есть ли лучший способ написать это условие?
if (self.expense.nil? && self.income.nil?) || (!self.expense.nil? && !self.income.nil?) puts "test" end
Вы проверяете, являются ли выражения как истинными, так и ложными. Попробуйте это:
if (self.expense.nil? == self.income.nil?)
Вам все равно, являются ли они оба истинными или ложными, просто они одинаковы.
Несмотря на логику, поскольку вы используете if для проверки на ноль, вы можете сократить код следующим образом:
if ((expense && income) || (!expense && !income)) puts "test" end
Исправьте меня, если я ошибаюсь.
Вы можете использовать закон Деморгана для второй половины условия if
так (!self.expense.nil? && !self.income.nil?) становится !(self.expense.nil? || self.income.nil?)
(!self.expense.nil? && !self.income.nil?)
!(self.expense.nil? || self.income.nil?)