// Commentaires inhabituels

Petite page pour ceux qui écrivent n'importe comment disponible dans Cent commentaires vallent mieux que pas du tout. Rien de nouveau sauf cette fin, que je recopie ici:



J'ai vu la ligne de code (bibliothèque accelStepper)

setMaxSpeed(100.0);

sans que l'auteur ne sache si la vitesse était en tr/ms ou en rd/s... Ce serait bien de pouvoir spécifier l'unité! Alors il faudrait écrire

setMaxSpeed(100.0); // 100 pas/s

Cela fait redondance pour le nombre 100, et c'est un pléonasme car c'est la traduction exacte en français de l'instruction. Et en plus il faudrait éventuellement un deuxième commentaire pour dire pourquoi on appelle la fonction. Cela pourrait donc donner:

setMaxSpeed(100.0); // 100 pas/s; Vitesse d'approche

Je cherchais pendant un temps comment l'écrire, et voici la première possibilité:

setMaxSpeed(100.0 /* pas/s */); // Vitesse d'approche

Pour peu que l'on passe une formule mathématique contenant des / ou des *, on ne s'en sort plus:

setMaxSpeed(50.0 * 2 /* pas/s */); // Vitesse d'approche double de la vitesse de coupe

J'ai eu l'idée d'utiliser une variable commentaire. C'est un mot à moi pour désigner une variable qui ne sert que de commentaire, que l'on peut affecter, mais dont on n'utilise pas la valeur ensuite. En principe elle est ignorée par le compilateur:

float vitesse_en_pas_par_seconde; // variable commentaire
...
setMaxSpeed(vitesse_en_pas_par_seconde = 50.0); // Vitesse de coupe
...
setMaxSpeed(vitesse_en_pas_par_seconde = 100.0); // Vitesse d'approche

C'est plus lisible, mais sait-on jamais ce qu'en fait le compilateur. Il y a quand même une affectation, ce n'est pas bien compréhensible par un novice... Au passage, j'ai pris une nouvelle convention: les les phrases en minuscules qui contiennent au moins un "" mais pas aux extrémités sont des commentaires (les "" aux extrémités sont pour les variables internes au bibliothèques). QuickStep V2.0 utilise la formulation suivante:

#define pas_par_seconde; // define commentaire
...
setMaxSpeed(50.0 pas_par_seconde); // Vitesse de coupe
...
setMaxSpeed(100.0 pas_par_seconde); // Vitesse d'approche

Le #define permet de remplacer pas_par_seconde par... rien du tout!
C'est clair, plus court, on a une unité, le préprocesseur vire le commentaire avant que le compilateur ne le voit. C'est la méthode que je préfère. Le #define ferait partie de la bibliothèque, les setMaxSpeed() seraient dans les exemples et dans les programmes des utilisateurs. Bien entendu, on pourra toujours écrire

setMaxSpeed(100.0 rd_par_s);

ce qui est un commentaire faux. Ce n'est qu'un commentaire, on peut y mettre ce que l'on veut, comme pour les autres commentaires!
Du coup, on peut déclarer un define commentaire

#define milli_secondes

pour pouvoir écrire tranquillement

delay(100 milli_secondes);

D'ailleurs est-ce vraiment un commentaire? J'ai appris à l'école que l'on devait toujours mettre une unité! Maintenant c'est fait
Pour le clin d'oeil à QuickStep, vous risquez un jour de trouver

quickStepDeplacement1(3200 micro_pas, SENS_POSITIF, 6250 coups_d_horloges_par_pas, 1024 pas_pour_accelerer, 512 pas_pour_decelerer);

plutôt que:

// Faire tourner le moteur en 16 micro-pas d'un tour, dans le sens direct, à 0,1tr/s 
// avec une accélération de 50 micro-pas/s[sup]2[/sup] et une décélération deux fois plus importante
quickStepDeplacement1(3200, 1, 6250, 1024, 512);

c’est là où C++ montre son age.

Des langages comme Swift ou Objective C ont une syntaxe d’appel de fonction qui permet d’exprimer le nom du paramètre (ou séparer le nom de la fonction en petits bouts)

perso, je mettrais simplement setMaxSpeed(100.0); // en nombre de pas par secondeet bien sûr si j’avais écrit la bibliothèque la fonction se serait appelée setStepsPerSecondMaxSpeed(100.0);

Des langages comme Swift où Objective C ont une syntaxe d’appel de fonction qui permet d’exprimer le nom du paramètre (ou séparer le nom de la fonction en petits bouts)

Oui mais il faut que je me débrouille avec ce que j’ai et j’aime bien la Uno. Cela me rappelle le bon vieux temps.

Et puis avec ce type de commentaire, l’appel de la fonction permet d’exprimer aussi bien le nom du paramètre que l’unité!

Ok

perso, je mettrais simplement
setMaxSpeed(100.0); // en nombre de pas par seconde

Le problème c'est qu'on a souvent un autre commentaire à mettre, par exemple "avance rapide", "initialisation"...

setStepsPerSecondMaxSpeed(100.0);

Ça passe tant qu'on a un paramètre. Mais avec accelStepper, il faut appeler trois fonctions à chaque fois pour faire un mouvement. C'est pour cela que je gère mes mouvements en un seul appel avec plusieurs paramètres, et pour un appel comme

quickStepDeplacement1(3200 micro_pas, SENS_POSITIF, 6250 coups_d_horloges_par_pas, 1024 pas_pour_accelerer, 512 pas_pour_decelerer);

je peux difficilement trouver un nom qui décrit plusieurs paramètres.

Mettre l'unité dans la fonction est fait avec delay_us() et _delay_ms(), mais c'est très rare de le voir

C’est un peu pousser loin, je n’ai jamais vu cela dans tous les codes que j’ai pu lire, mais ça se défend et sans doute certains le pratiquent

je n'ai jamais vu cela dans tous les codes que j'ai pu lire

Je n'ai jamais vu de commentaire par define comme je l'ai décrit. Il apparaitra dans ma bibliothèque QuickStep v2.0
La seule fois ou j'ai vu un define "vide" c'est pour du code.

certains le pratiquent

Si il s'agit du commentaire ordinaire, ce serait bien. Dans les bibliothèques, j'ai quasiment toujours vu des commentaires, mais dans les programmes de base, je suis loin de dire "certains" :grin:

Vous ne pensez pas que c'est une discussion pour le bar ?

Pourquoi, tu as soif ? :smiley:

Vous ne pensez pas que c'est une discussion pour le bar ?

Je le prends plutôt comme un tuto sur la possibilité que j'utilise de pouvoir mettre des unités. Mais j'y ai songé aussi.