Como abreviar nomes de variáveis ​​[fechado]

8

Eu sempre luto na abreviação de nomes de variáveis. Existe algum padrão para abreviar nomes de variáveis?

Huzaifa
fonte
1
Isso é uma duplicata do stackoverflow.com/questions/4358840/… ?
11
Pegue a dica. Se for difícil, pare de fazê-lo.
S.Lott
3
Trabalhar com identificadores abreviados no código que você não escreveu causa dano cerebral.
Rick Sladkey
2
seguir rigidamente as regras é uma causa ou um sinal de dano cerebral. De qualquer maneira, o importante é o julgamento.
T Duncan Smith
1
@ T Duncan Smith: De onde isso veio? Você acabou de sugerir que aqueles que concordam com a resposta aceita a essa pergunta têm dano cerebral. Eu estava brincando que acho difícil ler código criptográfico.
Rick Sladkey

Respostas:

66

O padrão que eu uso é não abreviar nomes de variáveis, a menos que a abreviação seja mais legível que a versão completa ( ipara índices de iteração, por exemplo). Nomeamos as coisas para que possamos nos comunicar. Abreviar nomes de variáveis ​​geralmente diminui sua capacidade de comunicação.

Rein Henrichs
fonte
5
Não tenho certeza se concordo inteiramente. Não abrevio muito, mas acho que abreviar em alguns casos é uma boa ideia. Eu consideraria nomes de variáveis ​​longos em um escopo local curto muito irritantes, na verdade. Escrevo muitas funções em que "p" se refere a um ponto no espaço 3. Eu acho que isso é tão claro quanto "thePoint" e mais fácil de ler, se a função tiver a intenção de operar em um ponto de alguma maneira.
T Duncan Smith
4
Como eu disse, prefiro nomes completos ", a menos que a abreviação seja mais legível". Parece que realmente concordamos.
Rein Henrichs
@ Duncan, talvez isso esteja claro para você, mas nem todos verão imediatamente a correlação entre a abreviação e o que você realmente quer dizer. Eu acho que todas as variáveis ​​devem ser totalmente descritivas, a menos que você possa torná-las imediatamente compreensíveis para todos os outros usuários. Como Rein afirmou, usar 'i' em um loop é um desses cenários em que acredito que seja aceitável.
Darren Young
1
Eu quase concordo Eu diria, não abrevie, a menos que a abreviação seja tão comum, que não haja dúvida sobre o que significa. Um bom exemplo é o System.IO. Comum também pode ser comum apenas na empresa em que você trabalha. Isso obviamente significa que os novos funcionários não saberiam exatamente o que isso significa. Mas fazer parte da empresa significaria que mais cedo ou mais tarde eles aprenderiam a linguagem da empresa.
Pete
3
@ Duncan, eu ficaria feliz em me livrar de qualquer coisa que não transmita informações em troca de não abreviar o resto. "thePoint" é um odeio meu, pois "o" não contribui precisamente com nada - mas ainda pode ser piorado abreviando para "thePt" em vez de "point" ou "p".
perfil completo de Julia Hayward
13

Como não sou programador em C #, não posso dar muitos conselhos sobre convenções em C #. Mas tenho algumas reflexões sobre abreviações.

À medida que envelheci e tive mais experiência, descobri-me cada vez menos. Admito que não era um datilógrafo muito bom quando comecei a programar. Eu fiquei melhor nisso desde então;). Abreviarei livremente as variáveis ​​com escopo muito limitado, para que eu possa ver toda a sua vida útil em uma tela. Mas, além disso, prefiro não fazê-lo - nunca abrevio para salvar a digitação.

Ainda tento manter minhas linhas abaixo de 80 caracteres. Não tenho certeza se isso faz sentido nos dias de hoje, mas é um hábito antigo. Então, vou abreviar se um nome de variável for muito longo. Mas antes de fazer isso, tentarei encontrar um nome mais sucinto que seja igualmente claro - todo o resto igual menor é melhor (falando da forma expandida).

