J'suis vraiment le seul à bien aimer les Lbl ? bah oui quoi j'ai un programme avec....20 lbl et il ne bug pas ! :o (si on les utilises correctement, et j'ai compris comment bien les utiliser ) Je peux même faire une explication si quelqu'un le désire
C'est juste que les labels sont la facilité et (selon moi) tuent le principe de l'algorithme. Toutes les directives comme while, if, else, .. ont un sens réel. Le goto, dit juste au script d'aller là-bas, mais si un autre programmeur passe, il ne sera pas pourquoi, quel est l’intérêt, ça déstructure ton code en gros.
Après sur du basic, langage interprété sans indentation ni colorisation syntaxique, qui en plus apparait sur calculatrice (donc un écran petit). C'est vrai qu'utiliser des tonnes de boucles et de conditions imbriqué ne sera pas forcément plus claire qu'un goto. Dans des langages plus évolués, comme le C++, pour n'en citer qu'un, il existe aussi mais il est très peu utilisé car c'est assez rare que ton code soit plus compréhensible avec des goto qu'avec d'autres structures. Par exemple pour le code que propose Shyked, il suffit d'utiliser un switch.
int a=2;
switch(a)
{
case 1:
*
break;
case 2:
*
break;
case 3
*
break;
}
Et même un imbriquement de conditions, c'est beaucoup plus claire car on a de la place sur l'écran, on peut indenter le texte et on a pas 40 ifEnd à la fin.
C'est pour ça que je trouve que le basic n'est pas un super bon language pour apprendre, mais bon ce n'est qu'un avis perso. En plus du fait que je préfère les accolade que les "IfEnd", mais encore une fois, question de goût
Après là ou je pense par contre que tout dev sera d'accord (même ceux qui sont pour l'utilisation non-abusive du goto), c'est que par exemple :
Lbl 1
*
Getkey=31⇒Goto 2
*
Goto 1
Lbl 2
Ce genre de cas (programmation spaghetti) ne devraient jamais arriver. Et c'est aussi pour ça qu'on aime pas les Goto, car les débutants les utilisent ainsi. Il vaut mieux qu'au début ils apprennent avec pleins de boucle imbriqués mais sans Goto plutôt que de faire ça.
Faire ceci est beaucoup plus simple et logique
While 1
*
Getkey=31⇒Break
*
WhileEnd
Ou encore mieux, mais la ça dépend aussi du reste du code votre code
While Getkey≠31
*
WhileEnd
Bon et puis en plus sur Casio ils peuvent provoquer des bugs, mais bon ça c'est propre à casio.
Surtout que, concrètement, le ElseIf n'existe pas en Basic. En réalité, c'est des If imbriqués, d'où l'obligation de mettre pleins de IfEnd à la fin.
Mais sur les points que tu as énoncé, je ne peux qu'être d'accord, ne connaissant pas que le Basic.
Et c'est sûr que les programmes spaghetti, même pour sois-même ça doit pas être facile à comprendre xD
Dark, tu peux mettre qu'une seule instruction par ligne dans ton programme chimie aussi.
@Dodormeur, je suis d'accord, mais selon moi, en fait, c'est un default du language. Pour moi un sous-programme, c'est un programme que tu vas réutiliser plusieurs fois dans ton code, et le but est de ne pas le répéter. La ton sous-programme sera destiné a être appelé une seule fois, ce qui, d'un point de vue algorithmique, n'est pas si génial que ça.
Le language Basic casio n'est pas fait pour être utilisé avec beaucoup de conditions imbriqués. Pour contrer ce problème ils ont pris les goto (d’ailleurs au tout début le basic original était principalement programmé en goto). Toi tu veux pas utiliser les goto, tu utilises les sous-programmes, mais ce n'est qu'un détournement de leurs fonctions première.
Bref pour dire qu'il n'y a pas de solution magique. Selon moi en basic casio, les labels ne sont pas à bannir à 100%, car le langage est fait pour les utiliser. Après libre à chacun d'utiliser la technique qu'il veux, puisque les deux on des inconvénients :
- goto: nuis à la structure du code, car ils n'ont pas de fonction définie (contrairement à une boucle par exemple)
- sous-programme: détournement de la fonction première, encombrement de la liste des programmes.
(PS: la j'ignore les bugs de labels car pour Marmotti, ils ne buggaient pas : je partait de ses constatations. Et donc mon débat du "goto or not goto" par de son point de vue et la tu peux voir qu'utiliser ou non les Goto est discutable.
Du point de vue de quelqu'un qui aurait constaté des bugs aléatoire incessant , alors là c'est indiscutable on peut bannir les goto à 100% )
Bref un débat sans fin se profile-t-il à l’horizon ?
Disons que quand je me lance sur une question, il faut que je trouve la réponse sinon ça va m'énerver, alors depuis un mois environ j'fais mon enquête sur le sujet.
Pour l'instant ce que j'ai pu conclure, c'est que tu ne peut déjà pas mêler les lbl
Lbl 1
Locate 1,1,"Bravo"
Lbl 2
....
if A=3
then
goto 1
Else
goto 3
Lbl 3
A+1→A
goto 2
En règle général, si les Lbl foire, c'est qu'il y'a une manière plus simple pour présenter ce code :
For 1→A to 3
....
Next
Locate 1,1,"Bravo"
Donc il ne faut pas bannir les Lbl,, il ne faut juste pas les utiliser de manière inutile ou d'une mauvaise manière. (l'exemple est un peu nul, mais bon j'ai pas trouvé mieux)
De plus ce n'est pas le nombre de Lbl/Goto qui va faire buguer le programme, juste l'utilisation.
Il faut aussi savoir varier entre les sous-programmes et les Lbl. Mon menu des programme ressemble à çeci :
Guitar
-1 tab
-1-1C
-1-2D
-2 hist
-2-1dbt
...
De cette manière les sous Programmes ne deviennent pas encombrants et mélangés. Mais il ne faut pas abuser sur le nombre de sous-programmes ! Le mieux c'est de faire des sous programmes par tache : un pour donner les bonnes valeurs dans chaque cas (chaque cas sera égal à un lbl), un autre pour les graphs , un autre pour calculer, un autre pour les getkey,....Ne surtout pas faire un programme avec que des lbl mélangeant des instructions de calcule, de graph, ...
Mais aussi ne pas faire uniquement que des sous programme à la moindre instruction, certes celà peut paraître simple au début mais ça devient très vite gênant aussi bien pour le programmeur que pour l'utilisateur !
Je sais que j'ai toujours du mal à exprimer mon ce que je veux dire, alors j’espère que vous aurez compris
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd