3 votes

Déclarations de commutation non interrompues

Je comprends qu'en MATLAB il n'est pas nécessaire (comme c'est le cas en C++) de terminer chaque 'case' d'une instruction switch avec un 'break;'. L'instruction cesse d'évaluer une fois qu'elle trouve le premier cas réussi.

Cependant, j'ai la situation suivante :

switch variable
    case {0, 1}
        % Action A
    case {0, 2}
        % Action B
end

Dans la situation ci-dessus, si 'variable' est égal à 0, alors seule l'Action A se terminera. Dans le cas où variable = 0, je voudrais que les deux actions se terminent. Je pourrais faire un cas séparé pour 0 qui active à la fois les Actions A & B, mais cela ne semble guère être une programmation efficace car je devrais dupliquer les deux actions.

Je suis sûr qu'il doit y avoir un moyen simple de faire cela, mais je suis encore relativement novice en MATLAB, donc je me demande ce que je pourrais faire pour garder mon code propre ?

Cordialement

7voto

Eitan T Points 24450

La déclaration switch de MATLAB ne fournit malheureusement pas la flexibilité de la logique de passage par défaut, vous ne pourrez donc pas l'utiliser dans ce cas.

Vous pourriez remplacer le switch par des déclarations successives if (accompagnées de quelques commentaires) et voici ce que vous obtiendriez :

%# Variable Switch
if (variable == 0 || variable == 1)  %# cas {0, 1}
   %# Action A
end
if (variable == 0 || variable == 2)  %# cas {0, 2}
   %# Action B
end

et cela resterait élégant à mon avis.

6voto

Peter Points 6459

La longueur du code n'est pas nécessairement synonyme de lisibilité ou d'efficacité. Je dirais que la réponse appropriée est de se débarrasser du switch et d'écrire simplement ce que vous voulez dire :

if((variable == 0) || (variable == 1))
  ActionA();
end

if((variable == 0) || (variable == 2))
  ActionB();
end

2voto

Chris Points 12438

Vous indiquez

Je pourrais faire un cas séparé pour 0 qui active à la fois les actions A & B, mais cela ne semble guère être une programmation efficace car je devrais dupliquer les deux actions.

Peu importe l'efficacité, c'est probablement la chose la plus lisible à faire. Je privilégierais toujours la lisibilité jusqu'à ce que vous puissiez prouver qu'une partie du code est un goulot d'étranglement. Donc j'écrirais:

switch variable
    case 0
        ActionA()
        ActionB()
    case 1
        ActionA()
    case 2
        ActionB()
end

function ActionA()
    ...
end

function ActionB()
    ...
end

Si vous voulez vraiment un switch sans rupture, vous pouvez suivre les conseils d'une publication de blog de MATLAB Central sur l'instruction switch:

Pour obtenir un comportement de chute dans MATLAB, vous pouvez spécifier toutes les expressions pertinentes dans un seul cas, puis calculer conditionnellement des valeurs dans cette section de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X