Il existe une disposition pour le blocage try-catch en javascript . Bien qu'en Java ou dans toute autre langue, la gestion des erreurs soit obligatoire, je ne vois personne les utiliser en javascript dans une plus large mesure. N'est-ce pas une bonne pratique ou simplement nous n'en avons pas besoin en javascript?
69
While in java or *any other language* it is mandatory to have error handling...
- Pas vraiment. Java, oui, mais il y a beaucoup de langages qui n'insistent pas sur try-catch (comme C #).Réponses:
Il faut éviter les
throw
erreurs comme moyen de faire passer les conditions d'erreur dans les applications.La
throw
déclaration ne devrait être utilisée que "Pour que cela ne se produise jamais, plantez et brûlez. Ne récupérez jamais de façon élégante"try catch
Cependant, il est utilisé dans des situations où des objets hôtes ou ECMAScript peuvent générer des erreurs.Exemple:
Dans la communauté node.js , il est recommandé de transmettre les erreurs dans les rappels (car les erreurs ne se produisent que pour les opérations asynchrones) en tant que premier argument.
Il y a aussi d'autres problèmes, comme essayer / attraper, c'est très cher et c'est moche et ça ne fonctionne tout simplement pas avec les opérations asynchrones.
Donc, puisque les opérations synchrones ne doivent pas générer d'erreur et que cela ne fonctionne pas avec les opérations asynchrones, personne n'utilise try catch, à l'exception des erreurs renvoyées par des objets hôtes ou par ECMAScript.
la source
Error
, mais ils sont rares.document.getElementById
ne lance pas quand l'élément n'existe pas, il retourne simplementnull
. La même chose peut être faite pour presque tous les casTry / catch en Javascript n'est pas aussi sûr que dans d'autres langues, en raison de la nature asynchrone de Javascript. Considérez cet extrait:
Le problème est que le sort du flux de contrôle
try
bloc avantdo_something_that_throws()
est exécuté, de sorte que l'erreur renvoyée dans la fonction de rappel s'attrapée jamais.Donc, essayer / attraper est fondamentalement inapproprié dans de nombreux cas, et il n'est pas toujours évident de savoir si quelque chose exécute le code de manière asynchrone ou non. Heureusement, javascript, avec son idiome particulier de rappel asynchrone à un seul thread et sa prise en charge des fermetures réelles, offre une alternative élégante: la gestion des erreurs de type continuation-pass. Il suffit de passer la bonne réponse à toute erreur en tant que fonction, par exemple:
la source
Beaucoup de ces réponses sont un peu vieux et ne prennent pas en compte les nouvelles fonctionnalités de ES7
async
etawait
.En utilisant
async
/await
vous pouvez maintenant obtenir un flux de contrôle asynchrone comme vous le souhaitez:En savoir plus sur
async
/await
ici . Vous pouvez utiliserasync
/await
maintenant en utilisant babel .la source
try-catch en javascript est tout aussi valide et utile que dans tout autre langage qui les implémente. Il y a une raison majeure pour laquelle il n'est pas utilisé autant en javascript qu'en d'autres langues. C'est la même raison pour laquelle javascript est vu comme un langage de script très laid, c'est la même raison pour laquelle les gens pensent que les programmeurs javascript ne sont pas de vrais programmeurs:
Le simple fait que tant de personnes soient exposées à javascript (en raison du seul langage pris en charge par les navigateurs) signifie que vous disposez de beaucoup de code non professionnel. Bien sûr, il y a aussi beaucoup de raisons mineures:
catch
peuvent donc pas (trucs asynchrones)Quoi qu'il en soit, try-catch devrait être utilisé, mais bien sûr, vous devriez apprendre à les utiliser correctement - comme tout le reste dans la programmation.
la source
Je crois que la plupart des raisons qui
try..catch
sont rares en JavaScript sont dues au fait que le langage tolère assez bien les erreurs. La grande majorité des situations peuvent être gérées à l'aide de vérifications de code, de valeurs par défaut correctes et d'événements asynchrones. Dans certains cas, le simple fait d'utiliser un modèle évite les problèmes:Certains des problèmes majeurs dans d'autres langues qui provoquent des exceptions n'existent tout simplement pas dans JS. Le typage n'est pas nécessaire la grande majorité du temps. Au lieu de cela, la méthode préférée consiste généralement à vérifier les fonctionnalités (application d'une interface particulière):
Avec l'ajout de
async
/await
à la langue,try..catch
devient plus répandu. Les promesses étant la forme asynchrone detry..catch
, il est logique d'attendre:à la place être écrit comme:
la source
Peut-être une autre raison pour laquelle try / catch n'est pas très utilisé en Javascript est que la construction n'était pas disponible dans les toutes premières versions de Javascript ... elle a été ajoutée plus tard.
En conséquence, certains navigateurs plus anciens ne le prennent pas en charge. (En fait, cela pourrait provoquer une erreur d'analyse syntaxique / syntaxique dans certains navigateurs plus anciens, ce qui est plus difficile à "programmer de manière défensive" que la plupart des autres types d'erreur.)
Plus important encore, comme il n'était pas disponible initialement, les fonctions intégrées à Javascript qui ont été initialement publiées (ce que l'on appellerait les fonctions "de bibliothèque" dans de nombreuses langues) ne l'utilisent pas. (Cela ne marche pas très bien pour "attraper" une erreur de someobject.somefunction () si elle ne "jette" pas, mais retourne simplement "null" quand elle rencontre un problème.)
Une autre raison possible est que le mécanisme try / catch ne semblait pas nécessaire au départ (et ne semble toujours pas si utile). Ce n'est vraiment nécessaire que lorsque les appels sont régulièrement imbriqués sur plusieurs niveaux; renvoyer une sorte d'ERRNO fonctionnerait très bien pour les appels directs (bien que pour le rendre vraiment utile chaque fois qu'il est disponible, la meilleure pratique dans la plupart des langues consiste à l'utiliser partout plutôt que sur des appels profondément imbriqués). Comme la logique Javascript devait à l'origine être petite et simple (après tout, c'est simplement un ajout à une page Web :-), les appels de fonction ne devaient pas être profondément imbriqués, et un mécanisme try / catch ne semblait donc pas nécessaire.
la source
Je pense qu'elles ne sont pas très utilisées car le fait de jeter des exceptions dans le code Javascript du côté client rend plus difficile le débogage d'une page.
Plutôt que de jeter des exceptions, je préfère généralement montrer zone d'alerte al, (c. -à
alert("Error, invalid...");
)Cela peut sembler étrange, mais des erreurs javascript se produisent côté client. Si un client utilise une page que vous avez créée et que la page génère une exception, à moins que le client ne soit un informaticien averti des technologies, il ne pourra jamais le savoir. vous quel est le problème.
Il vous appellera seulement en vous disant: "Hé, la page X ne marche pas!", Et ce sera à vous de trouver ce qui ne va pas et où se trouve le code.
En utilisant la boîte d'alerte, il est plus probable qu'il appelle et dise quelque chose du genre: "Hé, quand je clique sur le bouton A de la page X, il affiche une boîte qui dit ..." , croyez-moi, ce sera beaucoup plus facile à trouver. l'insecte.
la source