Littéraux Objective-C

Ce tutoriel va vous apprendre à programmer plus efficacement en utilisant des littéraux d'objet!


Littéraux et Expressions littérales

En programmation, un littéral est simplement une valeur fixe qu'un programmeur entre dans un fichier de code source. Quelques exemples de C comprennent:

 année int = 2012; char initial = 'M';

Dans ce qui précède, «2012» est un int littéral et 'M' est un carboniser littéral.

Les informaticiens font aussi parfois référence à expressions littérales. Un expression est simplement un groupe de valeurs et d'opérateurs qui retournent une nouvelle valeur, telle que "2 * pi * r". Une expression littérale est une expression qui contient uniquement des valeurs littérales, telles que "2 * 3.14 * 10"..

L’extrait de code suivant montre comment créer et affecter des variables avec expressions littérales en C:

 int résultat = 15/5; // L'expression littérale "15/5" donne 3 double = 5/2; // L'expression littérale "5/2" donne 2,5

Etant donné que Objective-C est un sur-ensemble de C, toutes les lignes de code présentées en C jusqu'à présent sont également conformes à la syntaxe Objective-C. Cependant, tous les littéraux démontrés étaient également destinés à des types de données primitifs. Une utilisation plus intéressante des littéraux est de les appliquer à des objets.

Ce qui suit est un exemple de littéral d'objet:

 NSString * siteTitle = @ "Mobiletuts +";

Dans la ligne de code ci-dessus, @ "Mobiletuts +" est un littéral d'objet utilisé pour représenter un objet chaîne. Sans l'utilisation d'un littéral d'objet, la ligne de code ci-dessus devrait être écrite très différemment, peut-être comme ceci:

 NSString * siteTitle = [NSString stringWithUTF8String: "Mobiletuts"];

Comme vous pouvez le constater, la syntaxe littérale de l'objet est beaucoup plus concise et lisible.

Avec la sortie du compilateur Apple LLVM 4.0, un support littéral d’objet supplémentaire a été ajouté pour NSNumber objets, objets de tableau et objets de dictionnaire.


NSNumber Literals

NSNumber les objets peuvent maintenant être représentés avec des littéraux d'objet.

L'extrait de code suivant illustre le style traditionnel:

 NSNumber * boolYES = [NSNumber numberWithBool: YES]; NSNumber * boolNO = [NSNumber numberWithBool: NO]; NSNumber * charX = [NSNumber numberWithChar: 'X']; NSNumber * quaranteSevenInt = [NSNumber numberWithInt: 47]; NSNumber * quaranteSevenUnsigned = [NSNumber numberWithUnsignedInt: 47U]; NSNumber * quaranteSevenLong = [NSNumber numberWithLong: 47L]; NSNumber * goldenRatioFloat = [NSNuméroAvecFloat: 1.61803F]; NSNumber * goldenRatioDouble = [NSNumber numberWithDouble: 1.61803];

En utilisant des littéraux d'objet, ce qui précède peut être récrit simplement:

 NSNumber * boolYES = @YES; NSNumber * boolNO = @NO; NSNumber * charX = @ 'X'; NSNumber * quaranteSevenInt = @ 47; NSNumber * quaranteSevenUnsigned = @ 47U; NSNumber * quaranteSevenLong = @ 47L; NSNumber * goldenRatioFloat = @ 1.61803F; NSNumber * goldenRatioDouble = @ 1.61803;

Littéraux de la collection Objective-C

Les littéraux de collection sont un complément extrêmement utile à Objective-C. Le nouveau compilateur LLVM permet de créer des littéraux de collection pour les tableaux et les dictionnaires, mais pas les ensembles..

Littéraux NSArray

L'ancienne syntaxe pour créer un NSArray:

 NSArray * instruments = [NSArray arrayWithObjects: @ "Ocarina", @ "Flute", @ "Harp", nil];

La nouvelle syntaxe littérale d'objet pour la création d'un NSArray:

 NSArray * instruments = @ [@ "Ocarina", @ "Flûte", @ "Harpe"];

Malheureusement, la syntaxe ci-dessus ne fonctionnera pas pour déclarer un NSMutableArray, mais il y a un travail facile autour. Il suffit de passer le mutableCopy message à l'objet nouvellement formé:

 NSMutableArray * instrumentsMutable = [@ [@ "Ocarina", @ "Flûte", @ "Harpe"] mutableCopy];

