Étape 4: Introduction à la logique de la Machine d’État
Si vous ne connaissez pas ou n’avez pas utilisé la logique de machine d’État dans la programmation, c’est la meilleure façon de briser des problèmes complexes en gérables États et transitions d’État. Une des façons plus faciles à implémenter un ordinateur d’État est d’utiliser une instruction switch .
Exemple d’une machine d’État à l’aide d’une instruction switch :
switch(state) {case INITIAL: // process INITIAL state break; case STATE1: // process STATE1 state break; case CLEAR: clearAll(); state = INITIAL; break; default: break; }
Selon son état, il y a seulement quelques clés valides. Jetons un oeil à l’état premier appelé INITIAL. Comme vous pouvez le voir sur le diagramme de l’État l’État INITIAL ne peut avoir les clés suivantes: 0-9 et « * » (astérisque), sinon c’est une erreur de format.
État Clés Suivant État Commentaire 9-0 INITIAL Début1 X
* WILDCARD1 * @
INITIAL n’importe quoi d’autre Format Error
Voici un extrait de code montrant comment j’ai implémenté l’État INITIAL :
char key = keypad.getKey ();<br> if (key != NO_KEY) { switch(state) { case INITIAL: // X if(validKeys0to9(key)) { pos = displayKey(key, pos); storeKey(key); state = START1; } else if (validWildCard(key)) { // *@ pos = displayKey(key, pos); state = WILDCARD1; } else { invalidFormat(); clearAll(); } break;
Comme vous pouvez le voir, j’ai créé quelques fonctions d’assistance pour rendre le code facile à lire.
// Validate key *<br>// return true if valid, else false int validWildCard(int key) { int valid=0; switch(key) { case '*': valid=1; break; } return valid; } <br>// Validate key 0-9 // return true if valid, else false int validKeys0to9(int key) { int valid=0; switch(key) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': valid=1; break; } return valid; }