1
resposta

Semântica de classe & arrow functions

Olá, Quando o instrutor cria a classe TabelaFornecedor, ele utiliza essa semântica:

module.exports = {
    listar () {
        return Modelo.findAll()
    }
}

Mas nos cursos anteriores aprendemos o uso desta semântica:

class TabelaFornecedor {
    listar () {
        return Modelo.findAll()
    }
}
module.exports = new TabelaFornecedor()

Outra questão também é a arrow function. Na documentação do Mozilla fala que os dois fatores que influenciaram foram: funções mais curtas e a inexistência da palavra chave this. Exemplo:

router.use('/', async (req, res) => {
    const response = await TabelaFornecedor.listar()
    res.send(JSON.stringify(response))
})

Que pode ser substituído por:

router.use('/', async function(req, res) {
    const response = await TabelaFornecedor.listar()
    res.send(JSON.stringify(response))
})

Existe alguma convenção ou melhor prática atualmente? Ou essa "escolha" varia de programador?

Obrigado,

1 resposta

Boa tarde Luis, tudo certo?

Nós temos 2 artigos que podem esclarecer um pouco essas questões:

O primeiro é o nosso artigo Utilizando export.modules no Node.js, que trata de como funciona o module.exports.

De forma resumida a diferença é a seguinte:

Quando exportamos um objeto da seguinte forma

// Arquivo se chama tabela.js
module.exports = {
    listar () {
        return Modelo.findAll()
    }
}

Podemos importar e utilizar as funções desse objeto assim:

const tabela = require('./tabela')

tabela.listar()

O segundo ponto é o artigo Conhecendo Arrow Functions, que explica de forma mais detalhada qual foi a motivação de sua criação e as diferenças para outras formas de se declarar uma função.

Espero ter ajudado, qualquer coisa é só mandar aqui no fórum. Bons estudos!