Skip to content

Instantly share code, notes, and snippets.

@VitorLuizC
Last active March 18, 2022 00:54
Show Gist options
  • Save VitorLuizC/b7cb3b4476618108e0ea9c4f395eb570 to your computer and use it in GitHub Desktop.
Save VitorLuizC/b7cb3b4476618108e0ea9c4f395eb570 to your computer and use it in GitHub Desktop.
Guia de padrões e boas práticas com TypeScript.

Prefira function declarations no escopo do módulo

  • O Deno indica esse uso na style-guide dele;

  • O código que sai dos transpiladores não é muito diferente do escrito;

  • Funções regulares, que usam a palavra-chave function, são mais fáceis de compreender para pessoas novas com a linguagem ou que estão voltando a trabalhar com ela e não compreendem ainda as mudanças do es2015.

  • Funções regulares, que usam a palavra-chave function, são içadas para o topo do escopo e podem ser usadas antes de sua declaração.

    hi(); // This works because 'hi' is a regular function.
    
    function hi() {
      console.log('Hi');
    }
  • Funções regulares, que usam a palavra-chave function, permitem o uso do objeto arguments.

    function sumAll() {
      return Array.from(arguments).reduce((total, value) => {
        return total + value;
      }, 0);
    }
  • Funções regulares, que usam a palavra-chave function, permitem o uso da palavra-chave this e por consequência da injeção de contextos.

    function getName() {
      return `${this.firstName} ${this.lastName}`;
    }
    
    getName.call({
      firstName: 'Karl',
      lastName: 'Marx'
    });
    //=> 'Karl Marx'
  • Function declarations obrigatóriamente são funções nomeadas e isso torna o processo de depuração e tratamento de erros mais fácil, porque a pilha rastreável de erros exibe o nome da função em que o erro foi lançado.

❌ Bad
export const fromBase64 = <T>(source: string): T => {
  const buffer = Buffer.from(source, 'base64');
  return JSON.parse(buffer.toString());
};
✅ Good
export function fromBase64<T>(source: string): T {
  const buffer = Buffer.from(source, 'base64');
  return JSON.parse(buffer.toString());
}

References: https://deno.land/manual/contributing/style_guide#top-level-functions-should-not-use-arrow-syntax

  • README.md (Style-Guide)

    • Prefira function declarations no escopo do módulo;
      • Exemplo
      • Motivos
      • Conceitos
  • concepts/

    • function-declaration.md
    • arrow-function.md
    • function-expression.md
    • regular-function.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment