Apprenez Ruby


précédentsommairesuivant

1. Les bases

À propos de ce chapitre

Ce chapitre se focalise sur les bases fondamentales nécessaires 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.

1-1. Premiers pas

Nous allons commencer notre exploration du langage Ruby en utilisant l'invite de commandes interactif IRB (en anglais, «interactive ruby shell»). Pour se faire, ouvrez un terminal et entrez :

 
Sélectionnez
irb --simple-prompt 
Image non disponible

Vérifiez que le programme IRB démarre correctement avant de continuer.

1-1-A. Utiliser Ruby comme une calculatrice

L'interpréteur interactif IRB peut s'utiliser facilement comme calculatrice :

Image non disponible

Ruby est capable d'évaluer toutes les opérations arithmétiques de base :

Symbole Effet
+ addition
- soustraction
* multiplication
/ division

Pour quitter le programme IRB, il suffit d'entrer exit :

Image non disponible

Nous allons maintenant jouer un peu plus avec les opérations arithmétiques de base. Essayez ceci :

Image non disponible

Remarquez bien le comportement de Ruby lorsque nous essayons de diviser 3 par 2 :

Image non disponible

Que s'est-il passé ? Rien d'anormal, je vous rassure! Ruby nous montre simplement qu'il travaille avec deux classes différentes de nombres :

  • Entiers
  • Décimaux (appelés aussi « flottants »)

1-1-B. Les nombres et 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 réponse mathématiquement exprimée sous forme entière.

3 / 2 devrait nous donner 1.5, mais comme cette valeur n'est pas entière et que les deux nombres utilisés dans l'opération sont entiers, Ruby renverra donc à la place une réponse formulée sous forme entière, c'est à dire 1.

1-1-B-2. Décimaux

Un nombre décimal est souvent appelé «flottant», par analogie avec sa partie décimale. 3.14, 1.5 et 3.0 sont des flottants. Ruby renverra toujours une valeur flottante comme résultat pour des opérations arithmétiques agissant sur des flottants. Par exemple :

Image non disponible

1-1-C. Autres opérateurs arithmétiques

Avant d'en finir avec ce chapitre, jetons un petit coup d'oeil à deux autres opérateurs arithmétiques :

Symbole Effet
** exposant
% modulo (le reste d'une division)
Image non disponible

Notez bien le comportement de l'opérateur % avec les nombres décimaux. Dans cet exemple, 2 rentre deux fois dans 5.1, et il reste 1.1 de trop.

1-1-D. Nombres énormes, et nombres minuscules

Ruby convient très bien lorsqu'il s'agit de travailler avec de très grands et de très petits nombres. Supposez par exemple que vous souhaitez enregistrer quelque part le nombre 192349562563447.

Bon, c'est loin d'être facile à lire. Dans la vie courante, nous sommes habitués à séparer les chiffres par des caractères spéciaux, en fonction du pays d'origine (il s'agit souvent d'une virgule, d'un point ou d'un espace blanc). Par exemple, nos amis anglo-saxons auraient représenté ce fameux nombre de cette façon : 192,349,562,563,447. Ruby fonctionne exactement de la même façon, en utilisant des «blancs soulignés» (en anglais, «underscores») :

Image non disponible

Comment faire si vous désirez 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 méthode 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 :

Image non disponible

1-1-E. Quelques exercices

  1. Calculez le nombre d'heures contenues dans année.
  2. Calculez le nombre de minutes dans une décénie.
  3. Quel est votre age en secondes?
  4. Que vaut l'expression 3.24 * ((34/2) - 54)/33.4 * 3.4 ? (notez qu'il est possible d'utiliser des parenthèses)
  5. Quel sera le résultat d'une opération 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

La réponse sera-t-elle donnée sous forme entière ou décimale?

1-2. Chaînes de caractères

Les nombres ne sont pas les seuls types de données que vous utiliserez pour programmer avec Ruby. En effet, vous allez probablement devoir manipuler des lettres, des motsou encore des blocs de texte.

Ruby identifie ce genre de données par le terme chaine de caractères (en anglais, «string»). Voici quelques exemples de chaînes

  • "a"
  • "Salut."
  • "Longue vie à Ruby!!!"
  • "5 est mon nombre préféré. Quel est le vôtre?"
  • "Snoopy a dit: #%^?*@!"

1-2-A. Opérateurs

Voici quelques trucs amusants que Ruby vous permet de faire avec des chaînes de caractères :

Image non disponible

Voici un moyen de s'en souvenir : "salut " * 3 fait la même 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 " :

Image non disponible

Maintenant, regardez ceci :

Image non disponible

Ruby considère "1" comme étant une chaîne de caractères, pas un nombre.

1-2-B. Méthodes

Voici quelques méthodes utiles qui travaillent avec des chaînes de caractères :

Image non disponible

1-2-C. Quelques exercices

Quel sera le résultat de l'expression suivante : 'Bonjour '.length + 'monde!'.length ?

1-3. De nouveaux noms pour de vieilles choses

Ruby identifie par des noms spéciaux certaines choses que nous connaissons déjà. Par exemple, il utilise le mot Float («flottant») pour représenter un nombre décimal. Voici quelques autres définitions :

  • Object («objet») : Ce n'est rien d'autre qu'un bout de données. Par exemple, le nombre 3 ou la chaîne de caractères "Salut!" sont des objets.
  • Class («classe») : Ruby sépare toujours les types de données en classes. Par exemple, les entiers, les flottants et les chaînes de caractères sont représentés par des classes différentes.
  • Method («méthode») : Les méthodes sont des bouts de code qui peuvent travailler sur des objets. Par exemple, l'opérateur + (qui permet d'additionner deux objets, souvent des entiers ou des chaînes) est bel et bien une méthode.

Voici la liste des classes Ruby associées aux types de données que vous venez de découvrir :

Type de donnée Classe associée
nombre entier Integer
nombre décimal Float
texte String

Souvenez-vous, vous avez également utilisé plusieurs méthodes associées à ces classes :

Classe Quelques méthodes
Integer +, -, /, *, %, **
Float +, -, /, *, %, **
String capitalize, reverse, length, upcase, +, *

1-3-A. Classes et objets

Soyez certain de bien comprendre la différence entre une classe et un objet. Un objet, c'est une donnée quelconque. Une classe, c'est la structure de l'objet, ce à quoi il ressemble, ce qui le différencie des autres objets.

Par exemple, 3 et 5 sont des nombres différents. Ce sont donc des objets différents. Mais ce sont tous deux des nombres entiers, donc ils appartiennent à la même classe («Integer»). Voici quelques exemples :

Objet Classe
2, -5 Integer
7.2, 3.14 Float
"Vive", "Ruby" String

1-3-B. La notation Classe#méthode

Souvenez-vous, différentes classes peuvent avoir différentes méthodes. Voici quelques différences que nous avons déjà remarqué dans ce chapitre :

  • L'opérateur de division (/) ne fonctionne pas de la même façon avec des entiers et des flottants.
  • L'opérateur d'addition (+) se comporte différemment avec des nombres et des chaînes de caractères. Il peut servir à calculer le résultat de l'addition de deux nombres, et il peut également concaténer deux chaînes de caractères.
  • Les chaînes de caractères possèdent plusieurs méthodes que les entiers et les flottants n'ont pas. Par exemple : capitalize, length, upcase, etc..

Pour cette raison, nous utiliserons la notation Classe#méthode pour identifier exactement de quelle méthode nous parlerons. Par exemple, nous dirons Integer#+ afin de différencier cette méthode de Float#+ et de String#+. Nous pouvons également affirmer que String#upcase existe, mais que Integer#upcase n'existe pas.

1-3-C. Convertir une classe

Voici quelques méthodes permettant d'effectuer des conversions pour les trois classes que nous venons d'étudier :

Méthode Classe de départ Classe d'arrivée
String#to_i Chaîne de caractères Entier
String#to_f Chaîne de caractères Flottant
Float#to_i Flottant Entier
Float#to_s Flottant Chaîne de caractères
Integer#to_f Entier Flottant
Integer#to_s Entier Chaîne de caractères

Un petit exemple pratique avec notre ami IRB :

Image non disponible

1-3-D. Convertir une classe

Vous pouvez demander à Ruby si un objet est issu d'une classe particulière. Essayez ceci dans l'interpréteur :

 
Sélectionnez
12.is_a?(Integer)
12.is_a?(Float)
12.is_a?(String)
 
