Swift: print() vs println() vs NSLog() — que choisir et pourquoi est-ce important ?
\n\nQuiconque commence à apprendre Swift se retrouve tôt ou tard confronté à l'affichage de données dans la console. Rien de plus simple, semble-t-il. Mais une confusion surgit : print(), println() et NSLog() — quelle est la différence ? Pourquoi trois méthodes si une seule suffirait ? Dans cet article, nous allons tout clarifier, illustrer avec des exemples et vous aider à ne plus jamais confondre ces fonctions.
Ce sujet est basé sur une question populaire réelle de Stack Overflow, qui a recueilli des milliers de vues. Nous l'avons adaptée pour un contenu éducatif, afin que vous puissiez non seulement mémoriser, mais aussi comprendre la logique de Swift.
\n\n\n\n
Bref historique : d'Objective-C au Swift moderne
\n\nPour comprendre la différence, il faut se plonger un peu dans l'histoire. Swift est un langage jeune (sorti en 2014), mais il a été créé comme successeur d'Objective-C. C'est pourquoi coexistent pacifiquement des fonctions « natives » de Swift et d'anciennes venues du monde Apple.
\n\n- \n
println()— une relique des toutes premières versions de Swift (avant la version 2.0). Aujourd'hui, elle a été complètement supprimée. \n print()— le remplacement moderne deprintln(), apparu dans Swift 2.0. \n NSLog()— une fonction du monde Objective-C, encore activement utilisée pour le débogage. \n
Si vous écrivez en Swift moderne (versions 4.x et supérieures), vous ne rencontrerez plus println() — le compilateur générera simplement une erreur. Mais dans les anciens tutoriels et forums, il apparaît encore, il est donc important de comprendre ce que c'est et par quoi il a été remplacé.
\n\n
print() — l'outil principal pour l'affichage
\n\nComment fonctionne print() ?
\n\nDepuis Swift 2.0, print() est devenu le moyen standard d'afficher des données dans la console. Il est flexible, simple et entièrement contrôlable.
let name = "Anna"\nlet age = 25\n\nprint("Bonjour, \\(name) ! Tu as \\(age) ans.")\n// Affichage : Bonjour, Anna ! Tu as 25 ans.\n\nLa principale différence avec l'ancien println() est que print() n'ajoute pas automatiquement un caractère de nouvelle ligne. En fait, il l'ajoute, mais vous pouvez le contrôler avec le paramètre terminator.
// Affichage normal\nprint("Première ligne")\nprint("Deuxième ligne")\n// Affichage :\n// Première ligne\n// Deuxième ligne\n\n// Affichage sans saut de ligne\nprint("Première ligne", terminator: "")\nprint("Deuxième ligne", terminator: "")\n// Affichage : Première ligneDeuxième ligne\n\nParamètres de print()
\n\n- \n
items— ce que vous affichez (peut être plusieurs valeurs séparées par des virgules). \n separator— le séparateur entre les éléments (par défaut un espace). \n terminator— ce qui est placé à la fin de la ligne (par défaut\\n— un saut de ligne). \n
print(1, 2, 3, separator: "-", terminator: "!")\n// Affichage : 1-2-3!\n\nQuand l'utiliser : pour l'affichage normal de données, la journalisation dans des applications simples, les exemples pédagogiques.
\n\n\n\n
println() — un invité du passé
\n\nSi vous rencontrez println() dans un ancien code, sachez qu'il s'agit de l'équivalent de print() des premières versions de Swift. La seule différence : println() ajoutait toujours un caractère de nouvelle ligne à la fin, et n'avait pas de paramètre terminator.
// Ancien code en Swift 1.x\nlet x = 10\nprintln("Valeur de x = \\(x)")\n// Affichage : Valeur de x = 10 (avec saut de ligne)\n\nDans les versions modernes de Swift (à partir de la 2.0), println() n'existe plus. Si vous essayez de l'utiliser, vous obtiendrez une erreur de compilation. Remplacez-le simplement par print() — et tout fonctionnera.