Certa vez, ouvi dizer que deixar o aparelho em declarações de uma linha poderia ser prejudicial no JavaScript. Não me lembro mais do raciocínio e uma pesquisa no Google não ajudou muito.
Existe alguma coisa que faz com que seja uma boa ideia colocar todas as instruções entre chaves no JavaScript?
Estou perguntando, porque todo mundo parece fazê-lo.
javascript
Torre
fonte
fonte
Respostas:
Não
Mas eles são recomendados. Se você expandir a declaração, precisará delas.
Isso é perfeitamente válido
No entanto, é altamente recomendável que você sempre use chaves, porque se você (ou outra pessoa) expandir a declaração, isso será necessário.
Essa mesma prática segue em todas as linguagens de estilo de sintaxe C com chave. C, C ++, Java e até PHP suportam instruções de uma linha sem chaves. Você precisa perceber que está salvando apenas dois caracteres e, com os estilos estimulantes de algumas pessoas, nem sequer está salvando uma linha. Eu prefiro um estilo completo (como segue), por isso tende a ser um pouco mais longo. A troca é atendida muito bem com o fato de você ter uma legibilidade de código extremamente clara.
fonte
Há um aspecto de legibilidade - quando você tem instruções compostas, pode ficar muito confuso. Recuar ajuda, mas não significa nada para o compilador / intérprete.
E depois há um aspecto de extensibilidade:
O pensamento é que, se você sempre tiver colchetes, precisará inserir outras instruções dentro desse bloco.
fonte
if (a===true) alert(a);
. Agora está claro!A pergunta pergunta sobre declarações em uma linha. No entanto, os muitos exemplos fornecidos mostram razões para não deixar de fora as chaves com base em várias declarações de linha. É totalmente seguro não usar colchetes em uma linha, se esse for o estilo de codificação que você preferir.
Por exemplo, a pergunta pergunta se está tudo bem:
Não pergunta se está tudo bem:
Eu acho que deixar colchetes de fora é preferível, porque torna o código mais legível com sintaxe menos supérflua.
Meu estilo de codificação é nunca usar colchetes, a menos que o código seja um bloco. E nunca usar várias instruções em uma única linha (separadas por ponto e vírgula). Acho isso fácil de ler e claro e nunca tenho problemas de escopo nas declarações 'if'. Como resultado, o uso de colchetes em uma única declaração if condition exigiria 3 linhas. Como isso:
Usar uma linha if é preferível, pois usa menos espaço vertical e o código é mais compacto.
Eu não forçaria outras pessoas a usar esse método, mas funciona para mim e não poderia discordar mais dos exemplos fornecidos sobre como deixar de fora os colchetes leva a erros de codificação / escopo.
fonte
/*eslint curly: ["error", "multi"]*/
Tecnicamente não, mas de outra forma absolutamente Sim !!!
Esqueça "É uma preferência pessoal", "o código funcionará bem", "está funcionando bem para mim", "é mais legível" yada yada BS. Isso pode facilmente levar a problemas muito sérios se você cometer um erro e, acredite, é muito fácil cometer um erro durante a codificação (não acredite?), Confira a famosa Apple falha ).
Argumento: "É preferência pessoal"
Não não é. A menos que você seja uma equipe de um homem saindo em Marte, não. Na maioria das vezes, haverá outras pessoas lendo / modificando seu código. Em qualquer equipe séria de codificação, essa será a maneira recomendada, portanto não é uma 'preferência pessoal'.
Argumento: "o código funcionará perfeitamente"
O mesmo acontece com o código do espaguete! Isso significa que está tudo bem em criá-lo?
Argumento: "tem funcionado bem para mim"
Na minha carreira, vi muitos bugs criados por causa desse problema. Você provavelmente não se lembra de quantas vezes comentou
'DoSomething()'
e ficou perplexo com o motivo'SomethingElse()'
:Ou acrescentou 'SomethingMore' e não percebeu que não será chamado (mesmo que o recuo implique o contrário):
Aqui está um exemplo da vida real que eu tive. Alguém queria desativar todos os logs para executar find & replace
"console.log"
=>//"console.log"
:Vê o problema?
Mesmo se você pensar, "estes são tão triviais, eu nunca faria isso"; lembre-se de que sempre haverá um membro da equipe com habilidades de programação inferiores a você (espero que você não seja o pior da equipe!)
Argumento: "é mais legível"
Se eu aprendi alguma coisa sobre programação, é que as coisas simples se tornam muito complexas muito rapidamente. É muito comum que isso:
se transforma no seguinte após ter sido testado com diferentes navegadores / ambientes / casos de uso ou novos recursos adicionados:
E compare com isso:
PS: Os pontos de bônus são para quem notou o erro no exemplo acima.
fonte
Não há problema de manutenção!
O problema com todos vocês é que você coloca ponto e vírgula em todos os lugares. Você não precisa de chaves para várias instruções. Se você deseja adicionar uma instrução, use vírgulas.
Este é um código válido que será executado como você espera!
fonte
if
,else
ealert
e nãoIf
,Else
eAlert
?if
e(
, comoif(true) doSomething();
Não há motivo de programação para usar os chavetas em instruções de uma linha.
Isso se resume apenas às preferências e legibilidade dos codificadores.
Seu código não será quebrado por causa disso.
fonte
Além do motivo mencionado por Josh K (que também se aplica a Java, C etc.), um problema especial no JavaScript é a inserção automática de ponto e vírgula . Do exemplo da Wikipedia:
Portanto, isso também pode gerar resultados inesperados, se usado assim:
Não é realmente muito melhor escrever
mas talvez aqui o erro seja um pouco mais fácil de detectar (?)
fonte
É uma questão de estilo, mas o aparelho é bom para evitar possíveis balanços .
fonte
Existem muitas respostas boas, então não vou repetir, exceto quando digo minha “regra” quando os aparelhos podem ser omitidos: em condições que 'retornam' ou 'jogam' (por exemplo) como sua única declaração . Nesse caso, o controle de fluxo já está claro que está finalizando:
Até o "caso ruim" pode ser rapidamente identificado (e corrigido) devido ao controle de fluxo final. Este conceito / estrutura de “regra” também se aplica a vários idiomas.
Claro, também é por isso que se pode usar um linter.
fonte
Aqui está o porquê é recomendado
Digamos que eu escreva
Em seguida, o próximo desenvolvedor chega e diz "Ah, eu preciso fazer outra coisa", então eles escrevem
Agora, como você pode ver, "AlsoTrue" sempre será verdadeiro, porque o primeiro desenvolvedor não usou chaves.
fonte
Atualmente, estou trabalhando em um minifier. Mesmo agora eu verifico em dois scripts enormes. Experimentalmente, descobri: você pode remover os chavetas atrás de for, if, else, while, function * se os chavetas não incluírem ';', 'return', 'for', 'if', 'else', 'while', 'do', 'function'. Quebra de linha independente.
É claro que você precisa substituir a chave de fechamento por um ponto e vírgula, se não for seguida por outra chave de fechamento.
Uma função não deve terminar em vírgula.
Testado no Chrome e FF.
fonte
Sempre achei que
é mais fácil para os meus olhos do que
também condicional como
são mais fáceis de ler (minha opinião pessoal) do que
mas acho que tudo se resume ao estilo de codificação
fonte
Não respondendo diretamente à pergunta, mas abaixo está uma sintaxe curta sobre se a condição em uma linha
Ex:
Pode ser escrito assim:
fonte
Existem muitos problemas no javascript. Dê uma olhada no arquiteto JavaScript Douglas Crockford falando sobre isso. A declaração if parece boa, mas a declaração return pode apresentar um problema.
fonte
Encontrei esta resposta pesquisando sobre uma experiência semelhante e decidi respondê-la com a minha experiência.
As instruções sem suporte funcionam na maioria dos navegadores, no entanto, eu testei que os métodos sem suporte na verdade não funcionam em alguns navegadores.
Em 26 de fevereiro de 2018, esta declaração funcionaria em Pale Moon, mas não no Google Chrome.
fonte
O nível de indentação inicial de uma instrução deve ser igual ao número de chaves abertas acima dela. (excluindo chaves entre aspas ou comentadas ou nas diretivas de pré-processador)
Caso contrário, K&R seria um bom estilo de indentação. Para fixar o estilo deles, recomendo colocar instruções if simples e curtas em uma linha.
ao invés de
Se eu estivesse escrevendo um editor, faria com que o botão de formato automático sugasse a barra até a mesma linha que foo e o faria inserir chaves ao redor da barra se você pressionar return antes:
É fácil e consistente adicionar novas instruções acima ou abaixo da barra no corpo da instrução if
fonte
Às vezes eles parecem ser necessários! Eu não podia acreditar, mas ontem me ocorreu em uma sessão do Firebug (recente Firefox 22.0) que
executado faça algo apesar de my.condition.key ser verdadeiro . Adicionando chaves:
corrigiu esse assunto. Existem inúmeros exemplos em que aparentemente funciona sem aparelhos, mas nesse caso definitivamente não funcionou.
As pessoas que tendem a colocar mais de uma declaração em uma linha definitivamente devem sempre usar aparelho, é claro, porque coisas como
são difíceis de encontrar.
fonte
Gostaria apenas de observar que você também pode deixar o aparelho fora do resto. Como visto neste artigo por John Resig's .
fonte
else
para corresponder ao uso de chaves - este exemplo exigiria as chaves noelse
bloco para passar por uma revisão de código. [1]: wiki.qt.io/Qt_Coding_Style#BracesExiste uma maneira de obter várias linhas de chaves não encaracoladas if (Uau, que inglês ..), mas é meio tedius:
fonte
if (true) funcName()
eelse return null