1

I'd like to have a set of methods that can increment/decrement a value, but with a lower limit of zero.

Basically:

def decrement
  @value -= 1
end

Except, I don't want it to go lower than zero.

What's the best "ruby way" to do this?

Andrew
  • 42,517
  • 51
  • 181
  • 281

4 Answers4

6
def decrement
  @value -= 1 unless @value.zero?
end

Or if you'd like to throw an exception:

def decrement
  raise RangeError, "can't decrement below zero" if @value.zero?
  @value -= 1
end
Paige Ruten
  • 172,675
  • 36
  • 177
  • 197
4
def decrement
  @value = [@value-1, 0].max
end
dbyrne
  • 59,111
  • 13
  • 86
  • 103
  • This is very clever, but not the most readable at first. However it does seem to avoid the fail case mentioned on yjerem's answer. – Andrew Mar 01 '11 at 23:29
  • My guess is that its less efficient than your solution as well. I always like providing alternative approaches anyways, since you never know when they might prove useful under different conditions. – dbyrne Mar 01 '11 at 23:38
1
def decrement(value)
  value -= 1 if value - 1 >= 0
end
Andrew Marshall
  • 95,083
  • 20
  • 220
  • 214
1
def decrement
  @value -= 1 unless @value - 1 < 0
end
Jakub Hampl
  • 39,863
  • 10
  • 77
  • 106