• 10 hours
  • Easy

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 10/9/23

Rédigez un programme pour le terminal

Joe débarque chez vous très excité !

Salut !

J'ai vu tout ce que tu fais, c'est super ! Cela m'a même donné une idée !

Alors, voilà ce que je te propose. Ton outil permet de prévoir mes recettes. Mais parfois il y a des imprévus, et je ne fais pas exactement les choses selon ton modèle. Mais ça me serait très utile pour gérer ma ferme. Est-ce que tu penses que tu pourrais me faire un logiciel de gestion de ma ferme ?

C'est-à-dire ?

Eh bien c'est simple. Chaque jour, je rentre mes activités de la journée, et le programme calcule tout à ma place. Mes dépenses, mes recettes, le stockage de mes produits, etc.

Tu penses que c'est possible ?

Bien sûr !

Vous avez fait un nouvel adepte de la technologie, apparemment !

Joe vous pose plein de questions sur l'informatique...

Utilisez le terminal

Pour pouvoir créer le logiciel de Joe, nous allons devoir cesser d'utiliser le Playground. Eh oui, ça vous attriste. Moi aussi ! Car le Playground ne permet pas d'interaction avec un utilisateur. Et Joe veut pouvoir interagir avec le programme pour décrire ses journées.

Mais c'est pour découvrir de nouvelles choses encore plus passionnantes ! Comme le terminal, par exemple.

Le terminal, c'est un logiciel qui existe dans tous les ordinateurs. En fait, avant que les ordinateurs aient une interface graphique avec une souris qui permet d'interagir avec son ordinateur, on faisait tout au clavier avec un terminal.

Le terminal, ça ressemble à ça :

Le terminal se consiste des lignes de commande dans une fenêtre

C'est pas joli joli vu comme ça, mais ne vous inquiétez pas, ça va bien se passer !

L'éditeur en ligne de commande

Pour aller dans le terminal, il vous suffit d'ouvrir l'application Terminal qui se trouve dans votre dossier  /Applications  . Ouvrez-la et tapez  swift  puis entrée. Vous devriez obtenir quelque chose comme ça :

Après l'utilisation de la commande swift, Swift partage un message de bienvenue et la version sur laquelle vous travaillez
Swift sur le terminal

C'est l'éditeur Swift en ligne de commande. Il vous permet de taper du code et d'en obtenir un résultat. Vous pouvez écrire ce que vous voulez. Cela fonctionne comme le Playground, sauf que Swift vous répond après chaque ligne. Par exemple, vous pouvez écrire :

Les opérateurs et print marche aussi sur le terminal. Leur résultat s'affiche après la ligne de commande.
Tout fonctionne comme le Playground

Je vous laisse jouer un peu avec l'éditeur en ligne de commande. Vous pouvez utiliser tout ce que vous avez appris jusque-là pour faire des mini-programmes.

Seulement, cet éditeur comporte plusieurs défauts :

  • Il n'y a pas la colorisation ni l'autocomplétion que propose Xcode.

  • On ne peut pas revenir à la ligne précédente pour changer quelque chose.

  • On ne peut pas sauvegarder son travail.

On va donc changer notre stratégie et écrire notre code dans un fichier Swift. Laissez-moi vous montrer.

Exécutez un fichier Swift

Dans Xcode, allez dans l'onglet File / New... / File. Ou utilisez le raccourci cmd + n . Xcode affiche l'interface suivante :

La fenêtre vous demande de choisir un template pour le nouveau fichier. Nous sélectionnons Swift File.
Créons un fichier Swift

Choisissez Swift File. Et cliquez sur Next. Ensuite vous choisissez le nom de votre fichier. Je vous propose de l'appeler  Hello  , et de le sauvegarder sur votre bureau. Le fichier est ensuite créé et contient ceci :

//
//  Hello.swift
//
//
//  Created by Danyl SEMMACHE on 29/11/2021. .
//
//



import Foundation

Vous pouvez tout supprimer. Je vous propose d'écrire simplement la ligne suivante :

print("Hello World !")

Notre fichier est maintenant prêt à l'essai, et nous allons l'exécuter. Pour cela, écrivez d'abord cette commande :

cd ~/Desktop

Maintenant, nous allons pouvoir exécuter notre code avec la commande :

swift Hello.swift

Cette commande se lit "Utilise Swift pour lire et exécuter le fichier suivant".

Le programme s'exécute, et donc vous devriez voir :

Hello World!

Utilisez la commande  readLine()

Maintenant que nous savons exécuter un fichier, nous allons pouvoir gérer l'interaction avec un utilisateur. Pour cela, nous allons utiliser une nouvelle méthode : la méthode  readLine  .

