Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduction 0-1 - Remerciements 1 - Les bases 1-1 - Premiers pas 1-1-A - Utiliser Ruby comme une calculatrice 1-1-B - Les nombres et Ruby 1-1-B-1 - Entiers 1-1-B-2 - Dcimaux 1-1-C - Autres oprateurs arithmtiques 1-1-D - Nombres normes, et nombres minuscules 1-1-E - Quelques exercices 1-2 - Chanes de caractres 1-2-A - Oprateurs 1-2-B - Mthodes 1-2-C - Quelques exercices 1-3 - De nouveaux noms pour de vieilles choses 1-3-A - Classes et objets 1-3-B - La notation Classe#mthode 1-3-C - Convertir une classe 1-3-D - Convertir une classe 1-4 - Variables 1-4-A - Travailler avec des variables 1-4-B - Raccourcis 1-4-C - Constantes 1-4-D - Quelques exercices 1-5 - Votre premier programme 1-5-A - Bonjour monde 1-5-B - Un autre exemple 1-5-C - Crer des programmes excutables 1-5-D - Quelques exercices 1-6 - Ecrire de bons programmes 1-6-A - Noms de variables 1-6-A-1 - Noms significatifs 1-6-A-2 - Noms composs 1-6-B - Travailler avec IRB 1-6-C - Utiliser des constantes 2 - Contrle de l'excution 2-1 - Boucles 2-1-A - Compter 2-1-B - Somme de nombres 2-1-C - taler une expression sur plusieurs lignes 2-1-D - Plus d'exemples 2-1-D-1 - Compter l'envers 2-1-D-2 - Travailler sur une variable un certain nombre de fois 2-1-D-3 - Quelques exercices 2-2 - Saisir des donnes provenant de l'utilisateur 2-2-A - Ce fichu \n! 2-2-B - Retour notre programme 2-2-C - Quelques exercices 2-3 - Conditions 2-3-A - Vrai ou faux 2-3-B - Oprateurs conditionnels 2-3-C - Comparaison de chanes de caractres 2-3-D - L'instruction elsif
-2Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
2-3-E - Un exemple: prix.rb 2-3-F - Quelques exercices 2-4 - Les boucles while 2-4-A - Compteur 2-4-B - Puissance de 2 2-4-C - Quelques exercices 2-5 - Ecrire de bons programmes 2-5-A - Commentaires 2-5-A-1 - Comment utiliser des commentaires 2-5-B - Indentation 3 - Structures de donnes 3-1 - Tableaux : introduction 3-2 - Que peuvent faire les tableaux? 3-2-A - Array#sort 3-2-B - Array#reverse 3-2-C - Array#length 3-2-D - Oprations arithmtiques sur des tableaux 3-2-E - Afficher le contenu d'un tableau 3-2-F - Quelques exercices 3-3 - Itrateurs 3-3-A - Quelques exercices 3-4 - Hachages 3-4-A - Quelques dfinitions : clef et valeur 3-4-B - Hachages et itrateurs 3-4-B-1 - Hash#each 3-4-B-2 - Hash#each_key 3-4-B-3 - Hash#each_value 3-5 - Exemple pratique : un carnet d'adresses 3-5-A - Premire tape : analyse 3-5-B - Deuxime tape : adresses 3-5-C - Troisime tape : personnes 3-5-D - Quatrime tape : carnet d'adresses 3-5-E - Quelques exercices 3-6 - Afficher le contenu du carnet 3-6-A - Afficher des structures de donnes complexes 3-6-B - Noms complets 3-6-C - Numros de tlphone 3-6-D - Adresses 3-7 - Trier les lments du carnet 3-7-A - Retour sur Array#sort 3-7-B - Retourner des valeurs 3-7-C - L'oprateur <=> 3-7-D - Trier sur le nom de famille 3-7-E - Trier le carnet d'adresses 3-7-F - Quelques exercices 3-8 - Ecrire de bons programmes 3-8-A - Tableau ou hachage? 3-8-B - Noms de variables 3-8-B-1 - Tableaux 3-8-B-2 - Hachages 3-8-C - Commentaires 3-8-D - Sous-structures 3-8-D-1 - Bien 3-8-D-2 - Peut mieux faire
-3Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
3-8-D-3 - Pas bien 4 - Classes et mthodes 4-1 - Fonctions 4-1-A - Qu'est-ce qu'une fonction ? 4-1-B - "Bonjour monde" avec une fonction 4-1-C - Paramtres de fonction 4-1-D - Afficher une adresse 4-2 - Classes et mthodes 4-2-A - Lire les donnes d'un objet 4-2-B - Modifier les donnes d'un objet 4-2-C - Accder des donnes 4-3 - Plus de classes 4-3-A - Une classe Personne 4-3-B - Afficher le contenu d'une classe 4-3-C - Quelques exercices 4-4 - Implmentation du carnet d'adresses 4-4-A - Premire tape 4-4-B - Tri automatique 4-4-B-1 - Comment trier un tableau? 4-4-B-2 - Simplification 4-4-B-3 - Finalement 4-5 - Ecrire des itrateurs 4-5-A - Excuter un bloc de code 4-5-B - Passage de paramtres 4-5-C - Implmentation de Carnet#chaque_personne 4-5-D - Implmentation de Carnet#chaque_adresse 4-5-E - Code complet de la classe Carnet 4-6 - Autres fonctionnalits 4-6-A - Mthodes publiques et prives 4-6-B - R-utilisation du code avec require 4-7 - Ecrire de bons programmes 4-7-A - Fonctions et mthodes 4-7-B - Commentaires A - Obtenir de l'aide A-1 - Support technique A-2 - Documentation A-2-A - Autres tutoriels A-2-B - Livres B - Installer Ruby sur votre machine B-1 - GNU/Linux B-1-A - Installation par RPM (Redhat, Mandrake...) B-1-B - Gentoo B-1-C - Debian B-2 - Mac OS X B-3 - FreeBSD B-4 - Microsoft Windows
-4Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Introduction
Ce tutoriel va vous permettre de vous familiariser avec le language Ruby. Il est avant tout destin aux dbutants. Ces derniers pourront, sans possder aucune connaissance au pralable, se servir de ce tutoriel comme tremplin pour leur long apprentissage du meilleur langage de programmation du monde! Ce tutoriel est protg par la License de documentation libre GNU. Ce qui signifie entre autre qu'il vous est permis de le redistribuer gratuitement, ainsi que de le modifier votre guise (tout en respectant les conditions de la license). N'hsitez pas contacter notre liste de diffusion si vous avez des questions supplmentaires, des suggestions, des critiques... propos de ce document. Dposez simplement un e-mail l'adresse ruby-tut-developer@nongnu.org.
0-1 - Remerciements
Le traducteur tient remercier les personnes suivantes, sans lesquelles l'laboration de ce document n'aurait t possible : Eric Landuyt Laurent Mouillart Philippe Lesage Stfanie Dijoux
-5Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
1 - Les bases
propos de ce chapitre Ce chapitre se focalise sur les bases fondamentales ncessaires afin que vous puissiez crire votre premier programme en Ruby. Il est donc indispensable pour toute personne qui veut programmer en Ruby de lire ce chapitre.
Ruby est capable d'valuer toutes les oprations arithmtiques de base : Symbole + * / Pour quitter le programme IRB, il suffit d'entrer exit : addition soustraction multiplication division Effet
Nous allons maintenant jouer un peu plus avec les oprations arithmtiques de base. Essayez ceci :
Que s'est-il pass ? Rien d'anormal, je vous rassure! Ruby nous montre simplement qu'il travaille avec deux classes diffrentes de nombres : Entiers Dcimaux (appels aussi flottants )
-6Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
1-1-B-1 - Entiers
Un entier est un nombre comme 1, 2, -5, etc... Lorsque nous travaillerons avec des entiers, Ruby nous donnera toujours une rponse mathmatiquement exprime sous forme entire. 3 / 2 devrait nous donner 1.5, mais comme cette valeur n'est pas entire et que les deux nombres utiliss dans l'opration sont entiers, Ruby renverra donc la place une rponse formule sous forme entire, c'est dire 1.
1-1-B-2 - Dcimaux
Un nombre dcimal est souvent appel flottant, par analogie avec sa partie dcimale. 3.14, 1.5 et 3.0 sont des flottants. Ruby renverra toujours une valeur flottante comme rsultat pour des oprations arithmtiques agissant sur des flottants. Par exemple :
Notez bien le comportement de l'oprateur % avec les nombres dcimaux. Dans cet exemple, 2 rentre deux fois dans 5.1, et il reste 1.1 de trop.
Comment faire si vous dsirez travailler avec des nombres normes comme 17_000_000_000_000_000_000, ou des nombres minuscules comme 0.000_000_000_000_321? En temps normal, la mthode la plus simple (et la plus paresseuse) consiste utiliser une notation scientifique en crivant 1.7 x 1019, et 3.21 x 10-13. Et comme vous vous en seriez dout, Ruby permet videmment d'utiliser cette notation :
-7Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
iv v
Que vaut l'expression 3.24 * ((34/2) - 54)/33.4 * 3.4 ? (notez qu'il est possible d'utiliser des parenthses) Quel sera le rsultat d'une opration qui combine la fois des flottants et des entiers? Par exemple, calculez ceci : 3.0 / 2 ; 3 / 2.0 ; 4 ** 2.0 ; 4.1 % 2
1-2-A - Oprateurs
Voici quelques trucs amusants que Ruby vous permet de faire avec des chanes de caractres :
Voici un moyen de s'en souvenir : "salut " * 3 fait la mme chose que "salut " + "salut " + "salut " , ce qui nous donnera donc "salut salut salut " . Remarquez ce qu'il se passe lorsque nous retirons l'espace blanc de "salut " :
Ruby considre "1" comme tant une chane de caractres, pas un nombre.
1-2-B - Mthodes
Voici quelques mthodes utiles qui travaillent avec des chanes de caractres :
Ruby identifie par des noms spciaux certaines choses que nous connaissons dj. Par exemple, il utilise le mot Float (flottant) pour reprsenter un nombre dcimal. Voici quelques autres dfinitions : Object (objet) : Ce n'est rien d'autre qu'un bout de donnes. Par exemple, le nombre 3 ou la chane de caractres "Salut!" sont des objets. Class (classe) : Ruby spare toujours les types de donnes en classes. Par exemple, les entiers, les flottants et les chanes de caractres sont reprsents par des classes diffrentes. Method (mthode) : Les mthodes sont des bouts de code qui peuvent travailler sur des objets. Par exemple, l'oprateur + (qui permet d'additionner deux objets, souvent des entiers ou des chanes) est bel et bien une mthode.
Voici la liste des classes Ruby associes aux types de donnes que vous venez de dcouvrir : Type de donne Classe associe nombre entier Integer nombre dcimal Float texte String Souvenez-vous, vous avez galement utilis plusieurs mthodes associes ces classes : Classe Integer Float String Quelques mthodes +, -, /, *, %, ** +, -, /, *, %, ** capitalize, reverse, length, upcase, +, *
-9Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Pour cette raison, nous utiliserons la notation Classe#mthode pour identifier exactement de quelle mthode nous parlerons. Par exemple, nous dirons Integer#+ afin de diffrencier cette mthode de Float#+ et de String#+. Nous pouvons galement affirmer que String#upcase existe, mais que Integer#upcase n'existe pas.
Avez-vous obtenu les rsultats que vous espriez? Comment expliqueriez-vous la diffrence entre 12, '12' et 12.0 un enfant?
- 10 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
1-4 - Variables
Ruby vous permet d'utiliser des variables pour associer des noms des objets particuliers. Exemple
ville = "Toronto"
Ici, Ruby associe la chane de caractres "Toronto" la variable ville. Si vous avez des difficults, imaginez-vous Ruby fabriquant deux tableaux. Un contenant les objets, et un autre contenant les noms qui leurs sont associs. Ensuite, imaginez-vous Ruby dessinant une flche de ville "Toronto". Lorsque Ruby rencontrera la variable ville, il suivra logiquement la flche et arrivera sur la chane de caractres "Toronto". Les noms de variables doivent toujours commencer par une minuscule!
L'avantage des variables, c'est que vous pouvez garder quelque part une trace de vos donnes facilement. Imaginez par exemple que l'on vous donne les instructions suivantes : 1 2 3 4 Additionnez ensemble 2, 4, 6 et 8 Prenez le rsultat, et divisez-le par 5 Calculez le produit simultan de 2, 3 et 4 Prenez le rsultat obtenu la ligne 2, et soustrayez-y ce que vous venez d'obtenir la ligne 3
Bien entendu, vous pouvez crire une longue expression pour calculer ceci. Mais il est videmment plus facile d'crire :
1-4-B - Raccourcis
Dans l'exemple ci-dessus, nous avons vu les expressions :
x = x / 5 y = y - x
On rencontre assez souvent ce genre d'expressions, donc Ruby (qui pense nous) nous permet d'utiliser les raccourcis suivants : Exemple x=x+2 x=x-3 Raccourci x += 2 x -= 3 Effet Additionner 2 x
- 11 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Soustraire 3 de x x=x*6 x *= 6 Multiplier x par 6 x=x/2 x /= 2 Diviser x par 2 x = x**3 x **= 3 Exposer x au cube x=x%4 x %= 4 Calculer le reste de la division de x par 4, et y enregistrer le rsultat Donc, notre exemple du dessus aurait pu tre crit de cette faon :
1-4-C - Constantes
Les constantes ressemblent des variables, la diffrence prs que vous informez Ruby que sa valeur est suppose ne pas changer. Si vous essayez de modifier la valeur d'une constante, Ruby vous enverra un avertissement. Vous pouvez dfinir des constantes de la mme faon que des variables, sauf que leur nom doit commencer par une majuscule.
Mme si Ville est une constante, sa valeur change quand mme. Dfinir une constante signifie seulement que Ruby vous avertira si vous modifiez sa valeur. Regardez :
- 12 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
puts est une mthode qui affiche une chane de caractres sur le terminal. Voici un nouvel exemple :
Regardez bien ce que nous avons fait. nom est une chane de caractres. Donc, nous pouvons la concatner d'autres chanes de caractres, comme nous avons vu prcdemment. Dans un programme Ruby, seules les lignes passes puts seront affiches l'cran.
Nous allons crer un nouveau programme Ruby partir de ce code. Copiez simplement les lignes dans un nouveau fichier, et rajoutez-y la fin la ligne suivante :
puts y
a fonctionne! Cependant, nous aimerions modifier un peu le message de sortie. L'idal serait que le programme affiche La rponse est 20 l'cran. On peut toujours essayer ceci :
puts "La rponse est " + y # provoquera une erreur
a ne marchera videmment pas. Pourquoi? Souvenez-vous, seules des chanes peuvent-tre concatnes d'autres chanes. Nous devons donc convertir notre entier y en chane de caractres. Nous savons qu'il faut utiliser la mthode Integer#to_s.
- 13 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Premirement, nous devons savoir ou se cache Ruby sur votre machine. Pour ce faire, entrez la commande which ruby dans un terminal :
Recopiez le chemin sur la toute premire ligne de votre programme. N'oubliez pas de prfixer la ligne par #!.
Il ne reste plus qu' spcifier l'attribut du programme, ce que fera la commande chmod +x prog.rb (+x signifie excutable) :
- 14 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
ageEtudiant age_etudiant
Nous prfrons la dernire possibilit. Mais c'est vous de choisir. N'crivez pas ageetudiant. Vous n'auriez probablement pas apprci si nous avions crit ce tutoriel sans espacer les mots.
Essayez galement d'viter d'crire directement des valeurs numriques. Utilisez des constantes pour rendre votre code plus lisible. Par exemple, la formule pour calculer l'aire d'un cercle est la suivante : aire = pi . r r = rayon
Votre code doit se rapprocher au maximum de la formule. Voici ce qu'il faut faire, et ce qu'il ne faut pas faire : Bien Pas bien PI = aire = 3.14159265 aire 3.14159265 * = PI * (rayon ** (rayon ** 2) 2)
- 15 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
2 - Contrle de l'excution
propos de ce chapitre Ce chapitre aborde les concepts fondamentaux requis pour effectuer n'importe quelle tache avec Ruby. Vous devrez probablement traiter des donnes provenant de l'utilisateur, ou excuter une tache plusieurs fois. Tout ceci sera introduit dans ce chapitre.
2-1 - Boucles
Dans cette section, nous allons vous initier un des aspects les plus puissants de la programmation : les boucles. Dmarrez votre diteur favori, et entrez-y les lignes suivantes :
Pouvez-vous deviner ce que fera ce bout de code? Sauvegardez le fichier sous le nom boucles.rb et excutez-le :
Comme vous avez pu le constater, le contenu de la boucle a t excut 4 fois. Il s'agit probablement du moyen le plus direct que Ruby nous offre pour reproduire des taches.
2-1-A - Compter
Nous allons ici nous servir de ce que nous venons d'apprendre sur Ruby et les variables pour afficher les nombres compris entre 1 et 5 :
Souvenez vous, la mthode Integer#to_s se charge de convertir la valeur numrique reprsente par l'objet en une chane de caractres. Nous avons besoin de cette mthode pour pouvoir concatner le rsultat la chane "count = ". Lors de l'excution, vous devriez avoir ceci :
- 16 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Vous pouvez couper l'expression en plusieurs lignes, en terminant chaque ligne par le caractre backslash ('\'). Le caractre backslash doit absolument tre le dernier caractre de la ligne. Si vous rajoutez un espace aprs, vous obtiendrez une erreur. Essayez ceci dans IRB :
La ligne "=>nil" signifie simplement que la mthode puts ne renvoie rien. En fait, ce n'est pas tout fait vrai. puts renvoie quand mme une valeur qui reprsente un tat non initialis. Ruby reprsente cet tat particulier par l'expression nil. Si nous avions crit ceci :
etat = puts "Salut"
La variable etat aurait contenu nil. Nous venons donc de voir comment taler notre commande puts sur deux lignes. Mettons donc en pratique (dans notre programme) ce que nous venons d'apprendre :
En effet, nous pouvons utiliser cette technique pour afficher autant de lignes que nous dsirons :
Vous n'tes videmment pas oblig de prsenter la sorte du programme de cette faon. Cependant, nous pensons que l'utilisateur comprendra mieux le fonctionnement du programme. Voici ce que vous pouvez obtenir lors de son excution :
Et voici le rsultat fort attendu (notez que nous ne sommes pas responsables de l'explosion de votre ordinateur) :
- 17 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Voici un exemple pratiquement valable. Il s'agit de calculer la factorielled'un nombre. La factorielle d'un nombre est le produit de tous les nombres compris entre 1 et ce nombre. Vous me suivez? Par exemple, voici l'expression pour calculer la factorielle du nombre 6 :
6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
Les mathmaticiens utilisent le symbole n! pour reprsenter la factorielle du nombre n Tapez ceci dans un nouveau programme Ruby, et dmarrez-le :
Que s'est-il pass? Pourquoi ce fichu programme va-t'il la ligne? La rponse est vidente : tout simplement parce que vous avez entrune nouvelle ligne au clavier. Oui, souvenez-vous, quand vous avez appuy sur la touche Enter... Nous allons regarder ceci de plus prs dans IRB. Dmarrez IRB et tapez l'expression nom = gets. L'ordinateur va attendre une saisie, entrez une chane quelconque. Regardez attentivement ce qu'il va se passer :
- 18 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Ce \n reprsente un retour la ligne. Il s'agit du caractre envoy par le clavier lorsque l'utilisateur appuie sur la touche Enter. Avez-vous remarqu comment nous venons d'utiliser IRB pour comprendre ce qu'il s'tait pass? Il arrivera tt ou tard que votre code se comporte d'une faon anormale. A ce moment l, essayez-le dans IRB, vous comprendrez plus facilement la source de vos ennuis!
Magnifique! La mthode String#chomp nous renvoie la chane de caractres sans le retour la ligne. Nous pouvons donc maintenant crire :
Notez bien que la variable nom contient toujours le saut la ligne. La bonne variable (sans le \n) est nouveau_nom. Mais pourquoi utiliser une autre variable? Pourquoi ne pas simplement crire ceci :
>>nom = nom.chomp
Une dernire petite rflexion : 1 2 chomp est une mthode de la classe String (souvenez-vous de la notation : String#chomp) gets nous renvoie une chane de caractres (prcisment, un objet de la classe String!)
Pourquoi ne pas crire gets.chomp? De cette faon, String#chomp sera appel sur ce que gets retournera. En d'autres termes, nous pouvons crire :
- 19 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Pour calculer l'anne de naissance de l'utilisateur, effectuez une simple soustraction entre l'anne courante et son ge. crivez un programme qui demandera l'utilisateur un nombre ainsi qu'une chane de caractres. Ensuite, le programme doit afficher autant de fois la chane inverse. Exemple :
Il existe plusieurs solutions possibles cet exercice. Choisissez celle que vous prfrez. Devinez ce que produira Ruby avec cette ligne :
nombre = gets.chomp.to_i
Essayez-la dans IRB. crivez un programme qui calculera et affichera la factorielle d'un nombre entr au clavier par l'utilisateur. Il devra fonctionner comme ceci :
Vous pouvez rutiliser le code que nous avons crit au chapitre prcdent.
2-3 - Conditions
Dans Ruby, il est possible d'effectuer plusieurs actions en fonction d'une srie de conditions, en utilisant le mot magique if. Voici un exemple :
#1 if ville == "Toronto" age_legal_alcool = 19 #2 else age_legal_alcool = 21 end
Ce qui veut dire : #1 Si (if) le contenu de la variable ville est gale (==) la chane "Toronto", alors nous affectons la variable age_legal_alcool le nombre 19. #2 Sinon (else), nous affectons la variable age_legal_alcool le nombre 21.
- 20 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Le meilleur moyen d'illustrer cette thorie est d'exprimenter quelques exemples. Comme toujours, dmarrez IRB et entrez les commandes suivantes :
L'instruction if value si une expression quelconque (par exemple, ville == "Toronto") est soit vraie (true), soit fausse (false) et ensuite agit en consquence. Notez bien la diffrence entre les oprateurs = et == :
= est un oprateur d'affectation (il permet d'assigner une valeur une variable) == est un oprateur de comparaison (il permet de comparer l'tat de deux expressions)
- 21 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
de combiner des caractres ASCII (cods sur un octet) et des symboles spciaux (cods sur deux octets). Maintenant, dmarrez IRB et entrez ceci :
Avez-vous remarqu comment IRB peut clarifier les choses? Vous devriez vous habituer essayer d'abord certaines ides dans IRB. C'est un outil gnial, utilisez-le !
Essayons de comprendre ceci : #1 Si la variable age contient une valeur plus grande ou gale 60, nous donnons un prix senior. #2 Si ce n'est pas vrai, mais que age est plus grand ou gal 14, nous donnons un prix adulte. #3 Si ce n'est pas vrai, mais que age est plus grand que 2, nous donnons un prix enfant. #4 Sinon, c'est gratuit!
Ruby excutera cette squence de conditions une par une. Uniquement la premire condition vraie sera excute. Vous pouvez rajouter autant de elsif que vous dsirez.
Soyez bien conscient de l'ordre dans lequel vous rajoutez vos conditions avec elsif. Seulement le code associ la premire condition value comme tant vraie sera excut. Cet exemple illustre bien ce danger :
age = 21
- 22 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
if age >5 puts "Plus elsif age >10 puts "Plus elsif age >20 puts "Plus elsif age >30 puts "Plus end
vieux que 5 ans" vieux que 10 ans" vieux que 20 ans" vieux que 30 ans"
En lisant ce code rapidement, il semblerait logique que le programme affiche "Plus vieux que 20 ans" l'cran. Il n'en est rien! Comme dit plus haut, seule la premire condition valide remporte la mise. Le programme affichera "Plus vieux que 5 ans". Voici la bonne mthode utiliser :
age = 21 if age >30 puts "Plus elsif age >20 puts "Plus elsif age >10 puts "Plus elsif age >5 puts "Plus end
vieux que 30 ans" vieux que 20 ans" vieux que 10 ans" vieux que 5 ans"
- 23 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
end
Ou conditionn'est rien d'autre qu'une expression conditionnelle, comme celles que nous venons d'apprhender prcdemment.
2-4-A - Compteur
Voici un exemple tout simple, illustrant l'utilisation d'une boucle while :
Analysons le programme : 1 2 3 4 5 Initialisation de compteur 0. Comme compteur est bien infrieur 10, nous rentrons dans la boucle. Dans la boucle, nous affichons un message, et nous incrmentons compteur de 1. Maintenant, compteur vaut 1. Comme compteur est toujours infrieur 10, nous sautons nouveau dans la boucle. ...
Le scnario se rptera jusqu' ce que compteur soit gal 10. Voici la sortie du programme :
En d'autres mots, une boucle while rptera la boucle tant que la condition sera value comme tant vraie.
2-4-B - Puissance de 2
Certaines choses sont faciles raliser avec une boucle while, mais moins videntes avec n.times. Supposez que nous voulons calculer la plus grande puissance de 2 plus petite que 10000. C'est trs facile programmer avec une boucle while :
Si vous avez utilis la mthode String#to_i, il y a des chances pour que 1e10 soit converti par le nombre 1. Essayons de comprendre pourquoi dans IRB :
- 24 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Comme vous pouvez le remarquer, 1e10 est en Float (nombre flottant). Donc, vous devez utiliser la mthode String#to_s.
Les commentaires sont un peu comme des notes personnelles. Simplement pour vous aider vous souvenir de ce que vous avez crit.
2-5-B - Indentation
L'indentation se rsume une mise en page ralise l'aide de tabulations ou d'espaces, afin de rendre un code source plus lisible. Indentez toujoursvotre code. Il s'agit d'un des principes les plus fondamentaux, que vous devez assimiler si vous dsirez produire de bons programmes. Bien
# Additionne des nombres impairs nombre, somme = 1, 0 while nombre < 100 # % donne le reste if nombre % 2 == 1 somme += nombre end puts somme end
Pas bien
# Additionne des nombres impairs
- 25 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
nombre, somme = 1, 0 while nombre < 100 # % donne le reste if nombre % 2 == 1 somme += nombre end puts somme end
Il existe plusieurs standards en matire d'indentation. En gnral, les programmeurs utilisent soit une tabulation, soit 2, 4 ou 8 espaces. Choisissez le style qui vous convient le mieux!
- 26 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
3 - Structures de donnes
La plus grande force de Ruby rside dans ses structures de donnes. Ce chapitre vous enseignera ces concepts pour crire des programmes bien plus intressants. Vous allez apprendre comment exprimer facilement des informations complexes, comme un carnet d'adresses complet. Ce chapitre est indispensable si vous dsirez crer des programmes plus ou moins complexes.
La mthode class nous indique que la variable nombres est un Array (plus prcisment, un objet provenant de la classe Array). Vous pouvez accder aux lments du tableau de cette faon :
Vous pouvez rajouter des lments dans le tableau tout simplement en tapant :
Remarquez que les lments d'un tableau sont enregistrs squentiellement. Un tableau peut contenir autant d'objets que vous le dsirez. Les objets contenus dans le tableau peuvent tre manipuls comme nous venons de voir :
Un tableau commence compter 0, pas 1! Ainsi, nombres[1] nous donnera le deuxime lment du vecteur, et non pas le premier. Quels types de choses pouvons-nous insrer dans un tableau? N'importe quel objet, en fait. Par exemple, des entiers et des chanes de caractres :
3-2-A - Array#sort
Vous pouvez trier les lments d'un tableau en utilisant la mthode Array#sort :
3-2-B - Array#reverse
- 27 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
3-2-C - Array#length
La mthode Array#length vous donne le nombre d'lments d'un tableau :
Il n'existe videmment pas de mthode Array#/, vu qu'il est impossible de diviser un tableau. Souvenez-vous des raccourcis +=, -= et *=. Ils fonctionnent galement avec des tableaux.
Notez galement qu'il est possible de convertir un tableau en une chane de caractres, en invoquant la mthode Array#to_s :
Et ceci?
>>adresses = [ [ 20, "Rue de la Renaissance" ], [ 20, "Place de la Rpublique Franaise"] ] >>adresses.sort
- 28 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
3-3 - Itrateurs
Cette section illustre une des fonctionnalits les plus intressantes de Ruby : les itrateurs. Un itrateur est une mthode un peu particulire. Il s'agit d'une mthode vous permettant d'accder unpar un des lments. Les tableaux font partie des objets capables de supporter des itrateurs. Voici un exemple tout simple, utilisant la mthode Array#each :
amis = [ "Benjamin", "David", "Stfanie", "Laura" ] amis.each do |ami| puts "J'ai un ami qui s'appelle " + ami end
Le lecteur attentif aura peut-tre remarqu que cette mthode d'itration ressemble fort la toute premire boucle illustre dans ce tutoriel (celle avec la forme n.times do ... end). Il s'agit effectivement d'un itrateur! Cette mthode vous permet d'itrer sur la squence d'entiers compris entre 0 et n-1. Regardez :
4.times do |nombre| puts nombre end
Vous remarquerez que l'itrateur times commence compter 0. Un peu comme les indices des tableaux (0 reprsentant le premier lment). Donc, le code suivant :
amis = [ "Benjamin", "David", "Stfanie", "Laura" ] amis.each do |ami| puts "J'ai un ami qui s'appelle " + ami end
- 29 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Maintenant, voici quelque chose d'amusant. Vous souvenez-vous de la mthode Array#length? Nous pouvons amliorer notre code en l'utilisant :
amis.length.times do |i| # 'i' pour indice puts "J'ai un ami qui s'appelle " + amis[i] end
Essayons maintenant d'afficher uniquement les lments du tableau dont l'indice est pair. Le moyen le plus facile de dterminer si un entier est pair est de vrifier si le reste de sa division avec 2 est bien gal 0. Souvenez-vous, l'oprateur Integer#% donne le reste d'une division. Voici le code :
amis.length.times do |i| # 'i' pour indice # Nous n'affichons que les indices pairs if i % 2 == 0 puts "J'ai un ami qui s'appelle " + amis[i] end end
Ce qui produira :
J'ai un ami qui s'appelle Benjamin J'ai un ami qui s'appelle Stfanie
Comment faire pour afficher les amis dans l'ordre alphabtique? Rien de plus simple, il suffit d'utiliser la mthode Array#sort :
amis.sort.each do |ami| puts "J'ai un ami qui s'appelle " + ami end
Ce qui produira :
J'ai J'ai J'ai J'ai un un un un ami ami ami ami qui qui qui qui s'appelle s'appelle s'appelle s'appelle Benjamin David Laura Stfanie
crivez l'cran la liste de ces noms, avec une majuscule comme premire lettre. La mthode utiliser est String#capitalize.
3-4 - Hachages
Nous allons tudier dans cette section la classe Hash.
- 30 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Les hachages ne sont rien d'autre que des tableaux spcialiss. Au lieu de n'accepter que des indices reprsents par des nombres entiers (comme dans mon_tableau[3]), les hachages acceptent n'importe quel objet comme index. Par exemple, vous pouvez crire mon_hachage["une_chaine_de_caractres"]. Supposons que nous voulons enregistrer des informations concernant un ami. Nous pourrions utiliser un tableau, comme ceci :
ami = [ "Jean-Paul", "Goret", "Rue de l'glise, 26", "Houtsiplou", "Lige" ]
videmment, ceci fonctionnera. Mais nous allons devoir nous souvenir que ami[0] pointe vers le prnom, ami[1] vers le nom de famille, et ainsi de suite. Ceci peut se rvler fort compliqu par la suite. C'est exactement le type de problme qu'un hachage peut rsoudre. Voici la dfinition d'un hachage en Ruby :
ami = { "prnom" "nom de famille" "adresse" "ville" "province" }
Remarquez bien qu'il faut utiliser des accoladespour crer un hachage. Les tableaux, quant eux, se dfinissent par l'intermdiaire de crochets. Comme les tableaux, il est tout fait possible de rajouter par la suite des champs un hachage :
ami["pays"] = "Belgique"
3-4-B-1 - Hash#each
A l'instar des tableaux, les hachages ont galement une mthode each. Cependant, elle nous donne la fois la clef et la valeur de l'entre. En voici un exemple :
amis.each do |clef, valeur| puts clef + " =>" + valeur end
- 31 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
ville =>Houtsiplou nom de famille =>Goret pays =>Belgique adresse =>Rue de l'glise, 26 province =>Lige prnom =>Jean-Paul
Ceci illustre un des plus gros dfauts des hachages. Les donnes contenues dans un hachage ne sont pas classes dans un ordre particulier. Comment Ruby pourrait-il savoir que prnom doit venir avant adresse? Le meilleur moyen de rsoudre ce type de problme est de crer sa propre classe. Ruby est excellent pour a. Mais avant d'tudier cette technique, il y a encore quelques notions que nous devons voir. Le prochain chapitre vous expliquera comment crer vos propres classes et mthodes. Hash#each_pair est un synonyme de Hash#each
3-4-B-2 - Hash#each_key
Le nom de cette mthode nous dit tout. Elle permet de parcourir toutes les clefs d'un hachage, un peu de la mme faon que Hash#each :
>>ami.each_key do |clef| ?> puts clef >>end ville nom de famille pays adresse province prnom
3-4-B-3 - Hash#each_value
Cette mthode parcourt toutes les valeurs d'un hachage :
>>ami.each_value do |valeur| ?> puts valeur >>end Houtsiplou Goret Belgique Rue de l'glise, 26 Lige Jean-Paul
Nous allons commencer par dfinir une structure reprsentant une adresse, et nous finirons par assembler le carnet tout entier.
Nous allons videmment choisir d'utiliser un hachage. Voici la reprsentation de nos adresses:
# Adresse de Nicolas adresse_de_nicolas = { "rue" =>"Rue du port, 32", "code postal" =>"56000", "ville" =>"Vannes", "pays" =>"France" } # Adresse de Franois adresse_de_francois = { "rue" =>"Avenue de la tranche, 14", "code postal" =>"1000", "ville" =>"Bruxelles", "pays" =>"Belgique" } # Adresse de Marina adresse_de_marina = { "rue" =>"Strada di l'amore, 61", "code postal" =>"50100", "ville" =>"Firenze", "pays" =>"Italia" }
- 33 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
# Nicolas nicolas = { "prnom" "nom de famille" "tlphone" "adresse" } # Franois francois = { "prnom" "nom de famille" "tlphone" "adresse" } # Marina marina = { "prnom" "nom de famille" "tlphone" "adresse" }
Et voila! Nous venons d'implmenter compltement la structure de notre carnet d'adresses. Dans la section suivante, nous allons apprendre comment trier les lments du carnet, ainsi que d'autres petites choses amusantes. Sauvegardez les structures dans un fichier. Nous allons les r-utiliser dans les sections qui vont suivre.
- 34 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Ce qui affichera :
Nicolas Franois Marina
Le rsultat :
Nicolas Rocher (+33) 02 93 45 49 19 Franois Willemart (+32) 02 679 24 81 Marina Nantini (+39) 055 681 32 11
3-6-D - Adresses
Finalement, il ne nous reste plus qu' afficher les adresses. Voici le code qui devrait effectuer cette requte, en prenant soin d'espacer chaque personne par une nouvelle ligne :
carnet.each do |personne| # Nom et tlphone prenom = personne["prnom"] nom = personne["nom de famille"] tel = personne["tlphone"]
- 35 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
puts prenom + " " + nom puts " " + tel # Adresse rue = personne["adresse"]["rue"] cp = personne["adresse"]["code postal"] ville = personne["adresse"]["ville"] pays = personne["adresse"]["pays"] puts " puts " puts " " + rue " + cp + ", " + ville " + pays
# Une ligne vide pour sparer les entres puts "" end
Ce qui produira :
Nicolas Rocher (+33) 02 93 45 49 19 Rue du port, 32 56000, Vannes France Franois Willemart (+32) 02 679 24 81 Avenue de la tranche, 14 1000, Bruxelles Belgique Marina Nantini (+39) 055 681 32 11 Strada di l'amore, 61 50100, Firenze Italia
Et voila le travail!
"Rocher"
],
- 36 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Nous savons que par dfaut la mthode Array#sort appele sur l'objet amis effectuera le tri en fonction du premier lment de chaque sous-tableau - dans ce cas, les prnoms. Et si nous voulions trier ces lments par leur noms de famille? l'instar des itrateurs, la mthode Array#sort peut accepter un bloc de code. Comme ceci :
amis.sort do |a, b| # ... end
La mthode Array#sort attend 3 comportements de ce bloc de code : Retourner la valeur -1 si la variable a est juge plus petite que la variable b. Retourner la valeur 0 si la variable a est juge gale la variable b. Retourner la valeur 1 si la variable a est juge plus grande que la variable b.
Grce a cette information, la mthode Array#sort peut savoir exactement comment il faut trier le tableau.
- 37 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
a et b sont des lments du tableau amis. Le comportement par dfaut de Array#sort est quivalent :
amis.sort do |a, b| a[0] <=>b[0] # Tri sur le premier lment end
Mais comme nous voulons trier sur le second lment (c'est dire le nom de famille), nous devons crire :
amis = amis.sort do |a, b| a[1] <=>b[1] # Tri sur le second lment end # Maintenant, les lments du tableau 'amis' sont tris sur le nom de famille.
personne_a et personne_b sont tous deux des objets provenant du mme hachage. Nous pouvons donc, par exemple, les trier par ordre alphabtique sur leur prnom, en crivant tout simplement ceci :
carnet.sort do |personne_a, personne_b| personne_a["prnom"] <=>personne_b["prnom"] end
Essayez, a fonctionne!
- 38 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Dans l'exemple du carnet d'adresses, les structures pour les adresses et les personnes contiennent des donnes diffrentes. Donc, nous les avons reprsents par des hachages. Mais le carnet lui-mme contient des donnes du mme type (des personnes), et nous voulions galement tre capable de trier ses lments. Donc, reprsenter le carnet par un tableau tait le meilleur choix.
3-8-B-1 - Tableaux
Un tableau devrait toujours reprsenter une collection d'lments du mme type. Comme une groupe de voitures, une liste de noms, etc.. Vous pouvez reprsenter ceci en utiliser en mettant au plurielle nom de votre tableau. Par exemple : Si chaque lment du tableau est une voiture, le tableau devrait s'appeler voitures. Si chaque lment du tableau est le nom d'une personne, le tableau devrait s'appeler noms.
De cette faon, le nom de la variable vous rappelle qu'il s'agit d'un tableau, et en mme temps, elle se lit comme du franais.
3-8-B-2 - Hachages
Lorsque vous travaillerez avec des hachages, il est important que vous choisissiez de bons noms pour vos clefs de hachage. Un bon nom doit tre la fois clair, descriptif et facile se souvenir. Bien : "deuxime prnom" Pas bien : "2eprenom"
N'oubliez pas que Ruby accepte des espaces et des accents comme noms pour vos clefs de hachage. Vous n'avez donc aucune excuse d'utiliser "2eprenom" pour une clef.
3-8-C - Commentaires
N'oubliez surtout pas de rajouter des commentaires clairs dans vos programmes. Souvenez-vous, on crit le code une fois, et on le lit une infinit de fois.
3-8-D - Sous-structures
En gnral, il est recommand d'viter de dclarer des sous-structures. Nanmoins, si vous utilisez une indentation propre et des noms significatifs pour vos variables, a peut tre bon. Jetez un coup d'oeil ces exemples :
3-8-D-1 - Bien
- 39 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
# Adresse de Nicolas adresse_de_nicolas = { "rue" =>"Rue du port, 32", "code postal" =>"56000", "ville" =>"Vannes", "pays" =>"France" } # Nicolas nicolas = { "prnom" "nom de famille" "tlphone" "adresse" }
=>"Nicolas", =>"Rocher", =>"(+33) 02 93 45 49 19", =>{ =>"Rue du port, 32", =>"56000", =>"Vannes", =>"France"
- 40 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
4 - Classes et mthodes
A propos de ce chapitre Vous venez d'apprendre comment crer vos propres structures de donnes. Dans ce dernier chapitre, nous passerons la vitesse suivante, en transformant ces structures en classes (Adresse, Personne et Carnet), et en leur ajoutant des mthodes. Ce seront de vritables classes Ruby, au mme titre que Integer, String, Array ou Hash. Crer ses propres classes procure quelques avantages intressants : Rutilisation du code :Vous souvenez-vous du nombre de lignes qu'il a fallu crire pour afficher le contenu du carnet d'adresses? N'aurait-il pas t plus joli d'crire ce code quelque part, et d'ensuite appeler puts carnet chaque fois que nous dsirions l'afficher ? C'est exactement ce que nous allons apprendre dans ce chapitre. Abstraction des donnes :Vous utilisez une classe en appelant ses mthodes. Le contenu de la classe en elle-mme (l'implmentation des mthodes) vous est cach. Savez-vous comment la classe String est fabrique? Probablement pas, mais vous tes nanmoins capable de l'utiliser.
Maintenant, nous avons dfini la fonction bonjour. Le code qu'elle contient sera excut chaque appel de la fonction. Un exemple :
def bonjour puts "Bonjour monde!" end bonjour bonjour
Qui produira :
Bonjour monde! Bonjour monde!
- 41 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Comme vous pouvez ds prsent le constater, les fonctions peuvent servir rutiliser du code facilement.
Ce qui produira :
Bonjour Laurent, comment vas-tu? Bonjour Stfanie, comment vas-tu ?
- 42 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
port, 32 Vannes
port, 32 Vannes
Explication : 1 Le mot clef class dfinit une classe. On associe une mthode une classe simplement en dfinissant la mthode l'intrieur de la classe. 2 La mthode initialize permet de construire la classe. Il s'agit en fait du constructeur de la classe. Chaque classe doit contenir une mthode initialize! 3 @rue est une variable de classe. a ressemble un peu une clef de hachage. Le symbole @ permet de distinguer les variables d'un objet. Chaque fois que vous allez instancier un objet de la classe Adresse, cet objet contiendra une variable @rue.
- 43 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Maintenant, la mthode Adresse#rue vous permet d'obtenir la rue d'une adresse. Dans IRB :
>>adresse.rue =>"Rue de la Renaissance, 49"
Une proprit d'un objet, visible de l'extrieur, est appele attribut. Dans ce cas, rue est un attribut. Plus spcialement, un attribut en lecture, car il permet de lire la valeur d'une des proprits de la classe. Comme ce genre d'attribut se retrouve assez souvent, Ruby nous offre un raccourci : le mot clef attr_reader :
class Adresse attr_reader :rue def initialize(rue) @rue = rue end end
Remarquez que Ruby accepte des espaces entre rue et = (dans l'affectation). Par contre, il ne faut pas mettre d'espaces dans la dfinition de la mthode. Maintenant que nous savons comment modifier les donnes de notre classe, nous n'avons plus besoin d'initialiser la rue dans le constructeur. Nous pouvons donc simplifier la mthode initialize :
class Adresse attr_reader :rue def initialize @rue = "" end def rue=(une_rue) @rue = une_rue end end adresse = Adresse.new adresse.rue = "Rue de la Renaissance, 49"
Cette petite modification rendra le code plus simple par la suite, lorsque nous rajouterons les autres donnes (le code postal, la ville, le pays).
- 44 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Maintenant, rue est galement un attribut en criture, car via la mthode Adresse#rue=, il nous est possible de modifier sa valeur. Comme pour la lecture, il s'agit d'une opration courante, et Ruby nous permet d'utiliser le mot clef attr_writer :
class Adresse attr_reader :rue attr_writer :rue def initialize @rue = "" end end
Il est maintenant temps de dfinir entirement la structure adresse de notre carnet sous la forme d'une classe. Le code ci-dessous ne devrait pas vous poser de problme :
class Adresse attr_accessor :rue, :code_postal, :ville, :pays def initialize @rue = @code_postal = @ville = @pays = "" end end
La seule chose qui pourrait vous surprendre dans cet exemple, c'est la ligne @adresse = Adresse.new. La variable @adresse n'est pas une chane de caractres comme les autres variables, mais un objet issu de la classe Adresse.
- 45 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
= = = =
= = = = =
Notez que nous n'avons ni affect de pays, ni de numro de tlphone Nicolas. Comme par dfaut, toutes les valeurs sont vides (c'est dire ""), nous pouvons crer des objets Adresse et Personne avec des informations incompltes. Et nous pouvons toujours appeler nicolas.telephone sans aucun problme, Ruby nous renverra "" en retour. Essayez dans IRB! Et si nous ajoutions une mthode dans la classe Personne, qui nous renverrait le nom complet de la personne reprsente? Trs facile :
class Personne attr_accessor :prenom, :nom, :email, :telephone, :adresse def initialize @prenom = @nom = @email = @telephone = "" @adresse = Adresse.new end def nom_complet @prenom + " " + @nom end end # ... puts nicolas.nom_complet
- 46 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Le caractre \n reprsente une nouvelle ligne. Il s'agit un fait du caractre que votre clavier envoie lorsque vous pressez la touche Enter. Nous pouvons maintenant taper ceci :
adresse adresse.rue adresse.code_postal adresse.ville adresse.pays puts adresse = = = = = Adresse.new "Rue du port, 32" "56000" "Vannes" "France"
Ce qui affichera :
Rue du port, 32 56000, Vannes France
C'tait plutot facile. Rajoutons maintenant deux mthodes d'accs : Carnet#ajoute et Carnet#retire :
class Carnet def initialize @personnes = [] end
- 47 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Explication du code : 1 : La mthode Array#push permet d'ajouter un objet dans un tableau. L'objet sera empil sur les objets existants, un peu comme si vous rajoutiez une assiette sur une pile d'assiettes. 2 : La mthode Array#delete permet de supprimer un objet d'un tableau. Si le tableau contient plusieurs objets identiques, ils seront tous supprims.
Le carnet classera automatiquement les personnes chaque ajout. Cette fonctionnalit va rendre notre classe Carnet bien plus intressante qu'un simple tableau.
- 48 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Si vous avez effectu les exercices du chapitre prcdent, vous devriez dj savoir comment trier les personnes en se basant sur leur nom complet. Voici une faon de le faire :
@personnes.sort do |a, b| if a.prenom == b.prenom a.nom <=>b.nom else a.prenom <=>b.prenom end end
Si les prnoms sont les mmes, nous comparons les noms de famille. Sinon, on compare les prnoms.
4-4-B-2 - Simplification
Le principe fondamental de la simplification est de diviser le problme en petites parties. Nous pouvons dplacer le bloc de code dans une mthode :
def par_nom(a, b) if a.prenom == b.prenom a.nom <=>b.nom else a.prenom <=>b.prenom end end
Ce qui est beaucoup plus simple lire. Il est possible de dfinir avec Ruby des blocs de code en utilisant deux syntaxes diffrentes :
@personnes.sort do |a, b| # ... end @personnes.sort { |a, b| # ... }
Ces deux notations veulent dire exactement la mme chose. La diffrence est que do ... end est plus lisible, et que { ... } est plus court. Nous pouvons crire le tri de notre tableau de cette faon :
@personnes.sort { |a, b| par_nom(a, b) }
Vous pouvez litralement lire "tri de personnes par le nom". C'est du code trs lisible. Voici une suggestion : Utilisez la notation { ... } quand il est possible de faire tenir l'expression sur une seule ligne. Sinon, utilisez do ... end.
- 49 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
4-4-B-3 - Finalement
Il est maintenant temps de dplacer ce code dans notre classe Carnet, et d'implmenter notre tri automatique :
class Carnet def initialize @personnes = [] end def ajoute(personne) @personnes.push(personne) @personnes = @personnes.sort { |a, b| par_nom(a, b) } end def retire(personne) @personnes.delete(personne) end def par_nom(a, b) if a.prenom == b.prenom a.nom <=>b.nom else a.prenom <=>b.prenom end end end
Maintenant, chaque fois que vous ajouterez une personne dans le carnet, ce dernier sera tri automatiquement!
Ce qui produira :
Vive Ruby! Vive Ruby!
Vous pouvez utiliser yield exactement comme n'importe quelle autre mthode. Pour passer des arguments un bloc de code, passez-les simplement yield. Prenez cet exemple :
def noms yield("Nicolas") yield("Franois") yield("Marina") end noms do |nom| puts "Salut " + nom + ", comment vas-tu?" end
Vous pouvez passez autant de paramtres que vous voulez au bloc de code. Par exemple :
def noms yield("Nicolas", "Rocher") end noms do |prenom, nom| puts prenom + " " + nom end
Ce qui donnera :
Nicolas Rocher
Et voila!
- 51 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
end end
- 52 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Lorsque vous programmerez une mthode comme celle-ci, il est possible de la dclarer comme tant prive. Une mthode prive ne peut tre appele que par l'objet lui-mme, et jamais par l'utilisateur. Une mthode normale (comme toutes celles que nous avons crites), est appele mthode publique. Vous pouvez dclarer des mthodes en utilisant les mots clefs public et private. Quand vous ajoutez le mot clef private, toutes les mthodes dfinies partir de l seront prives, jusqu' ce que vous rajoutiez le mot clef public. Par exemple :
class UneClasse # Par dfaut, les mthodes sont publiques def methode1 # ... end private # Maintenant, les mthodes sont prives
def methode2 # ... end def methode3 # ... end public # Sauf celle-ci, qui sera publique
Donc, dans notre carnet d'adresses, nous devons rajouter le mot clef private juste avant la dfinition de Carnet#par_nom :
class Carnet # # Mthodes fondamentales : # initialize # ajoute # retire # def initialize @personnes = [] end # ... private # Dbut des mthodes prives
# # Fonction de tri. # def par_nom(a, b) if a.prenom == b.prenom a.nom <=>b.nom else a.prenom <=>b.prenom end end end
Nous avons pass beaucoup de temps crire les trois classes pour notre carnet d'adresses. Nous ne voulons pas copier et coller ternellement le code chaque fois que nous allons l'utiliser dans un programme. Fort heureusement, nous n'avons pas besoin de le faire. Copiez le code des trois classes dans un fichier, et sauvez-le sous le nom carnet.rb. Maintenant, crez un nouveau fichier (dans le mme rpertoire) et tapez :
require 'carnet' # Nicolas adresse = Adresse.new adresse.rue adresse.code_postal adresse.ville adresse.pays puts "Nicolas:" puts adresse = = = = "Rue du port, 32" "56000" "Vannes" "France"
Vous l'aurez compris, le mot clef require permet de charger du code existant.
4-7-B - Commentaires
Plus vous crirez de programmes complexes, plus l'usage de commentaires se rvlera important : Les commentaires ne doivent pas ncessairement tre longs. Ils doivent juste expliquer clairement l'objectif du code. Chaque fonction devrait avoir un commentaire qui stipule ce que fait la fonction. Exceptionnellement, vous pouvez omettre le commentaire si la fonction est si simple que son usage est vident. Dans le cas du carnet d'adresses : Les mthodes initialize, ajoute et retire n'ont pas besoin d'tre commentes.
- 54 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Dans le code de la classe, les mthodes chaque_personne et chaque_adresse ont un seul commentaire, qui stipule que ce sont des itrateurs. Une fois que le programmeur sait que ces mthodes sont des itrateurs, il devine plus facilement l'usage de ces mthodes. Mme chose pour la mthode par_nom, dont le commentaire explique au lecteur qu'il s'agit d'une fonction de tri. Les commentaires peuvent galement tre utiliss pour grouper ensemble une srie de fonctions communes. Par exemple, dans le carnet d'adresses, nous avons utilis des commentaires pour rassembler les "mthodes fondamentales", "itrateurs" et "fonctions de tri". Essayez toujours de diviser le code en petites parties, plus facilement maintenables.
- 55 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Les discussions se font uniquement en anglais. Nanmoins, il existe une liste de diffusion francophone. Pour s'inscrire, il faut envoyer l'adresse ruby-fr-ctl@ruby-lang.orgle mme style de message que pour la liste anglophone. Malheureusement, cette liste n'est pas trs active... IRC : Si vous avez un client IRC, vous pouvez obtenir de l'aide directement via le canal de discussion Ruby officiel. Connectez-vous simplement sur le rseau freenode, et joignez le canal #ruby-lang. Si vous ne savez pas ce qu'est IRC, alors ce site est fait pour vous.
Groupes d'utilisateurs Ruby : Il existe peut-tre un groupe d'utilisateurs Ruby prs de chez vous. Dans ce cas, il s'agit souvent d'un moyen intressant pour avoir de l'aide sur Ruby, ainsi que de rencontrer par la mme occasion d'autres passionns. Vous pouvez obtenir une liste des groupes d'utilisateurs recenss l'adresse suivante.
A-2 - Documentation
En plus de ce tutoriel, vous pouvez trouver d'autres documents utiles sur le langage Ruby :
A-2-B - Livres
Voici quelques livres se focalisant sur Ruby. Remarquez, je n'ai pas lu les deux premiers bouquins. Mes commentaires sont donc bass sur ce que j'ai pu entendre via la communaut.
- 56 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
Sams Teach Yourself Ruby in 21 Days(de Mark Slagell) : Il s'agit du livre le plus accessible dans cette liste. Le lecteur n'a besoin d'aucune connaissance particulire pour aborder cet ouvrage. L'auteur adopte un style "tutoriel" pour enseigner toutes les fonctionnalits importantes du langage, que ce soit les bases ou mmes certains points avancs. Ce livre a t trs bien accept par la communaut. C'est probablement un bon bouquin. The Ruby Way(de Hal Fulton) : Ce livre est bas sur une approche "livre de cuisine". Vous y trouverez un bon nombre de solutions pour un large panel de problmes frquemment rencontrs. Il s'agit d'un livre d'une difficult moyenne, et il est trs souvent recommand par la communaut. Programming Ruby(de David Thomas) : Ce livre est une rfrence complte du langage Ruby. Il est souvent reprsent sous le nom de "PickAxe" (qui peut se traduire en franais par "piolet", une sorte de pic glace), simplement parce qu'il s'agit de l'illustration principale sur la couverture du livre. C'est de loin l'ouvrage le plus souvent mentionn dans la liste de diffusion Ruby. Il s'agit d'une excellente rfrence.
Ce livre est un peu plus avanc que ce tutorial. Le lecteur doit avoir quelques connaissances pralables en matire de programmation, et doit comprendre l'architecture oriente objet. Il est disponible gratuitement en ligne sur le site rubycentral. Ces livres ne sont disponibles qu'en anglais.
- 57 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
B-1 - GNU/Linux
La plupart des distributions GNU/Linux fournissent Ruby dans l'installation par dfaut. Nanmoins, si Ruby n'est pas prsent sur votre machine, voici ce qu'il faut faire pour l'installer en fonction de votre systme :
B-1-B - Gentoo
Ruby fait partie de portage. Un simple emerge rubyfera le boulot votre place.
B-1-C - Debian
Ruby s'installera sur votre Debian comme n'importe quel autre logiciel, en invoquant apt-get install ruby.
B-2 - Mac OS X
Ruby est distribu par dfaut avec Mac OS X. Si vous le dsirez, vous pouvez obtenir un binaire sur le site de tlchargement d'Apple.
B-3 - FreeBSD
Ruby fait partie de la collection des ports de FreeBSD. Vous pouvez donc l'installer en utilisant les instructions suivantes :
# # # # cd /usr/ports/lang/ruby make make install make clean
- 58 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/
- 59 Permission est accorde de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation, sans Sections Invariables, sans Texte de Premire de Couverture, et sans Texte de Quatrime de Couverture. Une copie de la prsente Licence est incluse ici.
http://ruby.developpez.com/cours/apprenez-ruby/