Onde você abrevia, é mais importante, eu acho, que você sempre abrevie da mesma maneira em uma determinada base de código e nas bases de código relacionadas. Provavelmente, seu primeiro instinto é o ideal, pois será mais fácil lembrar, mas pode valer a pena conferir com outras pessoas no mesmo projeto. Hoje em dia, trabalho principalmente com outro programador, em um escritório aberto, cheio de não programadores. Eles acham que somos loucos, porque geralmente temos discussões detalhadas sobre coisas como abreviar consistentemente nomes de variáveis ​​relacionadas ou ordenar parâmetros de forma consistente em chamadas de função etc. Mas nomear importa, mesmo para duas pessoas. Em equipes maiores, isso se torna ainda mais importante. Uma coisa sobre a qual sou bastante religioso é consertar inconsistências em coisas assim assim que as vejo.

EDIT: algumas abreviações são boas, eu acho. No meu trabalho atual, grande parte do código que escrevo tem a ver com a avaliação de splines e outras funções paramétricas, em determinados valores de parâmetros. Nossa base de código é de fato inconsistente nesse sentido. Eu sei que você é usado em alguns lugares e param (uma abreviação em si) é usado em outros. U é uma abreviação geralmente entendida para parâmetro neste domínio, então acho que devemos passar por isso e torná-lo consistente. Eu ficaria bem com qualquer um de u, param ou parâmetro. Nós os usamos tanto que é improvável que haja qualquer confusão, desde que usemos apenas um . Mas eu preferiria você.

É pior do que isso - na verdade, temos vários tipos de parâmetros. E temos mais de um nome para alguns deles.

A razão pela qual isso ficou inconsistente é o livro didático. Descobrimos que precisávamos mapear entre seis espaços de parâmetros - os motivos são complicados, mas basicamente precisávamos ter parâmetros que correspondessem ao espaço de parâmetros, espaço de parâmetros normalizado, espaço de comprimento de arco, espaço de comprimento de arco normalizado, espaço de comprimento de arco normalizado, espaço por partes e normalizado espaço por partes. Não percebemos, a princípio, que teríamos que mapear entre todos esses espaços. E éramos inconsistentes na maneira como nomeamos parâmetros que descrevem pontos nesses espaços.

Às vezes, isso acontece: seu aplicativo cresce e você faz algumas coisas inconsistentes enquanto o cresce. O importante é que você reconheça que ficou bagunçado e entre e conserte antes que a bagunça infecte todo o resto e você acabe com uma pilha de entulho.

T Duncan Smith
fonte
Interessante, supondo que você use o visual studio, eu não abreviaria os parâmetros, pois eles apareceriam assim que você digitasse "myfunc (" e você não quer que ele diga double createBox(string tb, int cir, double pmj), apenas um pensamento a acrescentar
Mark Lalor,
Eu uso principalmente o emacs. Eu sou um pouco de dinossauro, suponho, mas também tenho que trabalhar com alguns idiomas (ao mesmo tempo, no mesmo código) em várias plataformas. Às vezes, abrevio os parâmetros se a abreviação é óbvia (e consistente), porque tento funções curtas o suficiente para poder vê-las todas em uma página, mas geralmente não o faço, porque faço o possível para manter as assinaturas de funções curtas de qualquer maneira . O mais importante é a consistência - se "o mesmo" parâmetro (conceitualmente) for abreviado em um local, deve sempre ser assim.
T Duncan Smith
1
De qualquer forma, o ponto principal aqui, IMHO, nem mesmo permite que você digite automaticamente a coisa certa sem procurá-la (embora isso seja um bônus). O ponto principal é reduzir a carga cognitiva ao ler o código posteriormente. É um clichê, mas você costuma ler até seu próprio código muito mais vezes do que escreve. Se as idéias essenciais são essencialmente difíceis, você deseja eliminar o máximo de carga cognitiva não essencial possível. A consistência ajuda aqui. É um ideal impossível, mas o código ideal deve conter apenas dificuldades irredutíveis.
T Duncan Smith
7