Lorsque le programme rencontre cette méthode, il s'interrompt et attend que l'utilisateur écrive quelque chose. Par exemple, rajoutons cela à notre programme :

print("Comment vous appelez-vous ?")
var name = readLine()
print("Bonjour \(name)")

Sauvegardez et exécutez ! Tout d'abord la console affiche :

Comment vous appelez-vous ?

Puis l'exécution s'interrompt, c'est à l'utilisateur d'écrire. Écrivez par exemple  Joe  , et appuyez sur Entrée. Le programme reprend et affiche :

Bonjour Optional("Joe")

Eh oui ! La fonction  readLine  a pour type de retour  String?  . La fonction renvoie donc un optionnel.

À noter qu’il y a deux cas de figure clairement distincts sur ce que readLine  renvoie si l'utilisateur décide de ne pas répondre, en fonction du type d’application que vous avez choisi lors de la création de votre projet sur Xcode :

  • Application  Command Line Tool   : la variable  name  contiendrait une String  , autrement dit une chaîne de caractères, vide via le terminal de commande.

  • Application App  : la variable  name  contiendrait un nil  dans les applications mobiles iOS classiques que vous connaissez tous ! ;)

Pour parer cela, nous allons modifier un peu notre programme pour déballer notre variable de manière sécurisée :

print("Comment vous appelez vous ?")

 
if let name = readLine() {
   print("Bonjour \(name)")
}

Maintenant le programme affichera bien :

Bonjour Joe

Découvrez la notion d’algorithme

Avant d’écrire notre programme, je pense qu’il est temps que je vous parle un peu de ce que sont les algorithmes.

Kézako ? Un algorithme ?!

Pas de panique ! Et si je vous disais qu’un algorithme, c’est ce que nous sommes en train d’écrire depuis le début de ce cours, et que c’est une chose que vous faites depuis toujours sans même le savoir !

Un algorithme, c’est une suite d'instructions qui vont nous permettre d’obtenir un résultat à partir de différents éléments que l’on va lui fournir.

L’exemple parfait qui me vient en tête en écrivant ces lignes est celui d’une recette de cuisine : en suivant les étapes de la recette, cela nous permet d’obtenir un plat à partir d’ingrédients grâce à une réaction chimique. Les différentes étapes de la recette représentent donc les opérations qui constituent l’algorithme :

// Recette d’un gâteau au chocolat
let chocolat = 200 //200g
let farine = 50 //50g
let sucre = 100 //100g
let beurre = 100 //100g
let oeuf = 3 //3 oeufs

let cuisson = 180 //180°C

let gâteauAuChocolat = [chocolat, farine, sucre, beurre, oeuf, cuisson]

for étapes in gâteauAuChocolat {
      if étapes == cuisson {
            print (“Le gâteau est prêt”)
      } else {
            print (“Étape suivante”)
      }
}

La console affichera donc :

Étape suivante
Étape suivante
Étape suivante
Étape suivante
Étape suivante
Le gâteau est prêt !

Vous voyez, pour le code : c’est exactement pareil ! ;)

De manière générale, si on regarde autour de nous, notre monde est régi par des algorithmes. Les algorithmes permettent aux gens de se localiser, de trouver l’amour, de prendre des décisions, de trouver des informations sur le Web, et il y a des millions d’autres applications. Ils sont omniprésents dans notre société.

Gardez donc en tête qu’un algorithme a pour but de résoudre un problème pour une situation donnée, en produisant un résultat via une liste d'instructions. Un algorithme est l’outil qui va nous permettre de répondre à un besoin, quel qu’il soit !

Rédigez le programme

Le programme que nous allons rédiger s'inspire de ce que nous avons déjà fait. Il va poser des questions à l'utilisateur et écouter ses réponses en suivant ce schéma :

Selon la réponse de l'utilisateur, le programme proposera plusieurs réponses : pour la réponse 1, le programme proposera plusieurs choix à nouveau à l'utilisateur ; pour les réponses 2 et 3, le programme répond avec des données.

À chaque fois que l'on atteint un stop dans le schéma précédent, on recommence au début. Prenez le temps de bien comprendre ce schéma pour suivre correctement la suite.

Pour sélectionner un choix, l'utilisateur devra entrer le numéro correspondant. Voilà à quoi va ressembler le programme dans la console :

Que voulez vous faire ? 
1. 🤸‍♂️ Enregistrer une nouvelle activité 
2. 🏦 Consulter ma banque 
3. 🏠 Consulter ma grange 

2 

