|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() |
Je suis actuellement en plein conflit intérieur et extérieur (avec mon prof de prog.). J'ai fait des recherches mais soit j'suis pas chanceux, soit j'suis totalement débile. En tout cas, j'trouve rien :<
Mon problème ? J'voudrais simplement savoir... Quand on exécute une fonction qui envoie un code de retour, dans ma réflexion, si tout s'est bien déroulé, la fonction fait un return 0 (ou False quoi), et si une erreur a été interceptée, un return 1 (donc True) serait envoyé. Ne me parlez pas des raise, svp. Restons dans ce sujet bien précis Je trouve ça logique, en fait. Alors mon "rival" pour ainsi dire m'explique que je dois mettre 1 au lieu de 0 car, par exemple, if(a == a): renverra True, donc 1. Heu ouais, ça me convaincs absolument pas. DONC. Est-ce qu'il existe une convention ou pas ? J'ai fait des recherches sur Google, je n'ai rien trouvé de bien. J'en ai fait dans les fichiers de Python et là par contre je tombe sur 2-3 trucs qui confirment ce que je pensais de base, cependant ça peut tout aussi bien être un hasard. codecs.h ~ L149 - 154 (de Python3.2) Citation:
|
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Emmanuel DUMAS Inscription : novembre 2008 Messages : 94 ![]() |
Bonjour
Il n'y a pas de convention acceptée par tous sur ce sujet. Il y a une habitude unix : valeur positive pour un bon déroulement, -1 pour une erreur. Ce genre de convention est en général décidée au niveau du projet ou de l'équipe. En prenant en compte du contexte exact du projet, on trouve souvent une solution assez élégante. Mais il s'agit surtout d'une convention : c'est à dire que la plus important soit que le point de vu soit partagé par toute l'équipe et qu'il soit adopté. Dans ces cas, je m'attache à toujours remonter le maximum d'information, sans surcout de ressources. Ainsi j'aime bien la convention : valeur positive pour un bon déroulement, valeur négative pour une erreur. Ensuite, la valeur négative change en fonction du type d'erreur. Cordialement Emmanuel |
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Développeur en systèmes embarqués Inscription : mars 2006 Messages : 763 ![]() |
Salut,
C'est celui qui écrit la fonction qui décide de ce qu'elle doit retourner et qui doit bien sûr le documenter. Ça peut être un flag: 0 ou différent de zéro, un entier: 0 signifiant dans ce cas succès et différent de zéro donnant le code d'erreur. D'un autre côté, une fonction "isDigit" indiquant qu'un caractère fait partie de "0123456789" devrait logiquement retourner un zéro quand le test n'est pas concluant. Du coup, on comprend facilement des bouts de code comme: Code :
A+ Pfeuh |
||
|
|
00
|
|
|
#4 | |||
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Soyons précis (mais ici, tout est affaire de précision) :
Citation:
Code :
|
|||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 726 ![]() |
Salut,
Citation:
Un de ses apports est justement de ne plus avoir à définir et documenter ce genre de standard ni de faire la police pour s'assurer que les développeurs le respectent. Les développeurs peuvent donc omettre de tester les statuts de retour et laisser l'application se vautrer avec un minimum de diagnostic. Plus besoin de remonter à la cause de la cause de la cause: le glandu qui a omis de tester le code de retour de l'appel à la lecture de la socket et rempli la BDD avec des enregistrements corrompus. - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#6 | |||
|
Invité de passage
![]() |
Citation:
Merci beaucoup pour vos réponses ! @wiztricks: Dans le cadre de l'enseignement, on ne parle pas directement de la POO, des raise, assert etc. On commence simple, donc on passe forcément par l'étape des codes de retour. C'est pourquoi j'ai demandé d'éviter de parler de ça, on risque de s'égarer inutilement :p Mais je suis tout à fait d'accord avec toi sinon |
|||
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 726 ![]() |
Salut,
Citation:
Ceci dit votre collègue a raison: si on doit interpréter le statut de retour d'une fonction comme un booléen (True/False), il est logique et préférable de traduire OK par True et KO par False. D'autant qu'en Python une fonction retournera par défaut None qui sera aussi évalué False: "if func()" sera moins ambigu côté OK qu'un "if not func()". La ou çà coince, c'est que la programmation est un ensemble de pratiques construites à partir de nécessités en décalage avec la logique et le bon sens. La nécessité est que l'appelant voudra aussi récupérer un indicateur en cas de retour KO pour afficher ou gérer l'erreur. Si la fonction ne retourne qu'un booléen, il faudra que l'appelé puisse récupérer cet indicateur via un autre canal: par exemple une variable globale comme le propose errno dans le cas de la libc. Une simplification est de décréter qu'une fonction retournera un code d'erreur. Ce code sera généralement un symbole EXIT_SUCCESS, EXIT_FAILURE, EACCES, ... Ce qui oblige l'appelant à récupérer la définition de ces symboles pour les utiliser et non de tester directement leur valeur. Mais obtenir des programmeurs qu'ils bossent proprement est coûteux. Rendre équivalent "OK <=> False <=> 0" permettra de réduire les omissions du test élémentaire plus aisément. Impossible de faire "convention" voire un "standard" une telle accumulation de mauvaises pratiques! D'autant que les multiples dimensions de ce "problème" sont résolues par les mécanismes d'exception disponibles, dans la plupart des langages, depuis plus de 30 ans. Citation:
Les fonctions add, sum, factorielle sont simple à écrire et à composer: - écrire = add(add(2,3), 4). Un statut de retour est rarement un résultat. Pour le récupérer, il faudra passer par des variables globales. Cette dépendance entre la fonction et des variables globales ne la rend plus "simple": comment allez vous composer de telles fonctions? De plus éviter de parler des exceptions en utilisant un langage comme Python: elles devront être comprises et gérées assez vite. ET vous n'êtes pas obligé d'ouvrir la boîte POO pour en parler. - W
__________________
Architectures Post-Modernes |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com