Accueil > Programmation Cocoa > C pour Cocoa

C pour Cocoa

Par Seth Roby le 22/07/2003

Traduit par Olivier, le 10/01/2004

Leçon numéro 1 : Rester entre les Lignes

Avez-vous déjà essayé d’apprendre Cocoa ? Vous élaborez votre idée : la prochaine application de la mort qui tue, et vous vous apprêtez à utiliser ce qui, dans l’opinion populaire, est l’une des meilleurs plateformes de développement qui soit. Vous lancez votre navigateur, recherchez un tutoriel sur Google, et vous vous heurtez au premier paragraphe comme sur un mur de brique : chaque tutoriel considère que vous connaissez déjà le langage C. Alors, résigné, vous cherchez un tutoriel sur le C pour vous apercevoir que ceux qui sont les plus compréhensibles vous demanderont trois vies pour les finir. Où se trouve alors la simplicité de développement dont vous avez entendu parler ?

D’après ces tutoriels, pour apprendre Objective-C, vous devez connaitre le C, et pour apprendre le C vous devez passez par une montagne de choses, qui franchement, ne vous aideront pas pour commencer votre experience Cocoa. Mais si c’est le cas, pourquoi les tutoriels exigent cette connaissance de base ?

La réponse est parce qu’il est plus simple d’écrire un tutoriel de cette façon. Il ont été écrits pour vous enseigner Objective-C, qui est (contrairement à C++) un sous ensemble strict de C : tout en C est valide en Objective-C, sans modification.

Ce tutoriel est différent : ici vous apprendrez tout le C que vous aurez besoin de connaitre pour apprendre Cocoa, et on ne parlera pas du reste : ces leçons délaisseront la part de C qui, bien qu’utile, n’est pas nécessaire dans la programmation quotidienne en Cocoa. Dans la mesure du possible, le C que vous apprendrez ici sera en relation avec des exemples qui auront un rapport avec Cocoa. C’est une méthode d’apprentissage qui devrait vous permettre de démarrer très rapidement. Cela ne signifie pas que vous apprendrez tout le C nécessaire pour utiliser Cocoa au complet : à la longue, avec l’expérience, plus de C vous sera utile, et vous pourrez apprendre les aspects les plus avancés au fur et à mesure. Vous apprendrez avec cette série la quantité de C dont vous avez besoin pour commencer et progresser.

Une petite remarque pour ceux qui savent un peu programmer : ce tutoriel est écrit pour amener ceux qui débutent à un niveau suffisant. C’est pourquoi le rythme pourra sembler un peu lent à ceux qui ont déjà une certaine expérience, mais il existe plein d’autres tutoriels sur internet si celui-ci n’est pas assez rapide pour vous.

En premier, nous devons commencer par l’élément le plus simple de la programmation : la ligne de code. Comme une phrase est l’unité élémentaire pour la compréhension du langage, la ligne de code est l’instruction qui contient le sens : fait ceci, effectue cette modification. Si vous connaissez la syntaxe de votre jargon, chaque ligne de code est un impératif : vous êtes toujours en train d’indiquer à l’ordinateur ce qui doit être fait.

En C, une ligne de code ressemble à :

int favoriteNumber = (3 * 4) / 2;

Cette ligne montre un exemple d’initialisation de variable. Décortiquons-le et voyons quel est le but de chaque partie.

La première chose que vous remarquez est que la ligne ressemble un peu aux équations que vous avez pu voir en cours d’algèbre. C’est tout à fait le cas : il s’agit d’une équation, et nous plaçons le résultat de cette équation dans une variable, qui est simplement un conteneur où stocker des informations. Notre variable est appelée favoriteNumber (nombrePrefere), et après l’exécution de cette ligne, favoriteNumber contiendra la valeur (3*4)/2 = 12/2 = 6. On peut interpréter la ligne comme ’souviens-toi que mon nombre préféré est le 6′.

Mais cela n’explique pas tout. Il y a encore des petits bouts en début et fin qui ne veulent rien dire : que signifie ‘int’, et que fait ici le point-virgule ?

Vous avez peut-être déjà deviné la fonction du point-virgule. C’est un peu comme le point en français, il indique à l’ordinateur où une ligne se termine et l’autre commence. Je vais encore insister : en C, un point-virgule est le caractère de fin de ligne de code, pas le retour chariot. J’aurais pu écrire le code ainsi :

 int favoriteNumber = (3 * 4) / 2;

Le retour chariot est complètement ignoré par l’ordinateur. Peu importe combien vous en mettez, et il en va de même pour les espaces et les tabulations. Ces trois éléments (espace, tabulation et retour chariot) sont considérés comme des blancs et C ne les prend pas en compte : la seule chose importante et qu’il y ait des espaces entre les différents mots (int, favoriteNumber, …etc…).

