| Extension de SELECT .... END_SELECT | |
|
|
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 2:04 | |
| Lorsqu’on a affaire aux testes sur une variable, on recourt au IF. Mais lorsque les testes deviennent nombreux, les IF imbriqués avec ses ELSE et ses END_IF deviennent une structure assez lourde et souvent sources d’erreurs. Pour éviter cela, on se rabat sur SELECT … END_SELECT. Mais son utilité (telle qu’elle est définie maintenant) est assez limitée, il me semble : Elle n’accepte que le type entier. Il serait intéressant qu’elle puisse également accepter le type caractère et l’on pourrait coder, par exemple, comme ceci - Code:
-
SELECT C$ CASE "A" : .... CASE "+" : .... CASE "0" : .... ...... END_SELECT
Et tant que nous y sommes, pourquoi pas le type « énuméré » - Code:
-
SELECT V% CASE 1 : .... : ' une seule valeur CASE 2,3,4 : .... : ' 3 valeurs successives CASE 7,99 : .... : ' 2 valeurs différentes ELSE_CASE : .... : ' pour toutes les autres valeurs non mentionnées END_SELECT
Je rêve trop ces temps-ci, mais qui sait ? Peut-être que Jack, dans le futur (pas le futur antérieur) pourra décider de la faisabilité et de l’utilité de ce souhait. Veuillez regarder ce code : - Code:
-
dim mois mois = int(rnd(1)*12 +1) print_locate 50,50 ' structure correcte, mais beaucoup de IF imbriqués et ça pourrait être pire! if (mois >= 1) and (mois <= 3) print "Premier trimestre" else if (mois >= 4) and (mois <= 6) print "Second trimestre" else if (mois >= 7) and (mois <= 9) print "Toisième trimestre" else print "Quatrième trimestre" end_if end_if end_if
' structure correcte, mais si on a une centaine de valeurs, 3 boîtes d'aspérine ' ne suffisent plus! print_locate 50,70 select mois case 1 : print "Premier trimestre" case 2 : print "Premier trimestre" case 3 : print "Premier trimestre" case 4 : print "Second trimestre" case 5 : print "Second trimestre" case 6 : print "Second trimestre" case 7 : print "Troisième trimestre" case 8 : print "Troisième trimestre" case 9 : print "Troisième trimestre" case 10 : print "Quatrième trimestre" case 11 : print "Quatrième trimestre" case 12 : print "Quatri-me trimestre" end_select
' structure INCORRECTE, mais c'est mon souhait!
select mois ' case 1,2,3 : print "Premier trimestre" ' case 4,5,6 : print "Second trimestre" ' case 7,8,9 : print "troisième trimestre" ' else : print "Quatrième trimestre end_select
| |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 12:43 | |
| et encore... le dernier exemple de IF imbriqués n'est pas correct : il manque des end_if Si on pouvait faire: - Code:
-
IF ... ELSE IF ... ELSE ... END_IF cela serait déjà pas mal... Pour des SELECT sur 1 caractère, on peut toujours feinter en faisant: SELECT ASC(Var$) mais pouvoir faire des CASE "Toto", je suis d'accord avec toi :cela serait un +... EDIT : Je sais que c'était un exemple, mais pour l'histoire des trimestre, tu peux faire comme ceci : - Code:
-
select int((mois-1)/3)+1 case 1 : print "Premier trimestre" case 2 : print "Second trimestre" case 3 : print "Troisième trimestre" case 4 : print "Quatrième trimestre" end_select | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 13:07 | |
| si on modifie le case, on pourrait ajouter la possibilité de terminer par case others: pour gérer les cas non listés | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 13:11 | |
| - Jicehel a écrit:
- si on modifie le case, on pourrait ajouter la possibilité de terminer par case others:
pour gérer les cas non listés Comme en langage C avec default... Je reviens sur l'histoire des CASE avec des chaines de caractères Quand les fonctions seront disponibles, je pense que l'on va pouvoir contourner le problème en faisant: - Code:
-
SELECT MaFunction(Chaine$) CASE 1245: .... CASE 7845: .... CASE ... END_SELECT Reste à coder MaFonction() de telle manière qu'elle renvoie une valeur numerique...(type CRC par exemple) | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 13:29 | |
| OK Nardo que ce soit Default, case others, othercase ou autre tant que l'on peut le mettre facultativement pour moi | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 15:32 | |
| Ou ELSE_CASE comme mentionné dans mon 1er post ! (vous ne faites pas attention à ce que vous lisez ? ou vous lisez à moitié ? c’est bonne celle-là HI HI HI) On pourra aussi utiliser OTHERWISE ou ..... EINH QUOI ! ce n’est pas les vocables qui manquent ! | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 15:45 | |
| ou mieux CASE ELSE qui me paraît plus logique et qui existe déjà dans les autres Basics (Basic classique, QBasic, FreeBasic...), et d'accord pour les valeurs chaînes dans Select_case, ça manque. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 15 Sep 2012 - 16:29 | |
| Je n'ai rien contre le principe du "case_else" . | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 17:52 | |
| En effet CASE ELSE me parait bien. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Extension de SELECT .... END_SELECT Sam 15 Sep 2012 - 20:27 | |
| Mais comme CASE et ELSE sont deux mots-clés existants, je pense qu'ici ce serait obligatoirement CASE_ELSE | |
|
| |
Contenu sponsorisé
| Sujet: Re: Extension de SELECT .... END_SELECT | |
| |
|
| |
| Extension de SELECT .... END_SELECT | |
|