Home           
Les structure de contrôle en MEL
 

<< Les opérateurs dans MEL   Les procédures en MEL >>

Nous allons voir ici les structures de contrôles en MEL. Nous allons d'abord nous attarder sur les valeur booléennes.

Les booléens

Les booléens sont des variables qui ne peuvent prendre que 2 valeurs VRAI ou FAUX. Le MEL n'a pas de type booléen. Pour palier à ce manque il utilise le 0 pour remplacer FAUX et tout ce qui n'est pas 0 est considéré comme VRAI.

Le MEL introduit 4 mots clé pour rendre le code plus lisible:

  • true et on qui valent tous les deux 1 ;
  • false et off qui valent tous les deux 0.

Ces mots clé permettent d'avoir un code plus simple. MAIS, il faut éviter au possible de comparer un valeur avec true ou on. En effet, cela peut conduire à des erreurs d'interprétation. Mais nous verrons cela avec les exemples.

if

if sert pour réaliser des tests conditionnels. C'est le si.

if($a == 0)
{
//bloc de code
}
else if($b == 0)
{
//bloc de code
}
else
{
//bloc de code
}

On remarque qu'il est possible d'utiliser les instructions else if et else.

Voici un exemple complet :

int $a;
$a=true;
if($a == true)
   print($a + " est vrai\n");
else
   print($a + " est faux\n");
$a = false;
if($a == true)
   print($a + " est vrai\n");
else
   print($a + " est faux\n");
$a = 4;
if($a == true)
   print($a + " est vrai\n");
else
   print($a + " est faux\n");

if($a)
   print($a + " est vrai\n");
else
   print($a + " est faux\n");

Ce code donne le résultat suivant:

1 est vrai
0 est faux
4 est faux
4 est vrai

Il faut remarquer que quand $a vaut 4, elle n'est pas égale à true alors que pourtant elle est vraie. Il faut donc faire très ATTENTION.

Il est aussi possible d'utliser l'opérateur ?: ( (condition) ? expression1 : expression2 ).

float $b;
$b=($a == 0)?true : false;
print($b);

En tapant ce code à la suite du précédent, voici ce qu'on obtiendra : 0. Il faut remarquer qu'un float peut aussi prendre les valeurs définies en MEL pour remplacer VRAI et FAUX.

Si la condition entre parenthèse est vérifiée alors l'instruction avant le ':' est effectuée sinon c'est celle après le ':'.

switch ... case

Cette structure permet de réaliser une action en fonction de la valeur d'une variable.
Ici, c'est la variable $a qu'on va tester.

switch($a)
{
   case 1 :
      //bloc de code
   break;


   case 2 :
   case 3 :
      //bloc de code
   break;


   default ://dans tous les autres cas
      //bloc de code
   break;


}

Ici, la variable $a peut avoir les types int et string.

Les différents cas peuvent être des chaines de caractères, des entiers,...
Le break permet d'arrêter la série d'instructions à effectuer pour un choix donné.

Si break n'est pas mis alors les opérations du cas suivant seront effectuées.
Il est obligatoire, sinon toutes les cas suivants seront réalisés. Le cas default permet de gérer tous les autres cas qui peuvent être choisis alors qu'on ne souhaite pas les traiter dans notre programme.

Voici un exemple complet qui suit l'exemple précédent :

int $c=0;
print($a + " " + $b + " " + $c +"\n");

switch($a)
{
   case 0:
   case 1:
      print("presque 0\n");
   case 4:
      print("4\n");
   break;
   default:
      print("par défaut\n");
   break;
}

switch($b)
{
   case 0:
   case 1:
      print("presque 0\n");
   case 4:
      print("4\n");
   break;
   default:
      print("par défaut\n");
   break;
}

switch($c)
{
   case 0:
   case 1:
      print("presque 0\n");
   case 4:
      print("4\n");
   break;
   default:
      print("par défaut\n");
   break;
};

Ce code donne le résultat suivant :

4 0 0
4
par défaut
presque 0
4
Sur cet exemple, il est possible de se rendre compte que si un break est oublié, de drôle de choses peuvent arriver. De plus, les flottants ne donnent pas les résultats attendus. En effet, il est impossible de faire un test d'égalité avec un flottant.

while

while permet de réaliser une boucle tant que la condition du while est vérifiée.

int $i = 0;
while($i<5)
{
   $i++;
   print ($i + "\n";
}

Et voici le résultat :
0
1
2
3
4

do...while

Le do...while réalise la même chose que le while (réalisation d'un bout de code tant qu'une condition est vérifiée). La seule différence est que la première itération de la boucle est toujours réalisée. La condition est testée seulement à la fin de la boucle, après avoir exécuté le morceau de code de la boucle.

for

Les boucles sont les héritières du C et du C++. Ici, l'initialisation, la condition d'arrêt et l'incrémentation sont contenues dans la même ligne.

for($i=0;$i<5;$i++) // Faire attention aux points virgules
{
   print ($i + "\n");
}

Cela donne le même résultat qu'avec la boucle while ci-dessus.

for...in

MEL propose une forme spéciale de for. Il s'agit de passer sur tous les éléments d'un tableau. Pour mieux comprendre utilisons un exemple.

string $type_de_voiture[3] = {"CLIO RS","FERRARI F40","ASTON MARTIN DB7"};
string $voiture;

for ($voiture in $type_de_voiture) {
   print("Je veux une nouvelle ");
   print($voiture + ".\n"); }

Et voici le résultat :

Je veux une nouvelle CLIO RS.
Je veux une nouvelle FERRARI F40.
Je veux une nouvelle ASTON MARTIN DB7.

Les fonctions d'existence

Il existe 3 fonctions qui permettent d'indiquer l'existence de scripts, de commande, d'objets ou d'attributs d'objets :

  • exists : permet de tester l'existence d'un script ou d'une commande ;
    if (exists("polySphere")) {
    polySphere; // crée une sphère en poly
    }

    Si la commande "polySphere" existe, alors appel de "polySphere".

  • objExists : permet de tester l'existence d'un objet ;
    polySphere -name "toto";
    print(objExists("toto")+"\n");
    print(objExists("tata")+"\n");
    Résultat :

    0
    1

    Donc l'objet "toto" existe mais pas l'objet "tata".

  • attributeExists : permet de tester si l'attribut d'un noeud existe.
    if (attributeExists("visibility","toto")) {
    print(getAttr("toto.visibility"));
    };

    Résultat : 1.

Ces 3 fonctions seront expliquées plus en détail plus tard.
 

<< Les opérateurs dans MEL   Les procédures en MEL >>
  eXTReMe Tracker