Em linguagens estáticas como Java / C #, geralmente uso constantes para cadeias ou números, em vez de inseri-las somente no código. No entanto, costumo evitar essa prática em JavaScript. Mais recentemente, como alguns outros codificadores ao meu redor adotaram essa abordagem no JS, decidi que provavelmente deveria solidificar meu raciocínio, ou o deles.
Não há sintaxe de declaração "const" real no JavaScript. Geralmente, apenas aceitamos uma política informal de não alterar as propriedades em maiúsculas. Mas minha opinião é geralmente evitá-los completamente, porque a maioria de seus benefícios se perde em JavaScript. Em Java, uma sequência incorreta fará com que o programa falhe ao tentar executá-lo, quando você o corrige e segue em frente. Ter um verificador estático em que ambas as instâncias estão apontando para a mesma constante elimina esse problema, pois ele pode ser encontrado em tempo de compilação. Mas o JavaScript simplesmente terá esse problema em todo o lugar, pois você SEMPRE descobrirá a correção da ortografia no tempo de execução :
Library = { doThing: function() }
setTimeout(function()
Liberry.doThing()
// No such object: Liberry
}, 0);
A melhor proteção contra isso, geralmente, é "use strict". Para os desenvolvedores que preferem, eu estou bem com eles usando isso para encontrar problemas com variáveis não declaradas mais rapidamente. Mas minha opinião é que o fornecimento de constantes de string para APIs REST, etc., na verdade não protege você contra nada. Outro exemplo:
CompanyAPI.constants.ENROLL_URL = "/rest/enroll";
CompanyAPI.constants.FIRST_NAME = "firstName";
ajax({url: CompanyAPI.constants.ENROLL_URL,
data: CompanyAPI.constants.FIRST_NAME
});
// vs.
ajax({url: "/rest/enroll",
data: "firstName"
});
... Você pretendia escrever o texto acima, mas depois fez erros de digitação. Ops.
ajax({url: CompanyAPI.constants.ENROL_URL,
data: CompanyAPI.constants.FIRS_NAME
});
// vs.
ajax({url: "/rest/enrol",
data: "firsName"
});
O baseado em constante ainda fornecerá indefinido , enquanto "firsName" não é melhor. Para esse fim, costumo ver isso como um benefício de linguagens estáticas, e não me incomodo em ter um sistema para corrigi-lo (além de talvez começar a usar "use strict" para depuração). Outras pessoas podem me dizer qual é a prática preferida para constância de string / número inteiro?
EDIT: Para esclarecer, minha preferência é geralmente colocar seqüências de caracteres como "firstName" diretamente alinhadas, sem declaração constante de nível superior - as penalidades por erros de ortografia são da mesma maneira. Seqüências de caracteres que podem ficar longas, como uma URL REST, tenderei a definir na parte superior do arquivo.
FIRST_NAME
em particular, que me fez pensar - não muda por usuário?
FIRST_NAME
? Parece que vem de algo do lado do servidor e é passado para o javascript. E isso combinado com você dizendo que você é Java / C #, tenho a sensação de que você está interpretando mal para que servem essas variáveis: Separando os dados do código, para que o.js
arquivo possa ser armazenado em cache pelo navegador ...