Você deixa parênteses dentro ou fora em Ruby? [fechadas]

Respostas:

95

Dos Elementos do Estilo Ruby

Ruby permite que você omita parênteses, em geral, resista a essa tentação.

Os parênteses tornam o código mais fácil de seguir. O estilo geral do Ruby é usá-los, exceto nos seguintes casos:

  • Sempre deixe os parênteses vazios
  • Os parênteses podem ser omitidos em um único comando rodeado por delimitadores ERb - os marcadores ERb garantem que o código ainda esteja legível
  • Uma linha que é um único comando e um único argumento simples pode ser escrita sem o parêntese. Pessoalmente, acho que faço isso cada vez menos, mas ainda é perfeitamente legível. Eu tendo a não gostar de linhas únicas no código ruby ​​regular que têm vários argumentos e sem parênteses.
  • Muitas linguagens de domínio específicas baseadas em Ruby (como Rake) não usam parênteses para preservar uma sensação de linguagem mais natural em suas instruções.
Jason Navarrete
fonte
27

Eu uso os parênteses como comentários para ajudar o futuro eu ... que provavelmente terá menos células cerebrais do que o meu atual :-)

Nada pior do que olhar para algum código que você escreveu há 2 anos e entendê-lo mal, de forma que você quebre algo enquanto o modifica.

Se os parênteses vão salvar o futuro de alguns minutos (ou horas) no futuro, colocarei tantos quantos forem necessários para tornar a declaração cristalina.

John
fonte
2
+1 "Eu uso parênteses como comentários para ajudar o futuro eu ... que provavelmente terá menos células cerebrais do que o meu atual :-)" Isso é TÃO verdade, e exatamente por que eu faço isso. Também tenho misericórdia de todos os que me seguem e que têm de usar o meu código. Resumindo, é uma questão de manutenção.
The Tin Man
9

Eu os deixo de fora quando estou fazendo coisas do tipo DSL, como t.column ou has_many in rails. No resto do tempo, geralmente se resume à clareza e é provavelmente uma divisão uniforme.

Matt Burke
fonte
8

Acho que faço as duas coisas, mas definitivamente as mantenho para aumentar a legibilidade e evitar declarações que pareçam ambíguas.

Eli
fonte
8

Se você quer dizer em chamadas de função, sempre coloco parênteses porque é sempre mais fácil de ler. Se você quer dizer em condições (if, while), só coloco parênteses quando são necessários.

esteira
fonte
2
Concordo. Em php, por exemplo, posso localizar rapidamente uma var pelo prefixo $ .. em javascript posso reconizar uma função entre parênteses (). Em Ruby, a diferença entre var ou func (sem parênteses) nem sempre é fácil de ver.
7

Tento deixá-los de fora, se possível. Acho que torna o código mais fácil de ler (em geral).

mipadi
fonte
4

O que for mais legível geralmente.

Mas eu sempre uso parênteses quando estou aninhando chamadas de função dentro dos parâmetros de outras

Gareth
fonte
2

Eu tendo a deixá-los de fora ao fazer afirmações como assert_equal. Talvez seja para torná-lo semelhante a uma linguagem de domínio específico.

Andrew Grimm
fonte
1

Se você já programa há muito tempo, provavelmente terá vontade de adicionar parênteses e, em muitos casos, há boas razões para isso.

O código é mais agradável para os olhos, na minha opinião, e ainda não tive nenhum problema - se você precisar de parênteses, saberá de antemão antes de executar o script de depuração.

boulder_ruby
fonte
4
"Meu professor me diz que é inevitável". É, e pode ser difícil de depurar. Eu recomendo usá-los para evitar atribuição de parâmetro ambígua.
The Tin Man
Votos negados como "agradáveis ​​aos olhos" é, IMO, uma péssima razão para deixar de fora os parênteses em torno dos argumentos da função.
Marcello Romani,
2
falando com a multidão de não parentes, me deparei com esse problema outro dia, if owner.is_a? thing //worked fine if owner.is_a? thing && x > 1 //not fine estou aprendendo ruby ​​há apenas algumas semanas e onde trabalho usa a menor quantidade de caracteres possível e se você vier de qualquer outra língua, há um aprendizado curve para saber quando você está passando um hash implicitamente, um array de símbolos, passando de símbolos para uma função ... não sou um fã.
Mega Man
@MegaManif owner.is_a? thing and x > 1
anna328p
1
@DmitryKudriavtsev andnão tem a mesma precedência de operador que &&tem
Mega Man