Swift adventures : les opérateurs "!" et "?"

Tous ceux qui ont essayer de lire un peu de code Swift au moins pour voir à quoi ça ressemble ont dû voir quelques « ? » et « ! » se balader dans le code. Ces opérateurs sont une des grandes nouveautés que nous apporte Swift et vous risquez de les voir très souvent si vous vous y mettez.

Alors finalement, Swift, c’est trop bizarre ?

Non. Je vous explique tout ça. En Swift, les opérateurs « ! » et « ? » indique si un attribut est optionnel ou non. Par défaut un attribut ne peut pas être nul. Et « ! » signifiant explicitement qu’un attribut ne peut pas être nul, ces deux lignes reviennent donc à dire la même chose :

var chaine:String!
var chaine:String

Ainsi, si je n’initialise pas la variable chaine dans mon constructeur, mon code ne compilera pas.

Mais si je veux qu’il puisse être nul à la création de mon objet ? Oui, on peut très bien ne pas avoir besoin systématiquement que l’attribut chaine soit initialisé. Alors pour cela on utilisera l’opérateur « ? » comme ceci :

var chain:String?

On indique donc au compilateur que chaine peut avoir une valeur nulle. Du coup, il ne nous embête plus à l’initialisation. Par contre, le « ? » va nous faire changer notre façon de développer. En effet, il faudra dire au compilateur que l’on est sûr que notre attribut n’est pas nul lorsque que l’on voudra l’utiliser.

chaine!.lenght

On dit donc ici :

Je veux savoir la longueur de ma chaine de caractère, je sais qu’elle peut être nulle mais je t’assure que là elle ne l’est pas. Tu peux y aller tranquillement !

Inversement, si j’utilise « ? » en lieu et place de « ! » je préviens le compilateur que chaine risque d’être vide. Il le vérifiera donc et s’il est nul il n’ira pas plus loin.

chaine?.lenght

On dit donc au compilateur :

Attention chaine risque d’être nul, mais si il ne l’est pas donne moi sa longueur s’il te plait.

J’espère que vous avez tout compris et que ça vous aidera dans le futur. Si vous avez une question quelconque sur les opérateurs « ! » et « ? » en Swift n’hésitez pas à la poser dans les commentaires de cet article.

On résume !

« ! » utilisé à l’initialisation indique que l’attribut ne peut pas être nul. Par défaut, c’est déjà le cas.

« ? » utilisé à l’initialisation indique qu’un attribut peut être nul. Il faudra après préciser au compilateur comment réagir en sa présence.

« ! » utilisé ailleurs dans le code indique que l’on est sûr que la variable ne sera pas nul à « l’instant t »

« ? » utilisé ailleurs dans le code indique que la variable risque d’être nulle. Donc le compilateur la testera avant d’appeler une de ses méthodes.

Pour aller plus loin :