2011-03-01 4 views
1

Je voudrais avoir un ensemble de méthodes qui peuvent incrémenter/décrémenter une valeur, mais avec une limite inférieure de zéro.Ruby décrément pour limiter

En gros:

def decrement 
    @value -= 1 
end 

Sauf, je ne veux pas aller plus bas que zéro.

Quelle est la meilleure façon de faire cela?

Répondre

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

Ou si vous souhaitez lancer une exception:

def decrement 
    raise RangeError, "can't decrement below zero" if @value.zero? 
    @value -= 1 
end 
+0

Vous gagnez de 10 secondes :-) –

+0

Cela échouera si '0

+0

Point intéressant sur le cas d'échec ... dans ce cas j'utilise des entiers donc je ne peux pas atteindre cette condition d'échec, puis-je? – Andrew

3
def decrement 
    @value = [@value-1, 0].max 
end 
+0

C'est très intelligent, mais pas le plus lisible au premier abord. Cependant, il semble éviter le cas d'échec mentionné sur la réponse de Yjerem. – Andrew

+0

Je pense que c'est moins efficace que votre solution. J'aime toujours proposer des approches alternatives, car on ne sait jamais quand elles peuvent s'avérer utiles dans différentes conditions. – dbyrne

1
def decrement(value) 
    value -= 1 if value - 1 >= 0 
end 
1
def decrement 
    @value -= 1 unless @value - 1 < 0 
end 
Questions connexes