Revenir

Entre ton email pour recevoir le guide complet pour apprendre Swift peu importe ton niveau

Apprendre Swift - Les Bases (1/2)

Avant de commencer…

Attention, il ne faut pas tout retenir par coeur, il faut comprendre comment ça fonctionne pour être capable de retrouver ce dont vous avez besoin quand vous en avez besoin ! Vous pouvez très bien chercher sur Internet ou revenir sur cet article quand vous avez oublié quelque chose !

Premier Code

Cette partie portera sur un premier code de test. Pour le tester chez vous, installer Xcode et ouvrez le :

playground.png.jpg

Une fois ouvert cliquez sur “Get started with a playground”. Choisissez iOS puis Blank puis cliquez sur Next.

Enfin choisissez où vous sauvegardez ce fichier puis cliquez sur Create.

Vous pouvez ensuite aller dans ce fichier et pour tester votre code (ou celui déjà écrit) cliquez sur le bouton triangulaire en bas à gauche.

Voici comment afficher un texte :

print("Hello World !")

On utilise print et on met entre parenthèses et guillemets le texte que l’on veut afficher.

Les Variables

Les variables sont un concept central de la programmation. Il y en a partout.

Elles servent à stocker une donnée qui a un type définis comme par exemple un chiffre ou une chaine de caractères…

Un peu comme un bout de papier sur lequel vous écrivez une information pour la réutiliser.

Une variable est d’abord déclarée puis initialisée.

Voici comment déclarer une variable :

var age = 18

Si la variable n’est pas modifiée plus tard dans le code, c’est une constante.

Pour les créer, on fait pareil mais on remplace le mot-clé var par let :

let name = "Bob"

Si on doit créer la variable et ajouter sa valeur plus loin, on doit spécifier son type :

let age2: Int
age2 = 19
// ou encore
let name2: String
name2 = "Jean"

