Parce qu’on doit toujours séparer les routines « systèmes » des interactions utilisateurs. Ce sont des choses très différentes. Imagine une version plus évoluée de ton petit programme, tournant avec une interface graphique (un label pour afficher le résultat du test, et un composant graphique pour afficher le clavier virtuel et saisir la frappe de l’utilisateur).
Tu peux le faire en reprenant la même fonction validatePasseword(), sans rien modifier. Il suffit « juste » d’utiliser Storyboard pour ajouter les composants graphique et de taper du code pour le nouvel affichage.
Si tu avais écrit une fonction « hybride » mélangeant les calculs et l’affichage, il aurais fallu TOUT refaire, au risque d’introduire des bugs dans les nouveaux calculs.
En avançant dans les cours, tu découvrira le paradigme MVC. C’est une manière de coder qui fait que l’affichage des informations est TOTALEMENT indépendant de la manière de les calculer. Tout le système d’interface graphique d’iOS est basé sur ce concept.
2- Pourquoi interpréter la condition et rendre les print en dehors de la fonction et non pas à l’intérieur ?
Et aussi parce que c’est demandé dans l’énoncé de l’exercice !
exercice : il s’agit de créer une fonction appelée validatePassword() et qui retourne un Bool si un paramètre String contient entre 8 et 15 caractères.
Le programme doit retourner un message indiquant à l’utilisateur si le mot de passe est valide ou non.
D’ailleurs, tu peux aussi créer une autre fonction retournant le texte à afficher en fonction de la valeur du test.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let passe = "sdsf"
let test = validatePasseword(motDePasse: passe)
let texte = texteReponse(flag: test)
print ("Réponse : ", texte)
}
}
func texteReponse(flag:Bool) -> String {
if flag {
return "Mot de passe valide"
} else {
return "mot de passe invalide"
}
}
func validatePasseword(motDePasse:String) -> Bool {
let size = motDePasse.characters.count
if size>=8 && size<=15 {
return true
}
return false
}
La recherche du texte est « encapsulée » dans une fonction, ce qui la rend indépendante du programme principal. Cela n’est pas très utile ici, mais imagine que l’application doive aussi fonctionner en anglais et en allemand. C’est plus d’internationaliser le code si le texte est défini dans une routine spécifique. On peut imaginer un autre paramètre de texteReponse() : langueAffichage spécifiant si le texte doit être en français, anglais ou allemand.
En isolant chaque fonctionnalité de l’application dans une logique modulaire, on facilite les futurs modifications du code. Et des améliorations il y en TOUJOURS à faire (nouvelles fonctions, nouvel algorithme, changement d’interface, etc…).
EDIT : Les novices cherchent toujours à écrire un code optimisé le plus court possible, au lieu de penser création de « briques logicielle » réutilisables et autonomes. Cela vient avec l’expérience. En blabla tech on appelle cela « l’encapsulation ».
Tu verras plus tard que cela facilite grandement le débugage de programmer avec des « briques de légo », plutôt qu’un code spaghettis faisant tout et n’importe quoi.