1

Porquê a linguagem JavaScript tem uma forma tão ruim de lidar com erros?

"Programador, qual o seu maior sonho?"
"Cláusula Throws no JavaScript 🥲"

Minha maior decepção com JavaScript é nunca saber pela assinatura de uma função ou método que tipo de exceções ele pode gerar. É quase uma certeza que os programadores vão construir programas intolerantes a falhas.

As implicações disso são enormes, já que o JavaScript também permite lançar tipos primitivos, como strings ou números, como erros; algo que muitas linguagens proíbem explicitamente.

Manipular erros no JavaScript é de longe um dos piores pontos dessa linguagem. Mas existe uma forma elegante de lidar, que talvez eu escreva sobre.

[off-topic aqui: como faço pra inserir uma imagem do meu PC num post como esse? Nunca consigo]

Carregando publicação patrocinada...
2

Creio que quiçá, seja reflexo das características da tipagem dinâmica.
É comum em linguagem com tipagem estática ou restrita, seja imposta limitações, ou que seja requerida explicitação do tipo.

Mas não de todo ruim são estas caracteristica, por exemplo, em linguagens de paradigma funcional, é comum haver mônadas que permitem tipos algebricos, como o maybe, ou either.

Pessoalmente, se tens interesse por este caráter da tipagem forte, recomendo o TypeScript que é uma especie de wrapper de JavaScript.

off-topic:
Sobre colocar imagens, também não sei, sou novo na plataforma.

Mas lhe parabenizo por estar a pensar nestas questões, vivemos na era da inteligência artificial, e interesse e curiosidade profunda tornam-se cada vez mais escassos.

1

Sensacional, obrigado pela contribuição! Eu realmente sinto falta, mas o JavaScript é excelente, e sim, conheço o TypeScript, mas ele também não me traz conforto ao lidar com exceções. O problema mesmo é não saber se uma função pode lançar uma exceção, e se lançar, qual tipo será. Eu não conheço funcionalidade no TS que faça isso nativamente.

Trabalho com JS há 4 anos e agora, estudando a fundo outras linguagens, percebo o quanto ele tem a melhorar. Mas é como o amigo falou em outro comentário, o próposito dela pode ser assim mesmo e tá tudo bem.

2

Minha maior decepção com JavaScript é nunca saber pela assinatura de uma função ou método que tipo de exceções ele pode gerar. É quase uma certeza que os programadores vão construir programas intolerantes a falhas.

Você tá vindo do Java, né?

Qual outra linguagem de programação além do Java que você conhece que declara os tipos de exceções na assinatura do método? Se não me engano, das linguagens populares tem o Swift e Scala, Kotlin só mantém por exigência da JVM.

Ainda pode dizer que Go e Rust declaram os tipos de erros na assinatura, mas isso é possível fazer com Either Pattern em quase qualquer linguagem moderna, inclusive JS.


Tenha em mente que JS não foi criado para usar como temos usado nos últimos anos, ela foi feita às pressas pelo pessoal do Netscape na época da guerra dos browsers e da bolha PONTOCOM, não houve tempo e dedicação para ser uma linguagem de uso geral.

Ela precisava ser executada no navegador e uma falha de programação não poderia simplesmente gerar um erro na cara do usuário, a página deveria continuar sendo renderizada e o máximo funcional possível.

Para cobrir essas inabilidades é que iniciativas como TypeScript fazem tanto sentido.

Mesmo que o JS tenha recebido muitas melhorias, certos comportamentos não podem simplesmente mudar, pois isso poderia quebrar boa parte das aplicações web e sites pelo mundo. Se quiser impedir sua aplicação de lançar uma string como erro, você pode configurar seu ESLint ou similar para isso e resolver em tempo de projeto.

1

Falaa amigo! Obrigado pelo comentário. Na verdade eu venho do JS, trabalho há alguns anos já. Estou estudando muito o Java agora na faculdade e gostei demais dessas pequenas (e úteis) diferenças. E sim, eu entendo o porquê ser assim. Só não entendo como nada foi realizado nesse sentido, nem o próprio TS ajuda no tratamento de exceções, na verdade ele traz funções básicas que o JS nasceu sem. O post foi pra instigar mesmo, e fazer quem tá entrando na área agora entender as deficiências da linguagem e que existem outras abordagens por aí. Nesse sentido, seu comentário foi bastante agregador. Muito obrigado.

Abraços