( tout ce qui est écrit après un // est un commentaire, ce n’est pas du code )

Qu’est ce que les types ?

Les types représentent ce que contient la variable c’est-à-dire un nombre, une chaine de caractères, un nombre décimal…

Voici les types les plus courants :

  • String (chaine de caractères)
  • Int (nombre entier)
  • Double (nombre à virgule avec 16 chiffres après la virgule)
  • Float (nombre à virgule avec 7 chiffres après la virgule)
  • Bool (un booléen c’est-à-dire soit true soit false, on y reviendra)
  • les tableaux avec Array (on y reviendra car c’est à part)
  • et beaucoup d’autres !

Les Opérateurs

Les opérateurs sont, comme son nom l’indique, ce qui permet de faire des opérations sur des variables. Comme en mathématiques.

Pour faire les opérations de base on utilise les symboles +, -, * et /. Ceux là sont évidents.

var age = 2019 - 1990

// revient à faire

let birth = 1990
let date = 2019
age = date - birth

// ou encore

let double = age * 2

Une opération très courante est d’ajouter 1 à une variable, on appelle ça l’incrémentation

C’est une opération courante car on a souvent besoin de compter des choses en programmation.

Voici comment faire simplement :

var age2 = 25
age2 = age2 + 1

// écriture contractée :

age2 += 1

Et ça marche avec tous les autres opérateurs (+=, -=, *= /=) et tous les nombres aussi, pas seulement 1 !

Les Conditions

Tout ce qu’on a vu jusqu’à présent, c’est très bien mais on ne peut pas faire grand chose. On va ajouter des conditions.

Une condition c’est comme dans la vraie vie : si telle condition est vraie alors je fais telle chose sinon je fais autre chose.

Pour faire des conditions il va falloir comparer des valeurs. Voici les opérateurs : == pour l’égalité, != pour la différence, < et > pour inférieur et supérieur, <= et >= pour inférieur et supérieur ou égal.

Voici la syntaxe à utiliser :

// structure d'une condition :
let age = 20

// mot-clé if suivi d'une condition :
if age > 18 {
  // si la condition est vraie, exécute les instructions suivantes
  print("Vous êtes majeur")
} else {
  // sinon si la condition est fausse, exécute les instructions suivantes
  print("Vous êtes majeur")
}

En plus des opérateurs, on peut chaîner des conditions.

Par exemple pour dire que je veux une condition ET une autre je met && entre les conditions.

De même pour dire OU je met || et enfin un ! pour prendre l’inverse d’une condition.

Voici un exemple pour que ce soit plus clair :

let bool1 = true
let bool2 = false

if bool1 == bool2 && age > 18 {
  // Si les variables sont égales ET que l'age est supérieur à 18
  print("Les booléens sont égaux et vous êtes majeur")
} else {
  print("Les booléens sont différents ou alors vous n'êtes pas majeur")
}

De plus, on peut imbriquer des conditions dans des conditions, on peut ne pas mettre de else et on peut mettre de else if après les if.

On peut en mettre autant qu’on veut :

let price = 28.0
var money = 30.0
let isBought: String

if price < money {
  print("J'achète")
  money -= price
  isBought = "Fait"
} else if price == money // sinon si
{
  print("Il ne me restera rien")
  money -= price
  isBought = "Fait avec regret"
} else {
  print("Je n'achète pas")
  isBought = "Pas fait"
}

Pour simplifier, il y a les conditions switch qui permettent d’éviter de faire beaucoup de else if à la suite.

On passe une variable dans cette condition et pour chaque valeur possible on fait une action :

let singer = "Swift"

switch singer {
  case "Swift": // si singer = "Swift"
    print("Taylor \(singer)")
  case "Bieber": // si singer = "Bieber"
    print("Justin \(singer)")
  default: // si aucune condition n'est vraie
    print("Je ne connais pas")
}

Pour finir, les conditions ternaires.

Elles sont assez complexes à comprendre au début mais rassurez-vous, elles sont très peu utilisées.

Mais c’est toujours utile. Le schéma d’une condition ternaire est le suivant : resultat = condition ? valeur1 : valeur2.

Cela signifie que valeur1 est affectée à résultat si condition est vraie et, sinon, c’est valeur2.

Un exemple vous fera mieux comprendre que des mots :

let nb = 2
let nb2 = 14

var maximum = nb > nb2 ? nb : nb2
print(maximum) // maximum vaudra nb2 soit 14

//autre exemple :
let age = 19

var majeur = age > 18 ? "Majeur" : "Pas Majeur"
print(majeur)

Les Boucles

Les boucles sont aussi un concept que l’on utilise tout le temps en programmation.

Elles permettent de répéter des instructions un certain nombre de fois (attention à ne pas faire des boucles infinies sinon vous allez bloquer votre programme).

Un boucle fonctionne un peu comme les conditions.

La différence c’est que là, on répète les instructions tant que la conditions est vraie et non une seule fois.

Par exemple tant qu’une variable est inférieure à un certain nombre.

Voici les différents types de boucles :

// pour i compris entre 1 et 5
for i in 1...5  {
  print(i)
  // i prendra successivement les valeurs de 1 à 5
}

let range = 1...5
for a in range {
  print(a)
}

Une autre méthode :

let nb = 0
while nb <= 4 {
  print(nb)
  nb += 1
}

Si on veut exclure la valeur supérieure :

for b in 1..<5 {
  print(b)
  // i prendra successivement les valeurs de 1 à 4
}

Pour finir, si on ne se sert pas de la variable qui prend successivement les différentes valeurs de l’intervalle, on fait :

for _ in 1...10 {
  print("Bonjour")
}

Vous ne voyez sans doute pas l’utilité maintenant mais c’est en réalité très utile, vous verrez.

Les Fonctions

Les fonctions, nous les utilisons tout le temps. Vous les avez déjà utilisées sans le savoir.

Par exemple quand on fait print('bla bla'), vous appelez la fonction print.

À quoi sert une fonction ? Une fonction sert à réutiliser du code qui sert à faire une action bien définie.

Par exemple, si on doit souvent traiter une chaîne de caractères pour voir si c’est une adresse email ou non, on peut mettre le code qui va faire cette vérification dans une fonction.

Dans le cas de print, cette fonction sert à afficher dans la console ce que vous lui donnez. Voici un exemple de fonction :

// création d'une fonction :

func sayHello() {
  print("Hello")
}

Une fonction peut avoir des paramètres ou non et ces paramètres sont des variables que l’on donne à la fonction pour qu’elle les traite.

Dans le cas de print on donne en paramètre ce qu’on veut afficher.

Les fonctions peuvent aussi renvoyer une variable.

Attention, les variables définies en dehors de la fonction ne sont pas accessibles par celle-ci : il faut les passer en paramètres.

Voici comment on les crées :

// fonction avec un paramètre et qui renvoie une valeur :

func doubleInt(nb: Int) -> (Int) {
  return nb * 2 // renvoie le nombre passé en paramètre multiplié par 2
}

// j'appelle de la fonction en lui passant 4 en paramètres et je récupère la valeur de retour :
var double4 = doubleInt(nb: 4) // double4 vaudra ce que la fonction renvoie
print(double4) // affiche 8

// autre exemple, cette fois en passant 8 en paramètres
var double8 = doubleInt(nb: 8) // double8 vaudra ce que la fonction renvoie
print(double8) // affiche 16

// fonction avec plusieurs paramètres :
func multiply(nb: Int, times: Int) -> (Int) {
  let result = nb * times
  return result
}

// son appel, avec nb qui vaut 5 dans la fonction et times qui vaut 3
var triple5 = multiply(nb: 5, times: 3)
print(triple5) // affiche 15

Le nom des fonctions et des paramètres doivent être clairs.

Et pour que ce soit plus lisible et clair on peut mettre des labels aux paramètres.

Ce sont des noms utilisés lors de l’appel de la fonction mais ce n’est pas le nom de la variable dans la fonction : ils servent juste à rendre plus lisible l’appel de la fonction :

// paramètres à label :
func square(theNumber nb: Int) -> Int {
  return nb * nb
}

print(square(theNumber: 3)) // affiche ce que renvoie la fonction : 9

Dans l’exemple précédent, j’utilise le label theNumber lorsque j’appelle la fonction square mais dans la fonction le paramètre s’appelle nb et non pas theNumber.

On peut aussi ne mettre aucun nom au paramètre si celui-ci est assez explicite.

Il suffit de remplacer le label du paramètre par un _ dans la création de la fonction :

// fonction avec un parametre sans nom :
func half(_ nb: Int) -> Int {
  return nb / 2
}

let half6 = half(6)
print(half6) // affiche 3

Il arrive que parfois, on ne sache pas combien de paramètres la fonction va prendre.

Si on veut prendre un nombre indéterminé de paramètres, il faut le préciser avec après le type du paramètre.

// Nombre de paramètres indéfini :
func average(_ numbers: Int...) -> Int {
  var sum = 0

  // quand le nombre de paramètres est indéfini, le paramètre qui les regroupe tous est un tableau. Ici, numbers est donc un tableau
  for number in numbers {
    sum += number
  }

  return sum / numbers.count
  // numbers.count renvoie le nombre total d’éléments dans le tableau
}

print(average(10, 20, 15, 18, 16, 12, 3))

Un autre cas beaucoup plus rare, modifier directement les variables passées en paramètres.

Ce sont les paramètres in-out :

//in-out :
func exchange(first: inout Int, second: inout Int) {
  (first, second) = (second, first)
  //le moyen le plus simple pour échanger 2 valeurs
}

var aNumber = 3
var another = 5
exchange(first: &aNumber, second: &another)

print("Premier : \(aNumber), Second: \(another)")

La suite

Merci d’avoir suivi cet article !

Vous avez appris beaucoup de choses.

Vous n’avez pas fini

Il faut que vous complétiez vos connaissances sur le langage Swift sur la page Apprendre Swift Partie 2.

Cette seconde partie vous permettra ensuite d’apprendre le développement iOS.

Pour ça j’ai crée un guide pour vous qui va vous apprendre les bases et la méthode pour développer des applications par vous-même.

Vous pouvez dès maintenant la charger dans un nouvel onglet.

Accéder à la formation sur le développement iOS pour débutants

La partie 2 ne vous prendra qu’environ 10 minutes tout comme cette partie.