'12'.is_a?(Integer)
'12'.is_a?(Float)
'12'.is_a?(String)
 
12.0.is_a?(Integer)
12.0.is_a?(Float)
12.0.is_a?(String)

Essayez également ceci :

 
Sélectionnez
12 + 12
'12' + '12'
 
'12'.to_i + 12
'12' + 12.to_s
 
12 * 12
'12' * 12

Avez-vous obtenu les résultats que vous espériez?

Comment expliqueriez-vous la différence entre 12, '12' et 12.0 à un enfant?

1-4. Variables

Ruby vous permet d'utiliser des variables pour associer des noms à des objets particuliers. Exemple

 
Sélectionnez
ville = "Toronto"

Ici, Ruby associe la chaîne de caractères "Toronto" à la variable ville.

Si vous avez des difficultés, imaginez-vous Ruby fabriquant deux tableaux. Un contenant les objets, et un autre contenant les noms qui leurs sont associés. Ensuite, imaginez-vous Ruby dessinant une flèche de ville à "Toronto".

Lorsque Ruby rencontrera la variable ville, il suivra logiquement la flèche et arrivera sur la chaîne de caractères "Toronto".

Les noms de variables doivent toujours commencer par une minuscule!

1-4-A. Travailler avec des variables

Vous pouvez manipuler des variables exactement de la même façon que vous auriez manipulé les objets qu'elles représentent. Voici un exemple:

Image non disponible

L'avantage des variables, c'est que vous pouvez garder quelque part une trace de vos données facilement. Imaginez par exemple que l'on vous donne les instructions suivantes :

  1. Additionnez ensemble 2, 4, 6 et 8
  2. Prenez le résultat, et divisez-le par 5
  3. Calculez le produit simultané de 2, 3 et 4
  4. Prenez le résultat 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 :

Image non disponible

1-4-B. Raccourcis

Dans l'exemple ci-dessus, nous avons vu les expressions :

 
Sélectionnez
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 Raccourci Effet
x = x + 2 x += 2 Additionner 2 à x
x = x - 3 x -= 3 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 résultat

Donc, notre exemple du dessus aurait pu être écrit de cette façon :

Image non disponible

1-4-C. Constantes

Les constantes ressemblent à des variables, à la différence près que vous informez Ruby que sa valeur est supposée ne pas changer. Si vous essayez de modifier la valeur d'une constante, Ruby vous enverra un avertissement.

Vous pouvez définir des constantes de la même façon que des variables, sauf que leur nom doit commencer par une majuscule.

Image non disponible

Même si Ville est une constante, sa valeur change quand même. Définir une constante signifie seulement que Ruby vous avertira si vous modifiez sa valeur. Regardez :

Image non disponible

1-4-D. Quelques exercices

Pensez-vous que les raccourcis fonctionnent également avec les chaînes de caractères? Essayez ceci :

 
Sélectionnez
var = "Bonjour "
var += "monde"

À votre avis, que va donner ce code :

 
Sélectionnez
var = "salut"
var *= 3

Essayez-le. Comment auriez-vous expliqué le résultat à un enfant?

1-5. Votre premier programme

Félicitations! Vous êtes maintenant prêt à commencer à écrire des programmes en Ruby.

1-5-A. Bonjour monde

Ouvrez votre éditeur favori, et entrez-y la ligne suivante :

 
Sélectionnez
puts "Bonjour monde"

Sauvez le fichier sous le nom de bonjour.rb et démarrez-le en invoquant

 
Sélectionnez
ruby bonjour.rb 
Image non disponible

puts est une méthode qui affiche une chaîne de caractères sur le terminal.

Voici un nouvel exemple :

Image non disponible

Regardez bien ce que nous avons fait. nom est une chaîne de caractères. Donc, nous pouvons la concaténer à d'autres chaînes de caractères, comme nous avons vu précédemment.

Dans un programme Ruby, seules les lignes passées à puts seront affichées à l'écran.

1-5-B. Un autre exemple

Souvenez-vous, dans la section précédente, nous avions entré ceci dans IRB :

Image non disponible

