JavaFree.org | RubyOnBr.org

||=

Acompanhar ||= 11 posts, 8 participantes

Avatar Rafael Cruz Rubert 668 posts

Qual o uso correto?

exemplo:

vai retornar ruby

agora:

Vai retornar java

Eu pensava que era assim, se já for aquilo que seja, se não for seja agora.

Mas na verdade é se for vazio seja aquilo, se não for continue sendo o que era antes.

é isto mesmo?

 
Avatar Rondy 120 posts

Bonito o que vc escreveu ;(

Lê assim, brother:
“me dá x. se x não existe, define x como ‘ruby’. me dá x agora.”

if !x
  x = 'ruby'
end
__
x = 'ruby' unless x

Isso sim é poesia…

 
Avatar Rondy 120 posts

Cara, vc é o novo filósofo de rodapé do fórum, huaehehe.

 
Avatar Fernando Luizão 1863 posts

Acho mais simples de entender assim:

Se “x” não estiver inicializado, inicialize com “ruby”.

 
Avatar Rafael Cruz Rubert 668 posts

Realmente coube melhor. Ruby tem umas coisas que eu fico horas pensando hahaha

 
Avatar Mereghost 1476 posts

É uma atribuição condicional.

x = x ? x : outro_x

ou

 
Avatar Fernando Luizão 1863 posts

Se não me engano, o nome “rubístico” mesmo é lazy initialization =).

 
Ds054 Grinvon 130 posts

Exato, se tivese setado para nil, então o “ruby” seria atribuído.

 
Avatar nofxx 1960 posts

Tem outro lado tb, se fosse “se já for aquilo que seja, se não for seja agora.”

Nao sou mestre em C, malloc e friends, mas acho q checar se eh igual pra evitar alocar um valor eh mais pesado que simplesmente aloca-lo.

Tipo,

x = 10
x = 10

vs

x = 10
x = 10 unless x == 10

 
Avatar Shairon Toledo 1428 posts

…se tivese setado para nil…

ou false

 
Avatar Bruno Grasselli 27 posts

Fala pessoal,

Eu já vi no javascript usarem algo como:

Acho que a idéia deve ter vindo mais ou menos daí.

Se variavel for nula (ou false) ela retorna false, então o || vai retornar o próximo valor (que como é uma string equivale a true). Agora se variavel retornar true ele nem chega a segunda condição, porque é || e não só |

É isso mesmo ou eu falei besteira?

Abraços!