Swift-5-

Structure de contrôle: Conditionnelle

Retour vers: Type Collection Array

Prérequis

Revoir l’étude des schémas d’algorithmes vue dans Algorithme & Programmation

Instruction If

le schéma d’algorithme de choix simple :

Si Condition   
Alors
    Séquence d'instruction
Fin-Si

La version Swift de ce schéma sous trois écritures. Les accolades tiennent lieu de début (Alors) et Fin de bloc (Finsi). La variable condition est une valeur booléenne. Le signe == est un opérateur booléen délivrant True ou False. Le Si se traduit if en anglais

 
var age = 18
var condition = ( age == 18)
if condition {
 print("Vous êtes majeur")
}
// On peut aussi écrire
condition = age == 18
if condition {
 print("Vous êtes majeur")
}
// et aussi 
if age == 18 {
 print("Vous êtes majeur")
}
Instruction if else

le schéma d’algorithme de choix « si alors sinon  » :

Si Condition   
Alors
    Séquence d'instruction
Sinon
    Séquence d'instruction 
Fin-Si

La version Swift de ce schéma. le mot réservé else est la traduction de sinon.

var age = 18
var condition =  age < 18)
if condition {
 print("Vous êtes majeur")
} else {
 print("Vous n'êtes pas majeur")
}

Comme pour le langage Ada Swift implémente le schéma « Sinon Si »

Si Condition-1  
Alors
    Séquence d'instruction
Sinon Si Condition-2
    Séquence d'instruction 
Sinon 
    Séquence d'instruction
Fin-Si

La version Swift de ce schéma

age = 17
if age == 20 {
 print("à 20 ans vous êtes majeur")
} else if age == 18 {
 print("à 18 ans vous êtes majeur")
} else {
 print("Vous n'êtes pas majeur")
}
Instruction Selon faire

Le langage Swift propose l’instruction switch qui permet de programmer des choix multiples selon une syntaxe plus claire. Cette instruction est la traduction du schéma élémentaire Selon Faire étudié dans la partie Algorithmique de cette série d’articles.

Selon variable ou expression Faire
   cas valeur1 
      ... instructions à réaliser si la variable vaut valeur1 
   cas valeur2 
      ... instructions à réaliser si la variable vaut valeur2
   cas valeur3 
      ... instructions à réaliser si la variable vaut valeur3 
   cas défaut  
      ... instructions à réaliser par défaut
Fin-Faire

variable ou expression correspondent à n’importe quelle variable ou expression Swift. Les instructions sont des instructions ou des blocs d’instructions Swift. les accolades marquent le debut et la fin du bloc d’instructions Switch. L’instruction switch évalue la valeur d’expression puis compare le résultat avec les valeurs des différents cas. Si l’une des valeurs de case correspond à l’expression, le programme exécute les instructions correspondantes puis l’instruction switch se termine. Si aucune correspondance n’est trouvée, il va directement à l’instruction default. A noter que, les clauses case sont évaluées dans l’ordre. Après avoir exécuté le code correspondant à un case, l’exécution du programme ne continue pas avec le case suivant, mais est dirigé vers l’instruction suivant l’accolade fermante du Swich, il est donc inutile d’indiquer un break à la fin de chaque case. Lorsqu’une condition d’une clause case est remplie, l’exécution de switch reprend juste après l’accolade fermante.

let nombre = 90
switch nombre {
case 0:
    print("le nombre est 0")
case 1:
    print("Le nombre est 1")
case 1,6,7,8,9,10:
    print("le nombre est 1,6,7,8,9 ou 10")
default:
    print("c'est quoi ce nombre")
}

Une condition de case peut être un ensemble de valeurs. Dans l’exemple suivant un nombre compris dans la liste de nombres 6,7,8,9,10 permet d’executer la commande print(« le nombre est 1, 6,7,8,9,10).

Remarque: Si le nombre est 1, le premier case sera exécuté, puisque les case sont évalués dans l’ordre. Si l’on veut aussi pouvoir exécuter le second case, toujours avec le chiffre 1, il faudra introduire l’instruction fallthrough. Puisque l’exécution de switch s’arrête lorsque la condition d’une clause case est remplie, il n’est donc pas possible d’activer la seconde clause avec le nombe 1 comme choix. Si l’on veut vraiment continuer à exécuter la branche suivante il faut écrire fallthrough.

let nombre = 1
switch nombre {
case 0:
    print("le nombre est 0")
    fallthrough
case 1:
    print("Le nombre est 1")
case 1,6,7,8,9,10:
    print("le nombre est 1,6,7,8,9 ou 10")
default:
    print("c'est quoi ce nombre")
}

Une condition de case peut être un intervalle de valeurs.

let température = 83
switch (température) {
case 0...17:
    print("Froid")
case 18...21:
    print("Confortable")
case 22...50:
    print("Chaud ou très chaud")
default:
    print("Température insupportable")
}

le mot réservé where peut être utilise dans un bloc switch pour étendre une condition case. Dans l’exemple suivant l’instruction switch les condition de chaque clause case sont activée, dans un premier temps, pour tester si un nombre appartient à un intervalle donné, mais aussi pour vérifier si le nombre est pair ou impair.

température = 11
switch (température) {
case 0...17 where température % 2 == 0:
   print("Froid et pair")
case 18...21 where température % 2 == 0:
   print("Confortable et pair")
case 22...50 where température % 2 == 0:
   print("Chaud ou très chaud et pair") 
default: 
   print("Température insupportable ou impair") 
}

Une condition de case peut être un tuple.

let coordonnées = (1, -1)
switch coordonnées {
case let (x, y) where x == y:
   print("(\(x), \(y))  x == y")
case let (x, y) where x == -y:
   print("(\(x), \(y))  x == -y")
case let (x, y):
   print("(\(x), \(y)) x et y sont différent en valeur absolue")
}

L’instruction break est utilisée pour sortir d’un bloc d’instructions délimité par une accolade ouvrante ou fermante. Quelquefois codées dans des boucles, elle n’est d’aucune utilité dans une instruction switch pour les raisone invoquées précédemment, bien que l’on pourrait lui trouver une utilité dans la condition default du swich pour signaler « ne rien faire »

let coordonnées = (1, -1) 
switch coordonnées { 
case let (x, y) where x == y: 
   print("(\(x), \(y)) x == y") 
case let (x, y) where x == -y: 
   print("(\(x), \(y)) x == -y") 
case let (x, y): 
   break 
}