212 votes

L'affirmation est-elle un mal ?

Le site Go créateurs de langues écrire :

Go ne fournit pas d'assertions. Ils sont indéniablement pratiques, mais d'après notre expérience, les programmeurs les utilisent comme une béquille pour éviter de penser à la gestion et au signalement corrects des erreurs. Une gestion correcte des erreurs signifie que les serveurs continuent de fonctionner après des erreurs non fatales au lieu de se planter. Un rapport d'erreur approprié signifie que les erreurs sont directes et précises, ce qui évite au programmeur d'interpréter une grande trace de crash. La précision des erreurs est particulièrement importante lorsque le programmeur qui les voit n'est pas familier avec le code.

Quelle est votre opinion à ce sujet ?

6 votes

tangente : Le go est un langage inhabituellement opiniâtre. Ce n'est pas nécessairement une mauvaise chose. Cependant, cela signifie que vous devez prendre ses opinions avec un plus gros grain de sel. Cela signifie également que si vous n'êtes pas d'accord, vous allez grincer des dents en utilisant le langage. Pour montrer à quel point Go s'accroche à ses opinions en dépit de la réalité, songez que vous devez recourir à la magie de la réflexion pour déterminer si deux collections sont égales.

0 votes

@allyourcode Si vous faites référence à reflect.DeepEqual vous ne le faites certainement pas. besoin de ça. C'est pratique, mais au détriment des performances (les tests unitaires sont un bon cas d'utilisation). Sinon, vous pouvez implémenter n'importe quel contrôle d'égalité approprié pour votre "collection" sans trop de problèmes.

1 votes

Non, ce n'est pas ce dont je parle. Il n'y a rien de tel que tranche1 == tranche2 sans réflexion. Tous les autres langages ont un équivalent de cette opération super basique. La seule raison pour laquelle Go n'en a pas est un préjugé.

328voto

caf Points 114951

Non, il n'y a rien de mal à assert tant que vous l'utilisez comme prévu.

En d'autres termes, il est censé servir à détecter les cas qui "ne peuvent pas se produire", pendant le débogage, par opposition à la gestion normale des erreurs.

  • Affirmer : Une défaillance dans la logique même du programme.
  • Gestion des erreurs : Une entrée ou un état du système erroné qui n'est pas dû à un bogue dans le programme.

113voto

gahooa Points 38006

Non, ni l'un ni l'autre goto ni assert sont diaboliques. Mais les deux peuvent être mal utilisés.

Assert est pour les contrôles d'intégrité. Des choses qui devraient tuer le programme si elles ne sont pas correctes. Il ne sert pas à la validation ou au remplacement de la gestion des erreurs.

0 votes

comment utiliser goto à bon escient ?

3 votes

@ar2015 Trouvez l'un des schémas absurdement artificiels que certaines personnes recommandent d'éviter. goto pour des raisons purement religieuses, il suffit d'utiliser goto plutôt que d'obscurcir ce que vous faites. En d'autres termes, si vous pouvez prouver que vous avez vraiment besoin de goto et la seule alternative est de mettre en place un tas d'échafaudages inutiles qui, en fin de compte, font la même chose mais sans modifier la police Goto... alors utilisez simplement goto . Bien sûr, une condition préalable à cela est le passage "si vous pouvez prouver que vous avez vraiment besoin de goto ". Souvent, les gens ne le font pas. Cela ne signifie pas pour autant que c'est intrinsèquement une mauvaise chose.

2 votes

goto est utilisé dans le noyau linux pour le nettoyage du code

62voto

jalf Points 142628

Dans cette logique, les points d'arrêt sont également mauvais.

Les alertes doivent être utilisées comme une aide au débogage, et rien d'autre. Le "mal", c'est quand on essaie de les utiliser. au lieu de de la gestion des erreurs.

Les assertions sont là pour vous aider, en tant que programmeur, à détecter et à résoudre des problèmes qui ne doivent pas exister et à vérifier que vos hypothèses restent vraies.

Ils n'ont rien à voir avec la gestion des erreurs, mais malheureusement, certains programmeurs en abusent et les déclarent alors "mauvais".

41voto

arhuaco Points 615

J'aime beaucoup utiliser assert. Je le trouve très utile lorsque je crée des applications pour la première fois (peut-être pour un nouveau domaine). Au lieu de faire un contrôle d'erreur très sophistiqué (que je considérerais comme une optimisation prématurée), je code rapidement et j'ajoute beaucoup d'assertions. Une fois que j'en sais plus sur le fonctionnement de l'application, je la réécris, je supprime certaines des alertes et je les modifie pour une meilleure gestion des erreurs.

Grâce aux assertions, je passe beaucoup moins de temps à coder/déboguer des programmes.

J'ai également remarqué que les assertions m'aident à penser à de nombreuses choses qui pourraient casser mes programmes.

31voto

yuku Points 15705

À titre d'information supplémentaire, go fournit une fonction intégrée panic . Cela peut être utilisé à la place de assert . Par exemple

if x < 0 {
    panic("x is less than 0");
}

panic imprimera la trace de la pile, donc d'une certaine manière, il a le but de assert .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X