Vous avez 1254€ à la banque ! 

Que voulez vous faire ? 
1. 🤸‍♂️ Enregistrer une nouvelle activité 
2. 🏦 Consulter ma banque
3. 🏠 Consulter ma grange etc.

Alors, allons-y ! Créons un nouveau fichier Swift que l'on va appeler  FarmSoft  .

Le début du logiciel est simple. Il suffit d'afficher la première question :

print("""""
Que voulez vous faire ?
1. 🤸  Enregistrer une nouvelle activité
2. 🏦  Consulter ma banque
3. 🏠  Consulter ma grange
"")

Ensuite, il suffit d'ajouter l'écoute de la réponse avec  readLine  .

if let choice = readLine() {
   // Faire une action en fonction du choix de l'utilisateur
}

La variable  choice  contient le choix de l'utilisateur, à savoir 1, 2 ou 3, à priori. On va donc pouvoir utiliser cette variable pour choisir notre action :

if let choice = readLine() {
   if choice == "1" {
      print("Vous voulez enregistrer une nouvelle activité !")
   } else if choice == "2" {
      print("Votre banque contient X euros !")
   } else if choice == "3" {

 
print("""

Votre grange contient :

🍼  X bidons de lait

🌾  X bottes de blé

⚪️  X pelottes de laine

""")} else {

 
      print("Je ne comprends pas.")
   }
}

En fonction du choix de l'utilisateur, le programme affiche des réponses différentes. Testez votre programme pour vérifier que tout fonctionne bien !

C'est un bon début. Mais la syntaxe suivante n'est pas très belle :

if choice == "1" {

} else if choice == "2" {

} else if choice == "3" {

} else {

}

Pour améliorer ça, nous allons découvrir l’une des dernières structures de contrôle de Swift (comme ça, vous les connaîtrez presque toutes !).

Utilisez le switch

Pour rappel, voici les trois structures de contrôle que vous connaissez :

  • La boucle while.

  • La boucle for.

  • L'instruction if / else if / else.

Le switch est une 7e structure de contrôle. Le switch, comme l'instruction if / else, permet de gérer des conditions. Le switch est en particulier utile pour gérer des conditions répétitives comme nous avons ici.

Sa syntaxe est un peu spéciale, mais très pratique :

switch variable {
   case valeur1:
   // Instructions 1
   case valeur2:
   // Instructions 2
   case valeur3:
   // Instructions 3
   default:
   // Instructions par défaut
}

La  variable  est évaluée. Si elle est égale à  valeur1  , les instructions 1 sont effectuées ; si elle est égale à  valeur2  , les instructions 2 sont exécutées, etc. Si la variable n'est égale à aucune des valeurs, les instructions dans  default  sont exécutées.

Le code précédent est équivalent à :

if variable == valeur1 {
   // Instructions 1
} else if variable == valeur2 {
   // Instructions 2
} else if variable == valeur3 {
   // Instructions 3
} else {
   // Instructions
}

Vous avouerez que c'est quand même plus élégant avec le  switch  !

À vous de jouer

Allez, à vous de jouer dans cet exercice !

Pour accéder à la solution :

  1. Soumettez votre projet avec le bouton "Submit" en haut à droite, 

  2. Cliquez sur le titre de l'exercice en haut à gauche de la fenêtre,

  3. Puis sur "OCfondamentauxdeswift",

  4. Cliquez sur "Fork the solution".

Félicitations ! Vous savez désormais utiliser presque toutes les structures de contrôle en Swift !  Les voici :

Boucles

for in

while / repeat-while

Instructions conditionnelles

if / else if / else

switch

Et maintenant c'est à vous de jouer ! Je vous laisse implémenter tout le programme seul. Tout est dans ce schéma que je vous redonne :

Oui, c'est un assez gros exercice ! Mais il n'utilise rien de plus que ce que vous savez déjà. Et une bonne partie du code a déjà été rédigé dans le Playground, donc vous en êtes parfaitement capable. C'est un bon moyen de vérifier vos acquis avant de passer à la suite ! Retroussez vos manches et finissez-moi ça vite fait bien fait ! Joe compte sur vous  !

Vous pouvez réaliser le programme dans ce sandbox Replit.

Votre programme ne ressemble pas exactement à ceci ? Ce n'est pas grave ! L'essentiel, c'est qu'il fonctionne ! Voici quelques remarques concernant la solution que je propose :

  • Les variables  money  et  barn  sont définies tout en haut, car elles sont utilisées dans tout le programme. On dit que ce sont des variables globales, c'est-à-dire dont la portée est sur l'ensemble du fichier.

  • J'ai organisé mon code avec des commentaires un peu spéciaux :

//======================
// MARK: - Activities
//======================
  • Les lignes 1 et 3 sont juste là pour attirer l'œil et permettre une distinction claire entre les parties. C'est assez courant, mais vous pouvez mettre ce que vous voulez, tant que c'est voyant. La ligne 2 contient l'instruction  MARK:  . Cette instruction permet à Swift de structurer le code dans l'inspecteur en haut :

    Comme vous pouvez le voir, les fonctions sont séparées par les titres Parameters, Activities et Conversation, qui structurent le code. C'est pratique quand les fichiers deviennent assez longs.

  • J'ai utilisé exclusivement des fonctions. Tout le code est encapsulé dans des fonctions, ce qui fait que le programme en lui-même se résume à :

// La boucle du programme
while true {
   presentMenu()
}
  • Le   while true   permet de créer une boucle infinie. En effet, la condition  true  est par définition toujours vraie, donc la boucle while ne s'arrête jamais. 

Découvrez le mot-clé where

C’est quoi “where” ?

Eh oui ! ‘Where’ (“où” en français) est un mot-clé dans Swift qui permet de filtrer facilement les valeurs. C'est simple et puissant ! Il peut être utilisé dans de nombreuses variantes différentes, et ici on va s'intéresser à deux d'entre elles. Allez, je vous montre ! ;)

For where

Vous vous rappelez de la boucle for-in ?

Comme vous le savez maintenant, la boucle for-in parcourt tous les éléments d'un tableau, vous permettant de les manipuler selon vos besoins.

Cependant, parfois, vous n'avez pas besoin de tous les éléments et à la place, vous voulez seulement un sous-ensemble. Dans ces circonstances, le mot-clé `where` est utile.

Par exemple, voici un tableau qui contient des acteurs (sauf un, je vous laisse deviner lequel ! ;)) :

let names = ["Tom Jedusor", "Taylor Swift", "Tom  Cruise", "Chris Hemsworth", "Tom Hiddleston"]

Une boucle for-in classique pourrait afficher tous ces noms, mais en ajoutant une clause where  , nous pouvons restreindre la boucle, afin qu'elle ne fonctionne, uniquement sur les acteurs nommés “Tom” :

for name in names where name.hasPrefix("Tom") {
print(name)
}

Cela nous permet donc de filtrer et d’affiner davantage le résultat ! ;)

Switch where

Vous pouvez également utiliser where  avec switch  pour vérifier des conditions supplémentaires. Pour rappel, on utilise l'instruction switch  pour énumérer des cas, et elle est aussi utile pour gérer des conditions répétitives.

Disons que Joe souhaite avoir la température qu’il fait afin de pouvoir anticiper ses récoltes en fonction des températures paires et impaires :

var temperature = 100

switch (temperature) {
      case 0...49 where temperature % 2 == 0:
         print("Température froide et paire")

      case 50...79 where temperature % 2 == 0:
         print("Température modérée et paire")

      case 80...110 where temperature % 2 == 0:
         print("Température chaude et paire")

      default:
         print("Température hors plage ou impaire")
}

L'exemple ci-dessus vérifie non seulement le degré de température, mais aussi si le nombre est pair ou impair : avec les where  on peut donc ajouter des critères aux conditions, afin d’avoir un résultat plus précis.

En résumé

  • Le terminal est un logiciel qui permet d'utiliser son ordinateur entièrement avec le clavier. En connaissant les commandes, on peut faire tout ce qu'on fait à la souris, mais au clavier.

  • Pour lancer l'éditeur Swift en ligne de commande, il suffit d'écrire  swift  dans le terminal.

  • Pour exécuter un fichier Swift,  il faut écrire  swift  suivi du nom du fichier.

  • La commande  readLine  permet d'interagir avec l'utilisateur en écoutant ce qu'il va écrire. Elle renvoie un  String?  qu'il faut du coup déballer.

  • La commande  switch  est une structure de contrôle que l'on utilise comme ceci :

switch variable {
   case valeur1:
   // Instructions 1
   case valeur2:
   // Instructions 2
   case valeur3:
   // Instructions 3
   default:
   // Instructions
}
  • Where  filtre facilement les valeurs :

    • for where  permet de filtrer une liste.

    • switch where  permet de vérifier des conditions supplémentaires.

Je suis sûr que les programmes pour terminal n’ont plus de secret pour vous. Comme vous avez super bien travaillé jusqu’ici, je vous propose d’aller plus loin avec les fonctions dans le prochain chapitre.

Example of certificate of achievement
Example of certificate of achievement