Fala meus nobres devs! Quando você pensa em parar a execução de uma rotina você…
Encadeamento opcional com JavaScript2 min read
Categoria: JavaScript
A especificação do ES11 trouxe novas funcionalidades para o JavaScript e uma delas foi o encadeamento opcional (ou em inglês Optional Chaining). Essa funcionalidade veio para trazer maior segurança no acesso a propriedades de um objeto em JavaScript. A ideia é tornar a escrita mais simples e evitar ifs aninhados (que são péssimos). Vamos ver um exemplo de código para ficar mais claro isso que acabei de explicar.
Antigamente como era…
Digamos que você tenha um possível retorno de um objeto como este aqui:
const entity = {
empresa: {
nome: "Acme Inc.",
socios: ["Carlos Silva", "Diego Costa"],
endereco: {
rua: "Rua G, número 14",
},
},
};
Veja que este é o retorno completo desta entidade, que representa uma empresa. Mas, digamos que nem sempre exista o sócio já que, algumas empresas de fato não têm sócio. Então, para alguns registros você não teria o retorno dos sócios e para evitar que a exceção Cannot read property of undefined seja lançada você colocaria em seu código um if para verificar se a propriedade existe, dessa forma:
if (entity.empresa && entity.empresa.socios){
console.log(entity.empresa.socios)
}
Não há nada de errado em usar essa abordagem, porém com o ES11 podemos simplificar um pouco.
Com o Encadeamento Opcional do ES11
Com o encadeamento opcional você pode simplesmente usar a interrogação (.?) após o elemento que você iria verificar com o if. Vejamos como fica o código anterior:
// Utilizando if
if (entity.empresa && entity.empresa.socios){
console.log(entity.empresa.socios)
}
// Com ES11 (Optional Chaining)
console.log(entity.empresa.socios?.toString())
Com isso, digamos que a sua entidade venha sem a lista de sócios, não ocorrerá erro, sendo que o retorno será undefined.
Compatibilidade com os navegadores e o Node.js
Segundo o site da Mozilla, exceto o IE – eu nem precisava citar o IE, né 🙂 – todos os principais navegadores possuem suporte para essa funcionalidade, atualmente, e o Node.js a partir da versão 14.0.0.