O vry rsn não dbbrvt st mk sr th cd s rdbl nd mntnbl por exemplo

int accountBalanceInSavings

-> pode ser abreviado para

int accBalInSaving

Observe que duas das quatro palavras são curtas (conta-> acc e Saldo-> Bal), mas as outras duas não. Qual regra é aplicada aqui - abrace as 2 primeiras palavras, não são "palavras com mais de 6 letras", porque 2 7 letras eram e uma não era.

Então, poderia / deveria ser 'accBalInSav', yuk yuk yuk .......

Minha experiência, à medida que os programadores ficam mais velhos e mais sábios, abrevia cada vez menos. Na minha idade, provavelmente estamos tentando compensar os pecados de nossa juventude ...

Lembre-se de que o código é escrito uma vez (ok, muitos mais do que uma vez) e lido milhares de vezes.

mattnz
fonte
3
Se eu o visse fora de contexto, não teria idéia do que significa accBalInSaving. É também o mesmo longa como savingsBalance
Richard Tingle
Se alguém tiver que usar uma variável como accBalInSaving, algo está errado no design - a variável carrega muitas informações de contexto que realmente deveriam estar implícitas; se fosse uma propriedade da Accountclasse, por exemplo, não haveria necessidade de colocar "conta" em seu nome. E quando for esse o caso, abreviar é apenas um analgésico que ajuda a varrer esse problema para debaixo do tapete.
Konrad Morawski
3

Há uma pergunta semelhante sobre nomes de caracteres únicos, Usando caracteres únicos para nomes de variáveis ​​em loops / exceções .

Minha resposta então, como agora, é mantê-los curtos onde o escopo é pequeno. Por exemplo, um parâmetro de uma função curta é mais legível se for curto e ocupa menos espaço. Uma variável de toda a classe deve ser muito descritiva.

O livro clássico de Steve McConnell , Code Complete, é ótimo para coisas como essa.

Richard
fonte
2

Não acredito que haja regras oficiais ou comuns para abreviações. Geralmente, um sistema de abreviações é desenvolvido por cada indivíduo e dentro de cada projeto individual. Pode haver certas regras para a política de estilo de código-fonte da empresa, mas isso também varia de acordo com a empresa.

Em uma nota lateral, por que abreviar? Isso resultará em apenas você entender o significado das abreviações. Use nomes completos e descritivos para variáveis. Isso levará ao código de auto-documentação.


fonte
2

Em caso de dúvida, soletre.

O objetivo de um nome de variável é para que o significado do código seja mais claro. A menos que a abreviação seja muito óbvia, você também pode usar a menor possível. Nomes de variáveis ​​e nomes de funções são normalmente os únicos bits da linguagem humana no código e, portanto, agem como 'marcos' para o olho humano encontrar partes relevantes do código (ou, em uma grande base de código, ferramentas como grepou ack) e também como pistas. para compreensão.

Quando a próxima pessoa ler seu código, ela agradecerá. Essa pessoa pode muito bem ser você daqui a um ano. Eu tenho muito código que lamento abreviar, então hoje em dia eu tento evitá-lo.

Não há problema em abreviar quando ...

... Quando o formulário abreviado é usado no inglês falado ou escrito por mais do que apenas as pessoas que trabalham no seu projeto (muitos dicionários fornecem esse tipo de informação ao lado do termo que definem).

var extensible_markup_language_element; // don't do this
var xml_element; // better
var element; // possible if the name of the function or the documentation make it clear you're dealing with XML and not the periodic table
docs.toString(); // most people capable of reading code know docs == documentation

... Quando a abreviação se refere inequivocamente a um único conceito e seria instantaneamente reconhecida por alguém que não está familiarizado com a base de código. Mesmo assim, um comentário ou uma documentação ajuda.

