Venho usando isso há algum tempo para retornar true
ou false
ao construir dados de semente falsos. Apenas me perguntando se alguém tem uma maneira melhor, mais sucinta ou prolixa de retornar true
ou false
.
rand(2) == 1 ? true : false
Venho usando isso há algum tempo para retornar true
ou false
ao construir dados de semente falsos. Apenas me perguntando se alguém tem uma maneira melhor, mais sucinta ou prolixa de retornar true
ou false
.
rand(2) == 1 ? true : false
Respostas:
Um snippet declarativo usando Array # sample :
random_boolean = [true, false].sample
[true, false].sample
é mais rápido do que rand(2) == 1
. Quando eu executei cada operação 10 milhões de vezes, o rand
método era 2.179s. O sample
método era 1.645s.
Que tal remover o operador ternário.
rand(2) == 1
[true, false].sample
mais porque é instantaneamente óbvio o que faz. rand(2) == 1
funcionaria com ruby <1,9, o que é bom.
0
e 1
, você também pode usarrand(2).zero?
Eu gosto de usar rand
:
rand < 0.5
Edit : Esta resposta costumava ser lida, rand > 0.5
mas rand < 0.5
é mais tecnicamente correta. rand
retorna um resultado na faixa semiaberta [0,1), então o uso <
leva a chances iguais de faixas semiabertas [0,0.5) e [0,5,1). O uso >
levaria a chances UNEQUAL de intervalo fechado [0,0.5] e intervalo aberto (.5,1).
rand > 0.3
rand < 0.7
para 70%
Eu costumo usar algo assim:
rand(2) > 0
Você também pode estender Integer para criar um método to_boolean:
class Integer
def to_boolean
!self.zero?
end
end
rand(2).zero?
rand(2)==1
já é um valor booleano?