Maintenant, étant donné que le point-virgule est l’équivalent du point, vous pourriez supposer que ‘int’ est une sorte de majuscule, en début de ligne. Mais ce n’est pas aussi simple (et une bonne chose également, parce que vous auriez à taper ‘int’ bien trop souvent !). En fait, ‘int’ est un type, et signifie entier. Il existe de nombreux types en C (il vous est également possible de définir les vôtres, mais nous y viendrons plus tard), mais pour le moment, nous ne parlerons que des entiers. Les entiers sont les nombres que vous pouvez compter sur les doigts, et c’est pour cela qu’ils sont très utilisé en C.

En résumé, nous déclarons une variable, qui est un conteneur d’informations. Elle est de type entier, ce qui signifie “nombre entier”, et la valeur que nous lui assignons est 6. Voilà notre ligne de code.

Mais tout cela n’est pas très utile n’est-ce-pas ? Nous avons vraiment besoin d’effectuer une série d’instructions, une après l’autre, et ensuite indiquer à l’utilisateur ce que nous avons fait. Ceci pourrait être un peu plus utile.

Nous allons donc ajouter quelques instructions. C lira nos instructions séquentiellement, de la même manière dont vous lisez les phrases de ce tutoriel. Comme celles-ci :

 int favoriteNumber = (3 * 4) / 2; favoriteNumber = favoriteNumber + 2;

Maintenant, nous demandons à l’ordinateur d’effectuer deux choses, l’une après l’autre. La première ligne, comme nous le savons, initialise favoriteNumber à 6. La seconde ligne utilise la valeur de favoriteNumber et lui ajoute 2. Remarquez la ressemblance avec la première ligne : elle a un point-virgule à la fin, une variable pour stocker le résultat, et une équation pour calculer le résultat. Mais vous avez remarqué que notre équation utilise favoriteNumber : comment cela marche-t-il ? Une telle équation n’est pas autorisée en algèbre.

Ce qu’il vous faut comprendre, c’est qu’en C, le signe égal est un opérateur, et plus précisément, un opérateur d’assignation. Il ne s’agit pas comme en algèbre d’un signe d’égalité des deux côtés de l’équation. Ce que fait cet opérateur, c’est initialiser ce qui est à sa gauche (dans notre cas, notre variable favoriteNumber) avec la valeur de ce qui est à sa droite (dans notre cas, ‘favoriteNumber+2‘).

Mais avant d’initialiser les valeurs, il évalue ce qui est à droite. C’est-à-dire qu’il utilise la valeur, le contenu de chaque variable, et calcule le résultat des équations comme nous l’avons vu plus haut. Au final, cette ligne initialisee favoriteNumber à sa valeur courante (6) plus 2 : après notre seconde ligne, favoriteNumber contient 8.

L’autre chose que vous avez peut-être remarquée est que nous n’avons plus de 'int' en début de ligne. C’est parce que cette ligne ne fait pas de déclaration de variable, comme la première : cette ligne est une assignation de variable. La différence est simplement que nous utilisons une variable qui a déjà été déclarée, et C connait déjà son type, et donc nous n’avons pas besoin de le préciser de nouveau (remarquez cependant que toutes les variables doivent être déclarer avant d’être utilisées).

Maintenant que nous avons écrit deux lignes de code, nous avons effectué deux choses. Ces deux choses sont très liées, donc nous pourrions les regrouper pour rendre l’ensemble plus lisible.

Vous vous rappelez que C ignore les retours chariot. Il est donc courant de simplement ajouter une ligne blanche pour délimiter la fin d’une idée et le début d’une autre, de la même façon dont nous utilisons ‘retour chariot, tabulation’ pour créer un nouveau paragraphe quand nous écrivons un email. En ajoutant notre ligne de code après cette séparation, nous obtenons ce qui suit :

int favoriteNumber = (3 * 4) / 2;
favoriteNumber = favoriteNumber + 2;
printf("My favorite number is %d!", favoriteNumber);

Cette nouvelle ligne semble complètement différente des deux autres lignes. Ce n’est ni une déclaration, ni une assignation, mais elle utilise notre variable. De quoi s’agit-il ?

Cette ligne contient un appel de fonction. Notre ligne de code demande à un autre bout de code, écrit ailleurs (dans ce cas, dans la librairie standard de C, dont nous parlerons dans une prochaine leçon) d’effectuer quelque chose, et lui fournit des informations appelées arguments.

Il y a quelques petites choses à remarquer à propos de cette syntaxe. La fonction est appelée par un nom, qui dans notre cas est “printf“. Cette fonction affiche du texte. Après le nom de la fonction, nous avons des parenthèses renfermant d’autres informations. Les parenthèses nous renseignent sur le commencement et la fin des arguments : l’information qui se trouve à l’intérieur représente nos arguments que nous passons à la fonction.

