Pergunta

Eu me pergunto por ruby ??dar and, or menos precedência do que &&, ||, e operador de atribuição? Há alguma razão?

Foi útil?

Solução

Meu palpite é que é um carry-over direta do Perl. Os operadores or e and foram adicionados mais tarde em Perl 5 para situações específicas foram precedência mais baixa foi desejado.

Por exemplo, em Perl, aqui nós desejamos que || tiveram menor precedência, de modo que podemos escrever:

try to perform big long hairy complicated action     || die ;

e certifique-se de que o || não ia devorar parte da ação. Perl 5 or introduzidos, uma nova versão do || que tem baixa precedência, exatamente para este fim.

Um exemplo em Ruby onde você poderia usar or mas não ||:

value = possibly_false or raise "foo"

Se você usou ||, seria um erro de sintaxe.

Outras dicas

A diferença é prioridade. ||, && tem precedência maior do que =, mas and, or têm menor. Então, enquanto você pode fazer:

a = nil || 0

Você teria que fazer:

a = (nil or 0)

para obter mesmo efeito. Se você fizer isso:

a = nil or 0

O resultado da expressão ainda seria 0, mas um valor seria nulo.

Eles têm muito baixa precedência para que os operandos não tem que ser envolto em parênteses, como é o caso com && e ||.

Ser capaz de controlar a precedência de seus operadores às vezes é útil, especialmente se você está preocupado com a legibilidade -. Parêntese extra na instruções condicionais, por vezes, podem obscurecer a lógica real

Para ser franco, porém, eu acho que a razão Ruby tem os níveis de precedência boolean ele faz decorre principalmente do fato de que Matz era um programador Perl antes que ele escreveu Ruby, e emprestado muito da sintaxe núcleo e operadores de que linguagem.

Eu acredito que a idéia é especificamente para obtê-los abaixo dos operadores de atribuição, para que possa escrever testes de lógica com as atribuições, mas sem parênteses.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top