Nous allons créer un nouveau programme Ruby à partir de ce code. Copiez simplement les lignes dans un nouveau fichier, et rajoutez-y à la fin la ligne suivante :

 
Sélectionnez
puts y 

Ensuite, sauvez le fichier et invoquez Ruby :

Image non disponible

Ça fonctionne! Cependant, nous aimerions modifier un peu le message de sortie. L'idéal serait que le programme affiche «La réponse est 20» à l'écran. On peut toujours essayer ceci :

 
Sélectionnez
puts "La réponse est " + y   # provoquera une erreur

Ça ne marchera évidemment pas. Pourquoi? Souvenez-vous, seules des chaînes peuvent-être concaténées à d'autres chaînes. Nous devons donc convertir notre entier y en chaîne de caractères. Nous savons qu'il faut utiliser la méthode Integer#to_s.

Image non disponible

1-5-C. Créer des programmes exécutables

Si vous travaillez sur un système compatible UNIX (Linux, *BSD, Solaris, Cygwin + Win32...), vous pouvez rendre vos programmes Ruby exécutables. Ils pourront donc être démarrés de la même façon que les autres programmes.

Premièrement, nous devons savoir ou se cache Ruby sur votre machine. Pour ce faire, entrez la commande which ruby dans un terminal :

Image non disponible

Recopiez le chemin sur la toute première ligne de votre programme. N'oubliez pas de préfixer la ligne par #!.

Image non disponible

Il ne reste plus qu'à spécifier l'attribut du programme, ce que fera la commande chmod +x prog.rb (+x signifie «exécutable») :

Image non disponible

1-5-D. Quelques exercices

Transformez en programme les exercices vus dans la section précédente.

Complétez le code suivant :

 
Sélectionnez
nom = "Laurent"
age = 22

Le programme doit afficher "Laurent a 22 ans".

1-6. Ecrire de bons programmes

Beaucoup trop de tutoriels vous enseignent simplement comment programmer, sans vous apprendre comment faire de bons programmes.

1-6-A. Noms de variables

Voici certaines choses dont vous devriez tenir compte lors du choix des noms de variables.

1-6-A-1. Noms significatifs

Le nom d'une variable doit permettre de deviner le type de l'information contenue dans l'objet. Voici quelques exemples :

Bien Pas bien
age a
etudiant foo
nom xwy
somme truc

1-6-A-2. Noms composés

N'ayez surtout pas peur de choisir des noms de variables composés de plus d'un mot. Soyez simplement sur que le nom de la variable est lisible.

Imaginez que vous désirez utiliser une variable pour enregistrer l'age d'un étudiant. Il existe deux conventions :

  • ageEtudiant
  • age_etudiant

Nous préférons la dernière possibilité. Mais c'est à vous de choisir.

N'écrivez pas ageetudiant. Vous n'auriez probablement pas apprécié si nous avions écrit ce tutoriel sans espacer les mots.

1-6-B. Travailler avec IRB

Vous ne devez pas arrêter d'utiliser IRB maintenant que vous savez comment utiliser votre éditeur pour écrire des programmes Ruby. Nous vous avons montré IRB tout au début pour une bonne raison. Lorsque vous programmerez avec Ruby, vous devriez toujours garder un terminal ouvert avec IRB, et y retourner pour expérimenter vos idées.

IRB a été conçu dans cette optique d'utilisation. Si vous l'utilisez judicieusement, vous deviendrez un bon programmeur Ruby.

1-6-C. Utiliser des constantes

Utilisez toujours des constantes pour représenter des valeurs fixes dans vos programmes. Il s'agit d'une bonne précaution, car Ruby vous aidera à identifier des erreurs potentielles dans votre code.

Quelques exemples :

 
Sélectionnez
Pi = 3.14159265
Masse_electron  = 9.109e-31
Vitesse_lumiere = 3e8
Distance_terre_soleil = 5.79e10 

Essayez également d'éviter d'écrire directement des valeurs numériques. 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 = 3.14159265 aire = PI * (rayon ** 2) aire = 3.14159265 * (rayon ** 2)

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Permission est accordée 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 ultérieure publiée par la Free Software Foundation, sans Sections Invariables, sans Texte de Première de Couverture, et sans Texte de Quatrième de Couverture. Une copie de la présente Licence est incluse ici.