var auth = user.auth;
if (auth) // If the user is authenticated?
          // If the user is authorised to do something?
          // If the authentication function exists for that user group?
          // If some setting called auth is turned on for that user?
          // If the user is the author of the document in question?
          // If the user has some authority?

var attrNames = retrieveAttrs();
if (attrNames)  // hm, attrNames sounds like an array of strings - which will be boolean true even if empty - this if looks like a bug!

const MDF // author is writing an iOS app for ordering hand-carved artisanal fibreboard so anyone familiar with the problem domain knows this has plainly nothing to do with Microsoft Database Files. Though maybe the first time it comes up in the code the author should perhaps still put its full name

... Quando o nome da variável existir apenas em um único escopo ou função pequena e você não esperar que o usuário obtenha significado do nome, use um único caractere. Em tais casos, ie jsão comuns.

foreach $i (1..10) { say $announcement->[$i] }

... Ao escrever uma interface (ou seja, não um nome de variável, portanto fora do escopo da pergunta, mencionado apenas porque nomes de variáveis ​​e interfaces que os definem costumam usar o mesmo vocabulário), nesse caso outras regras podem ser aplicadas, por exemplo:

some_command --transaction-message "Done" # a bit wordy - keep, but ALSO allow for convenience:
some_command --msg "Done" # might be useful
some_command -m "Done"    # if you can spare -m

... Quando sua base de código precisar se referir ao mesmo conceito várias vezes no mesmo projeto e quando a abreviação puder ser definida em um guia de estilo para esse projeto e quando for inequívoco. Se o seu projeto não é grande o suficiente para um guia de estilo, não é grande o suficiente para valer a pena.

Não vou fornecer um exemplo de código para este porque, por definição, ele funciona apenas em um projeto grande, mas veja também o próximo item:

... Ao trabalhar em um projeto estabelecido que teve vários colaboradores e um guia de estilo que exige abreviações. Nesse caso, abrevie apenas de acordo com o guia de estilo, mas procure problemas e esteja preparado para fazer anotações com comentários (como "esta é uma lista de nomes de atributos como seqüências de caracteres").

Os tipos devem terminar em "_t"; Definições de estrutura bruta em "_struct"

- https://metacpan.org/source/SHLOMIF/XML-LibXML-2.0117/HACKING.txt

Um pensamento final: se você ainda possui nomes de variáveis ​​inaceitavelmente longos (por exemplo, compostos por quatro ou mais unidades semânticas como totalAfterTaxInLocalCurrency), pode ser um sintoma de que seu código está tentando fazer muito em um único escopo e que suas funções precisam ser refatoradas out ou suas variáveis ​​podem ser mais logicamente gerenciadas em um único objeto.

user52889
fonte
0

A razão pela qual abreviamos variáveis ​​é parar de digitar variáveis ​​grandes, mas, ao mesmo tempo, a variável abreviada deve ser explícita o suficiente para que você possa entender o que ela contém, em vez de voltar para onde foi declarada ou instanciada primeiro. Então, por exemplo:

int accountBalanceInSavings

-> pode ser abreviado para

int accBalInSaving

---> mas abreviando-o para

int accBal

Definitivamente, não seria uma boa opção, pois não seria possível entender o que a variável contém apenas olhando para ela.

Gaurav Sehgal
fonte
2
Eu confundiria accBalInSavingcomaccumulated Bal In Savings
KajMagnus 10/10
-4

Você não deve abreviar coisas para abreviá-las, mas para sua conveniência / outras pessoas, mas se desejar, uma regra geral que eu tenho para abreviação é se uma palavra tiver mais de quatro ou cinco letras, Vou abreviá-lo para as três primeiras letras significativas dessa palavra, por exemplo:

int damagePerSecond;

pode ser abreviado para

int dmgPerSec;

ou se você quiser o mais curto possível,

int dps;
deus dos lhamas
fonte
1
Isso não nada para as respostas já dadas
Jan Doggen