Skip to content

Instantly share code, notes, and snippets.

@antoniojps
Last active June 20, 2018 01:37
Show Gist options
  • Save antoniojps/9dc93a6164e778bfaaf666c7e74cde3a to your computer and use it in GitHub Desktop.
Save antoniojps/9dc93a6164e778bfaaf666c7e74cde3a to your computer and use it in GitHub Desktop.

Utilizar ou não ponto-e-vírgulas

O syntax parser do javascript adiciona ponto-e-virgulas automaticamente. (ASI: automatic semicolon insertion)

Erros possíveis:

randomNumber(x){
    return 
    {
        number : x
    }
}

Não vai funcionar porque o syntax parser adiciona um ponto e virgula no return

randomNumber(x){
    return ; // ASI vê enter como um carácter e adiciona ponto e virgula
    {
        number : x
    }
}

randomNumber(1) // undefined

Correcto:

randomNumber(x){
    return {
        number : x
    }
}

No caso anterior mesmo que utilizássemos um ponto e virgula o erro persiste

randomNumber(x){
    return ; // ASI vê enter como um carácter e adiciona ponto e virgula
    {
        number : x
    };
}

randomNumber(1) // undefined

Portanto não existe nenhuma vantagem em utilizar “;”, os erros acontecem na mesma.

Concluindo: o ASI (Automatic semicolon insertion) é estúpido e mais vale aceitá-lo e compreende-lo.

Caveats:

Se próxima linha começar com parênteses ou parênteses rectos e não utilizarmos “;” vai quebrar.

1. Exemplo (parenteses rectos)

var n = {numbers:[1,2,3]}
[‘Foo’,’Bar’].forEach(value=>{console.log(value)})

Executado como:

var n = {numbers:[1,2,3]}[‘Foo’,’Bar’].forEach(value=>{console.log(value)}) // Cannot read property 'forEach' of undefined

Fix:

var n = {numbers:[1,2,3]};
[‘Foo’,’Bar’].forEach(value=>{console.log(value)})

2. Exemplo (parenteses)

a = b + c
(d+e).print()

Executado como:

a = b + c(d+e).print();

Fix:

a = b;
c(d+e).print()

Resumindo

  • Nunca deixar um return sozinho na mesma linha (independentemente se usas ponto-e-virgulas ou não)
    • O mesmo se aplica a:
      • var statement
      • expression statement
      • do-while statement
      • continue statement
      • break statement
      • throw statement
  • Se próxima linha começar com parênteses, ou parênteses rectos adicionar ponto-e-virgula.
    • Todos os outros casos não interessa se usas ponto-e-virgulas ou não.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment