Bonjour,
Je me suis mis à l'arduino récement. J'ai acheté le livre pour les nuls. Je suis arrivé au chapitre de Devinuim. A la page 146 de ce livre, je ne comprends pas l'utulistaion du return dans le code source suivant:
void afficherBin(byte bNum) {
if (bNum == 0) return;
serial.print("\t Binaire ");
Je sais qu'on l'utilise à la fin d'une fonction pour renvoyer une valeur d'un type autre que void mais pas de cette manière là.. Pouvez-vous m"aider ?
On peut placer un return n'importe où dans une fonction.
C'est une méthode souvent utilisée pour traiter les cas d'erreur, comme ici d'ailleurs où l'on considère que bNum = 0 est un cas particulier pour lequel serial.print() ne doit pas être exécuté.
Merci, je comprends mieux maintenant.
En programmation, il y a une chose qui remplit d'horreur les puristes, c'est le goto (au point que certains langages en sont depourvus : R..).
Comme, des fois, il est/semble bien pratique de faire un ersatz de goto, on a trouve deux solutions:
- break/continue pour les boucles
- et return pour les sous programmes
Ces solutions , soit son la preuve de paresse, soit visent à rendre les programmes plus lisibles et moins indentés (gênant sur des ecrans etroits), mais peuvent cacher une structure trop complexe.
La solution "propre" de votre bout de code serait:
void afficherBin(byte bNum) {
if (0 != bNum ) { // un niveau d'indentation supplémentaire....
serial.print("\t Binaire ");
}
return; // ne fait pas de mal...
}
A noter que certains testeurs de code (qui ont bien compris que les multiples return ne sont que des goto sournois, et qui savent que le goto est mal) ne veulent pas voir de multiples return s dans une fonction (c'est plutôt pour se protèger d'abus et on sait qu'on peut réécrire avec un seul point d'entrée et un seul point de sortie coding style - Where did the notion of "one return only" come from? - Software Engineering Stack Exchange
comme ici d'ailleurs où l'on considère que bNum = 0 est un cas particulier
C'est effectivement un cas très ** particulier:**
une écriture correcte, protègeant des fautes de frappe -qui se manifestent dès le titre!- serait:
**__ <strong>** (0 == bnum)**</strong> __**
-si on a oublié de taper un =, le compilateur protestera et n'ira pas plus loin....-