Dictionnaire littéral

La méthode traditionnelle pour créer un dictionnaire avec Objective-C ressemble à ceci:

 NSArray * keys = [NSArray arrayWithObjects: @ "Caractère", @ "Arme", @ "Points de repère", nil]; NSArray * objects = [NSArray arrayWithObjects: @ "Zelda", @ "Sword", [NSNumber numberWithInt: 50], nil]; NSDictionary * stats = [NSDictionary dictionaryWithObjects: objects forKeys: clés];

Ou bien, une alternative un peu moins verbeuse:

 NSDictionary * stats = [NSDictionary dictionaryWithObjectsAndKeys: @ "Zelda", @ "Character", @ "Sword", @ "Weapon", [NSNumber numberWithInt: 50], @ "Hitpoints", nil];

Les deux exemples ci-dessus sont d'excellents exemples de la raison pour laquelle Objective-C a développé la mauvaise réputation d'être excessivement prolixe. Pas plus! Avec les littéraux d'objet, le code ci-dessus peut être récrit simplement:

 NSDictionary * stats = @ @ "Caractère": @ "Zelda", @ "Arme": @ "Épée", @ "Points de repère": @ 50;

C'est beaucoup plus facile à comprendre et à écrire.

Collection Subscripting

En plus de pouvoir créer des collections avec des littéraux d'objet, le dernier compilateur LLVM a également introduit la prise en charge de l'accès aux valeurs de tableau ou de dictionnaire avec des indices..

Par exemple, il s’agit du formulaire traditionnel utilisé pour accéder à un objet à partir d’un tableau ou d’un dictionnaire:

 NSString * instrument = [instruments objectAtIndex: 0]; // Renvoie 'Ocarina' NSString * name = [stats objectForKey: @ "Caractère"]; // retourne 'Zelda'

Avec la nouvelle fonctionnalité de souscription, vous pouvez simplement faire ceci:

 NSString * instrument = instruments [0]; // Renvoie 'Ocarina' NSString * name = stats [@ "Caractère"]; // retourne 'Zelda'

Mieux encore, les indices de collection ne se limitent pas à la sélection d'objets. Si la collection est modifiable, vous pouvez également réaffecter des valeurs:

 instrumentsMutable [0] = @ "Ocarina of Time"; statsMutable [@ "Weapon"] = @ "Hammer";

C'est un énorme pas en avant pour les programmeurs Objective-C, et je pense que cela rendra le langage plus accessible à ceux qui passent d'autres langages comme Java ou C ++..


Expressions en boîte

Le dernier sujet à noter dans ce tutoriel est le concept des "expressions en boîte". Essentiellement, Objective-C prend désormais en charge la conversion du résultat d'une expression de style C en un objet Objective-C. La syntaxe de base pour ceci est la suivante:

 @ (2 * pi * r)

Le résultat de ce qui précède serait un NSNumber objet qui contenait le produit de 2 fois la valeur de pi fois la valeur de r. Bien entendu, nous pourrions immédiatement attribuer ce produit à une variable NSNumber:

 NSNumber * diamètre = @ (2 * pi * r);

Cette technique fonctionnera aussi avec les enums et les chaînes:

 // Expressions encadrées avec enums typedef enum Epée, Marteau, Bouclier, Flèche Armes; NSNumber * currentWeapon = @ (Épée); // Renvoie 0 // Expressions encadrées avec char * NSString * login = @ (getlogin ()); // Retourne le nom de connexion // Results NSLog (@ "Arme:% @ \ nLogin:% @", currentWeapon, login);

Emballer

Ce tutoriel vous a fourni un aperçu rapide des littéraux d'objet, une nouvelle technique introduite avec le compilateur Apple LLVM 4.0. Pour une couverture plus approfondie de ce sujet, reportez-vous à la documentation officielle de LLVM..

J'espère que vous avez apprécié la lecture de ce tutoriel. N'hésitez pas à laisser vos commentaires dans la section commentaires ci-dessous. Vous pouvez également communiquer avec moi sur Twitter ou Google Plus. À votre santé!