Venho usando isso há algum tempo para retornar trueou falseao construir dados de semente falsos. Apenas me perguntando se alguém tem uma maneira melhor, mais sucinta ou prolixa de retornar trueou false.
rand(2) == 1 ? true : false
Venho usando isso há algum tempo para retornar trueou falseao construir dados de semente falsos. Apenas me perguntando se alguém tem uma maneira melhor, mais sucinta ou prolixa de retornar trueou 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 randmétodo era 2.179s. O samplemétodo era 1.645s.
Que tal remover o operador ternário.
rand(2) == 1
[true, false].samplemais porque é instantaneamente óbvio o que faz. rand(2) == 1funcionaria com ruby <1,9, o que é bom.
0e 1, você também pode usarrand(2).zero?
Eu gosto de usar rand:
rand < 0.5
Edit : Esta resposta costumava ser lida, rand > 0.5mas rand < 0.5é mais tecnicamente correta. randretorna 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.7para 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)==1já é um valor booleano?