Freqüentemente, quando a sintaxe do idioma exigir que eu cite uma variável que nunca é usada, eu o nomeei _
.
Na minha opinião, isso reduz a desordem e me permite focar nas variáveis significativas no código. Acho que é discreto e produz um efeito "fora da vista, fora da mente".
Um exemplo comum de onde eu faço isso é nomear subconsultas no SQL.
SELECT *
FROM
(
SELECT *
FROM TableA
JOIN TableB
ON TableA.ColumnB = TableB.ColumnB
WHERE [ColumnA] > 10
) _ --This name is required, but never used here
ORDER BY ColumnC
Outro exemplo é uma variável de loop que não é usada.
array = [[] for _ in range(n)] # Defines a list of n empty lists in Python
Uso essa técnica com moderação, apenas quando sinto que um nome descritivo não adiciona nada ao código e, em certo sentido, o tira adicionando mais nomes para lembrar. De certa forma, eu a vejo como semelhante à var
palavra - chave em C #, que também uso com moderação.
Meus colegas de trabalho discordam. Eles dizem que mesmo ter um nome de caractere único (alfabético) é melhor que _
.
Estou errado? É uma prática ruim fazer isso?
fonte
[table].[column]
identificadores, ajuda muito a legibilidade para usar[T].[column]
. Depende do roteiro, é claro. Um pouco de seleção assim é perfeitamente correto, mas se um script for muito grande, eu poderia usar nomes mais descritivos.Respostas:
Todos os nomes devem ser significativos. Se
_
fosse um padrão bem conhecido na sua empresa ou na comunidade em geral, seria significativo como um "nome que não importa". Se não for, eu diria que é uma má prática. Use um nome descritivo para o que você se refere, especialmente porque o nome pode ser importante no futuro.fonte
dummy
seria bom,joined_ab
seria melhor.Eu diria que é uma prática aceitável. Este é um caso raro em que considero que a maioria está errada e precisa atualizar seus conhecimentos sobre idéias de programação recentes. Em muitos idiomas, principalmente nos idiomas funcionais baseados em ML, como Haskell e OCaml, é extremamente comum o uso
_
como uma variável "não utilizada". Mesmo Lua, que não oferece suporte explícito à linguagem, incentiva o uso_
como espaço reservado por convenção.Vários idiomas (Haskell, Lua e DI pensam em detalhes) também oferecem uma convenção em que variáveis que começam com um sublinhado não geram avisos do compilador sobre "variável local não utilizada", que torna
_
o nome mais curto da variável não utilizada. Você poderia usar algo parecido,_unused
mas eu concordo com você que isso causa confusão.fonte
*
selects é uma coisa muito ruim, porque se a tabela mudar, o conjunto de resultados também mudará inesperadamente. Então, eu normalmente precisaria do alias de caractere único para identificar as colunas que estou selecionando. Se você parar de usar*
, para de precisar de um nome "não utilizado"._
é um padrão, não uma variável. É uma diferença sutil, mas significa que você pode usá-lo várias vezes em algo como(x, _, _) = ...
, enquanto tentar vincular a mesma variável várias vezes seria um erro.Em Python
_
é definitivamente aceitável. No entanto, pode entrar em conflito com ogettext
alias_()
.Outras convenções comuns são
dummy
,unused
; sozinho ou como prefixo.Algumas ferramentas de análise de código estão cientes dessas convenções e não emitem avisos de variáveis não utilizados:
_
oudummy
_
,unused
oudummy
fonte
_
de variáveis dummy em python colidirá com o_
último valor retornado. Por exemplo, no intérprete, se você faz5*5
na linha 1; então na linha 2_
terá o valor25
. No entanto, se você definirx,_ = (3,'not used')
, você descobrirá que_
agora énot used
o último valor retornado até vocêdel _
. Você provavelmente não deveria estar usando o_
último valor retornado em código real; mas muitas vezes é útil no intérprete ao experimentar coisas novas._
como o último valor retornado, funciona apenas no shell interativo.Depende do ecossistema em que esse código irá residir. Se
_
for um padrão aceito para indicar "variável dummy" / "saída não utilizada", então, por todos os meios, continue com ele. Caso contrário, descubra o que é e use isso.Algumas linguagens de programação (por exemplo, Haskell) têm esse identificador 'especial' incorporado em sua sintaxe exatamente para os fins mencionados.
fonte
Cuidado, _ já tem um significado intrínseco em algumas línguas
Em Python:
Há também outra menção no PEP 8 (Guia de estilo para código Python):
Em c #:
Geralmente é usado para marcar variáveis privadas que possuem propriedades públicas / internas. Mas a prática geralmente é menosprezada atualmente .
Em JavaScript:
Existe uma biblioteca chamada underscore.js que usa o sublinhado como um prefixo para extensões de protótipo não padrão.
Exemplo:
O que me leva ao meu ponto. O que há de errado com as convenções de variáveis de espaço reservado clássico.
Por que usar uma convenção personalizada que alguns podem interpretar mal quando já existem muitas convenções comuns disponíveis?
fonte
Eu uso "manequim" para esse tipo de coisa. Ou "porcaria", se eu estiver testando algo :) Nomeie suas variáveis para descrever quais são elas. Se forem variáveis fictícias e não utilizadas, nomeie-as como tal.
fonte
Acho que é uma prática ruim porque
você não deve ter variável invisível no seu código. Se você acha que deveria, o motivo provavelmente pode ser discutido.
o idioma Go usa essa palavra-chave para indicar que nenhuma variável é o destino de um dos vários retornos de uma função. Se o seu idioma não tiver retornos múltiplos, não será necessário. Sua convenção de nomenclatura o prejudicará no dia em que você usará um idioma usando _ como uma notação de idioma padrão.
(Não conheço Python: essa construção é realmente necessária?)
fonte
let (a,b,_) = f(x,y,z)
tão bem quanto o quelet f(x,y,_) = (g(x),h(x),g(y))
quer. - E, sim, muitas vezes é útil ter parâmetros fictícios: não como a única definição de uma função, mas para uma função polimórfica ou com definições alternativas de correspondência de padrão é frequentemente a coisa natural a se fazer.Pode ser sintaticamente válido e pode ser bom como parte de um padrão.
Com isso dito, é algo que eu pediria a alguém para alterar em uma revisão de código. Eu também nunca o colocaria em um padrão de codificação e tentaria removê-lo de um já existente. É apenas mais difícil de ler, e não super significativo.
fonte
Eu acho que está errado porque:
1) É mais difícil de ver, pois não há muitos pixels.
2) Se houver mais de um
_
, como você sabe qual? - ou que um novo desenvolvedor 'seguiu as regras' e manteve o uso extremamente local no escopo?3) É uma prática que não ajuda. Usar nomes de variáveis com uma letra é tão antigo (ou seja, minha educação original!). Vou vê-los ... e depois adicionar comentários para dizer o que o código faz e isso é uma prática ruim no mundo de hoje. Eu uso nomes de variáveis longos, tanto quanto possível, para que todos, independentemente do nível de programação ou familiaridade com o código, possam "lê-lo" quase como em inglês. Usar nomes de uma letra é uma prática extremamente comum com códigos mais antigos e com programadores mais antigos (mais uma vez, inclui-me), mas isso não o faz bem.
fonte
_
já está sendo usado em um escopo externo; esse será obscurecido (ou seja o que for que seu idioma fizer nesses casos), mas nenhum deles será realmente usado.Para evitar colisões de namespace e permitir a depuração, caso esse nome de variável seja sua única pista, talvez seja melhor chamá-lo de "join_ab_unused".
Inspirado por Birfl.
fonte
Sim, é uma prática ruim por dois motivos:
fonte
O que você está tentando fazer é codificar uma versão mais agradável do SQL, que não tem o problema de forçar você a inventar um nome para algo inútil.
O sublinhado é quase invisível, então parece que você está nesse idioma. Se apenas o espaço em branco pudesse ser usado como identificador, seria perfeito, certo?
Mas você não está em um idioma diferente, e o que está fazendo não é uma maneira limpa de fazer uma extensão de idioma.
fonte
Depende do idioma. Em java , sim, isso é ruim e pode ser uma tendência perigosa a ser adicionada ao seu código, principalmente porque as ferramentas que usam reflexão não lidam com sublinhados muito bem, pois estão fora das convenções de nomenclatura de variáveis java. Em python , isso também é ruim, mas não tão ruim. No clojure , é 100% aceitável e, de fato, é idiomático para usar _ como espaço reservado em uma declaração let.
Lembre-se de que cada idioma tem sua própria sintaxe e um conjunto de expressões idiomáticas; portanto, você deve avaliar o que é bom / ruim em termos desses idiomas, e não em termos absolutos.
fonte
Isso seria ruim no perl, que usa $ _ (e às vezes _) como uma variável especial.
Em geral, eu ficaria longe disso apenas porque o _ parece ser uma variável específica do idioma. Se eu visse seu código, eu estaria na documentação procurando o que era _, até que percebi que era apenas um manequim. Nada de errado com DUMMY, $ DUMMY, qualquer que seja.
fonte
Eu evitaria sublinhados no início dos vars, a menos que você tivesse certeza de que eles não tendem a indicar outra coisa em um determinado idioma ou estrutura em uso pesado. Por exemplo, em Python, um sublinhado duplo tende a indicar uma var mágica. No JQuery e em outras bibliotecas JS, um único sublinhado tende a indicar uma var de fallback para substituições de namespace. Também é uma convenção de nomenclatura popular para arquivos de inclusão que, por sua vez, tendem a ser transferidos para o código que manipula inclusões na forma de var.
fonte