Mais que sont ces arguments, et que voulons nous dire ? Notre premier argument est un nouveau type : il s’appelle string / chaîne de caractères (il s’agit plus particulièrement d’une chaîne C, en référence au langage. Il existe d’autres types de chaînes). On l’appelle comme cela, parce qu’il s’agit d’un ensemble de lettres placées dans un certain ordre, comme si elle étaient reliées les unes aux autres par une chaîne. Remarquez qu’une chaîne de caractères commence et se termine par des double-quotes (Pour le moment, cela signifie que nous ne pouvons pas utiliser de double-quotes dans nos chaînes de caractères, parce que l’ordinateur ne saurait pas où elles se terminent. Nous verrons comment y remédier plus tard). Le second argument est la variable avec nous avons travaillé depuis le début.

Les arguments sont différents pour chaque fonction, parce que chaque fonction a besoin d’informations différentes. Printf a besoin de savoir quoi afficher, mais elle n’a pas besoin de connaitre quoi que soit à propos de votre réseau.

C’est exactement ce que nous avons fait : nous lui avons demandé d’afficher : “My favorite number is 8!” (”Mon numéro préféré est 8 !”). Mais ce n’est pas exactement comme cela que nous l’avons écrit n’est-ce-pas ? Qu’est-ce-que cet étrange ‘%d‘ ? Il s’agit d’un exemple de ce que le “f” de “printf” signifie : format. Le premier argument que nous avons passé à printf est appelé la chaîne de formatage, et elle indique à printf le format selon lequel nous voulons nos informations soit imprimées, mais elle ne prend pas en compte une importante information comme notre variable favoriteNumber. Printf est en fait une fonction étrange, dans le sens qu’elle peut accepter un nombre indéterminé d’arguments : normalement, une fonction accepte un nombre précis d’arguments. Mais printf est un peu différente.

Pour chaque %d dans la chaîne de formatage, printf lira un argument comme un entier et insérera sa valeur dans la chaîne de caractères. Si l’argument n’est pas un entier, il y aura une erreur. C’est pourquoi %d est appelé une spécification de conversion parce qu’elle spécifie le type que vous souhaitez convertir pour l’affichage. Si vous voulez imprimer des variables d’un autre type, vous devez utiliser une autre spécification de conversion.

Vu que notre chaîne de formatage contient une seule spécification de conversion pour un seul int, nous donnons à printf un argument après la chaîne de formatage : notre variable, qui est de type int.

Maintenant, nous avons trois lignes code, qui effectuent trois choses différentes. Puisque nous venons de les écrire, il est simple de savoir ce qu’elles sont censées faire. Mais si elles faisaient partie d’un grand programme, nous ne pourrions pas nous en rappeler si nous tombions dessus un mois après les avoir écrites. Nous allons donc ajouter quelques commentaires à notre code, pour documenter ce que nous avons fait. L’exemple suivant illustre deux façons de le faire :

//Computes our favorite number
int favoriteNumber = (3 * 4) / 2; //is anyone's favorite number not an int?
favoriteNumber = favoriteNumber + 2;
/* now let's tell the world what our favorite number is! */
printf("My favorite number is %d!", favoriteNumber);

Il y a trois nouveautés dans notre code : la première est une nouvelle ligne au début qui commence par deux slashs. Ceci est une nouvelle façon de commenter qui n’a été ajoutée au C que dans la mise à jour de 1999. C’est un commentaire sur une seule ligne, qui commence à partir des slash et continue jusqu’au premier retour chariot.

La seconde nouveauté est à la deuxième ligne, où nous voyons également des slashs. Il s’agit du même style que précédemment, mais il illustre le fait que le commentaire commence à partir des slashs, et n’inclut pas le code qui les précède.

Le dernier débute par /* à la cinquième ligne et se termine par */ à la sixième ligne. Il s’agit du commentaire multi-ligne du C traditionnel, qui commence par /* et se termine par */, quelque soit ce qui se trouve entre les deux.

Quelque soit le style que vous utilisez, l’important est de savoir que ces commentaires sont ignorés par l’ordinateur. Tout ce qui se trouve commenté n’est intéressant que pour le regard de l’homme : ils indiqueront aux programmeurs le but du code. Les commentaires sont extrêmement importants, et trop souvent négligés. Lorsque vous codez, commentez le intelligemment : vous vous remercierez plus tard.

Ceci conclut notre première leçon, et nous avons mis en place une bonne base. Nous avons vu comment écrire une ligne de code en langage C, comment définir et initialiser des variables et comment appeler notre première fonction. Nous avons également appris comment commenter notre code, ce qui nous permettra de le relire facilement ultérieurement. Nous n’avons rien fait de plus avec notre code, parce que ce sujet est une leçon soi que nous découvrirons la prochaine fois. Si nous avons un peu de place, nous verrons également comment créer nos propres fonctions.

Textes originaux en anglais sur O’Reilly : C is for Cocoa par Seth Roby

opoppon Programmation Cocoa , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire