um programador, muitas línguas - o dilema do nome


14

Quando você trabalha em várias linguagens de programação, há um problema que você encontra ...

Um nome válido (identificador) em um idioma é inválido em outro. Por exemplo...

var new function thissão palavras-chave em JavaScript, mas você pode usá-las livremente em Python. Da mesma forma, list dict defpode ser usado em JavaScript sem problemas.

Isso é muito comum e algo que os programadores geralmente se familiarizam rapidamente quando programam em vários idiomas.

No entanto, quando você trabalha em colaboração, precisa definir algumas regras / diretrizes para os membros da sua equipe, a fim de garantir consistência e uniformidade no código. Com as equipes, esse problema se torna mais importante do que simplesmente lembrar o que é válido e o que não é enquanto você programa.

Então, minha pergunta é: quais estratégias você adota ...

  • simplesmente junte todas as palavras reservadas presentes em todos os idiomas que você usa, distribua uma lista a todos e abstenha-se de usá-los?
  • aceite a diversidade e se esforce ao "alternar contexto"
  • adotar um terreno intermediário onde um idioma possa usar o outro, mas não vice-versa

(Observação: estou falando apenas de Python e JavaScript nesta pergunta ... mas responda à questão de forma mais ampla)

- ATUALIZAÇÃO -

Obrigado por todas as respostas. Portanto, o consenso geral que vejo emergir é permitir que os programadores usem qualquer nome, independentemente do que façam em outras linguagens - desde que os nomes sejam descritivos, não faz mal.


1
Ou apenas exija que todo nome de variável comece com a $. Funciona em PHP, JavaScript e alguns compiladores C / C ++ . Com toda a seriedade, isso é uma coisa que o PHP acertou no IMHO.
Joey Adams

Respostas:


46

Tendo programado em várias línguas ao longo dos mais de 30 anos de minha experiência, eu diria que tentar encontrar padrões de nomes que funcionem em qualquer idioma é provavelmente uma idéia do céu.

No início da minha experiência, tentei usar as macros #define em C para criar coisas que tornariam meu código C parecido com o código Pascal que eu estava usando antes disso. Eu estava tão acostumado a programar em Pascal que imaginei que se eu pudesse fazer o C funcionar como Pascal, isso me tornaria mais produtivo. Logo descobri que estava errado.

O que me tornou mais produtivo foi aprender C e não tentar alavancar a sintaxe Pascal para outro idioma só porque me deixou mais confortável.

Eu acho que você potencialmente restringirá seus programadores impedindo-os de fazer algo em um idioma, apenas porque é errado fazê-lo em outro idioma que você está usando.

Se você limitar suas convenções de nomenclatura a coisas que façam sentido para explicar o uso da variável, provavelmente criará um bom código, em qualquer idioma.


3
Nomes que fazem sentido é toda a razão pela qual você precisa.
JeffO

24

Você não deve nomear as coisas "lista", "novo", "var", "isto" em primeiro lugar, pois elas não são descritivas o suficiente em nenhum idioma.


2
Idem "função". Se não é uma palavra-chave, simplesmente não deveria ser.
MPelletier

11

Mudar de, digamos, javascript para python já é uma mudança de contexto. Não acho que seja ruim se os nomes das variáveis ​​mudarem, especialmente se as alterações no nome forem idiomáticas com o idioma. Pode-se até argumentar que opções de contexto mais difíceis podem ajudar nesse caso, pois ajuda a reforçar "cara, você está escrevendo javascript, não python agora".


7

Eu acho que se você estiver usando nomes descritivos de variáveis, o problema que você descreve deve ser mínimo. Com isso dito, se for mínimo, aceitar a mudança de contexto causada pela nomeação de variáveis ​​entre idiomas também será mínimo.


5

A maioria das palavras reservadas (em qualquer idioma) é bastante geral. Prefiro nomes de variáveis ​​/ funções mais descritivos e isso significa que quase nunca encontro esse problema. Eu deveria admitir ter sido infectado por Charles Simonyi com seu esquema de nomes original - isso foi na Xerox no final dos anos 70, antes mesmo de ser chamado Notação Húngara - e isso também tende a significar que os nomes são algo que não são humanos sãos jamais usaria como palavras reservadas.


5

Você não deve perder seu tempo escrevendo diretrizes até descobrir que esse é um problema real , não hipotético.

Uma situação em que posso pensar em que isso pode se tornar um problema é quando você compartilha estruturas de dados entre linguagens de programação. Por exemplo, se você tem um objeto Javascript no lado do cliente que é refletido em um objeto Python no lado do servidor e, naturalmente, deseja que eles tenham os mesmos nomes para seus membros. Nesse caso, a regra é simples: não use nomes que sejam palavras reservadas em nenhum dos idiomas. É isso aí. Escreva isso nas diretrizes, se desejar. Agora vá para tarefas mais importantes.

BTW, nem list nem dict são uma palavra reservada no Python. Eles podem ser usados ​​como nomes de variáveis, apesar de muito ruins.


3

Na minha experiência, a correção para isso é ter amplas convenções de nomenclatura que se aplicam a todos os idiomas. Seja JavaScript, C # ou alguma outra linguagem descolada, a maneira como as variáveis ​​e as classes são nomeadas pode se tornar um padrão dentro de uma base de código, que é como eu geralmente consideraria resolver esse problema. As convenções podem ser acordadas por consenso de todos, simplesmente a maioria quer uma diretriz, a gerência diz: "É assim que fazemos", ou algumas outras possibilidades que eu imagino.

Raramente vejo o problema do identificador que você descreve porque na maioria das vezes minha classe ou nome de variável é descritivo o suficiente para não entrar em conflito com tanta facilidade. Ao mesmo tempo, se alguém trabalha com outras pessoas, além de ter clareza sobre como a equipe deseja lidar com isso, é o ponto importante.


2

Não vejo como isso pode ser um problema, a menos que você planeje mover o código de um idioma para outro. Se você pessoalmente esquecer que nomes de variáveis ​​são válidos, não use um nome de variável, a menos que tenha certeza de que é válido. Mas se outras pessoas usarem nomes de variáveis ​​inválidos, seu código não será compilado ou executado. Portanto, se você estiver trabalhando no código de outra pessoa e eles chamarem algo de 'var', você pode ter certeza de que é um nome válido em qualquer idioma que esteja usando.

Se você planeja mover o código de um idioma para outro, poderá precisar de uma lista de nomes proibidos. Por exemplo, meu documento de práticas de codificação C proíbe o uso de new ou class como uma variável, pois isso dificulta a porta para o C ++. Nesse caso, é razoável definir regras que facilitem esse trabalho, se necessário,


-2

Basta seguir o CamelCase com letras minúsculas. Funciona em qualquer lugar. Isso se chama procurar o menor denominador comum entre sistemas incompatíveis, e você se encontrará fazendo isso com frequência!


5
Exceto em alguns idiomas, o caso da primeira letra é significativo em termos de sintaxe.
Karl Bielefeldt

1
... e viola o quase-padrão cultural estabelecido em várias línguas.
tdammers

Húngaro notação é muito mais ofuscando que CamelCase ... ;-)
Zeke Hansell

@ Karl: obviamente, a sugestão é limitada aos limites da linguagem. Você sabia que o Java pode iniciar nomes de variáveis ​​com um cifrão? Eu vi código Java que se parece com PHP, era óbvio que o programador anterior aprendeu a programar!
dotancohen 28/08

@dotancohen: Lembro-me de assistir a um programa de pascal em uma revista de hobby há muitos anos, quando pascal estava apenas fazendo a cena. Era óbvio pela estrutura do código (e pelo fato de que eles usavam variáveis ​​globais para passar valores para sub-rotinas e funções) que o programa era um dos melhores programas básicos que já vi escrito em Pascal. ;-)
Zeke Hansell 23/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.