Je développe un jeu en JavaScript où vous commencez avec une entrée utilisateur, stockée dans la variable "contrôleur". Les options pour l'utilisateur consistent à commencer à démarrer le jeu ou à en savoir plus sur le jeu. J'allais utiliser le code suivant
if(controller === "start"){
// Game code sitting here
}
else if(controller === "about"){
// All about the Game
}
else{
// Tells the user again to type start to start or about to learn about the game
}
quand j'ai réalisé que je devrais peut-être utiliser des boîtiers de commutation à la place ...
Donc, ma question est de savoir quand utiliser les cas de commutation au lieu des instructions if et que je devrais utiliser dans ce cas. Je voudrais également savoir si vous pensez que je devrais stocker mon code de jeu dans une fonction et l'appeler si le contrôleur est égal à "start" ou simplement le placer dans le cas de l'instruction/switch if comme il est atm?
Quand utiliser les instructions
switch
au lieu des instructionsif
?
Utilisez switch
au lieu de if
lorsque:
Utilisez if
au lieu de switch
lorsque:
que je devrais utiliser dans ce cas?
Celui avec lequel vous êtes le plus à l'aise. Pour une évaluation de moteur d'état, vous gagneriez un peu de flexibilité avec une instruction switch
, dans la mesure où vous pourriez ajouter un peu plus facilement ces derniers. Mais la différence est trop mineure pour être importante.
Dois-je [je] stocker mon code de jeu dans des fonctions [séparées], ou simplement le placer dans le boîtier if statement/switch comme il est atm?
Vous devez absolument déplacer le code interne de chaque branche vers des fonctions distinctes. Vous ne pouvez pas facilement tester à l'unité la fonctionnalité si elle se trouve au milieu d'une fonction de mille lignes.
Sémantique, sémantique, sémantique.
Personnellement, dans une situation comme celle-ci, je fais un jugement pour savoir lequel sera plus facile à comprendre.
Ce qui influence la facilité de compréhension, encore une fois, à mon avis, est peut-être une combinaison de plusieurs facteurs:
if (x) { } else { }
est plus maigre.Les deux premiers, collectivement exhaustifs et mutuellement exclusifs, viennent à moi en pensant à un interrupteur physique. Disons que j'ai un interrupteur qui peut être dans 5 états. Pour être vraiment un commutateur, il ne peut être que dans un seul état à un moment donné. Il ne peut jamais ne pas avoir d'État et il ne peut pas coexister avec un autre État. Dans le logiciel, cela revient à dire que pour toute entrée, au moins une des déclarations de cas doit correspondre (y compris la valeur par défaut).
Encore une fois, c'est ma préférence personnelle. Je ne sais pas s'il existe une directive officielle à ce sujet.
Les cas s'adaptent bien à cette opération. Vous pouvez également instancier un dictionnaire singleton, puis le remplir avec toutes les fonctions que vous auriez besoin du contrôleur pour exécuter, puis parcourir simplement le dictionnaire chaque fois que le contrôleur est activé.
Utiliser if/then s'avérerait problématique car il serait beaucoup plus difficile à maintenir qu'une déclaration de cas ou un dictionnaire.