SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Ruby, c'est quoi comme langage ?
Ruby c'est un langage informatique, au même titre que PHP, Python, Java, C, C++,
l'ActionScript...

Parmis tous ces langages, trois familles existent, les langages compilés, les langages
interprétés et les langages intermédiaires.
Pour information voici comment se répartissent certains langages que vous connaissez
surement :

   •   Langages compilés : C, C++...
   •   Langages interprétés : PHP, PERL...
   •   Langages intermédiaires : Java, ActionScript...

Pour en savoir plus sur les différences entre ces trois familles de langages, je vous invite à lire
l'explication de commentcamarche.net dont la vulgarisation est excellente (je m'étais lancé
dans une explication, mais faire clair, simple et concis à ce sujet est vraiment compliqué).
Puisque que c'est de lui qu'il s'agit, Ruby est un langage interprété, donc de la même famille
que PHP, c'est d'ailleurs lui que j'utiliserais dans les comparaisons à venir puisqu'il est
surement le langage interpreté le plus connu (au moins des lecteurs de ce blog).

D'ailleurs contrairement à la croyance qui veut que Ruby soit un truc tout nouveau qui
tombera bientôt à l'eau, Ruby est en fait aussi quot;vieuxquot; que PHP, leur première publication
ayant toutes les deux eu lieu en 1995.

Attention toutefois, Ruby est très différent de PHP !

Pourquoi ?

Orienté Web / Peut tout faire



hkairi@hotmail.com, 77 366 77 92                                                            Page 1
PHP a été crée par un développeur Web pour le développement Web, les bases de PHP
viennent de la nécessité pour son créateur Rasmus Lerdorf, d'enregistrer la fréquentation sur
son CV...

Ruby quant à lui, a été crée par Yukihiro Matsumotow dit quot;Matzquot; en s'inspirant notamment de
PERL et Smalltalk, cela veut principalement dire que Ruby a été écrit pour être un langage
applicatif quot;à tout fairequot; en allant du petit script de classement de vos images aux bibliothèques
d'interfaces graphiques (il est en cela comparable au C, C++, Java...).

Non-Objet / Objet

Dans un langage objet, les objets répondent à des messages.
exemple : l'objet maVoiture reçoit un message lui demandant d'avancer donne

ma_voiture.avance()

PHP, lui, n'est pas un langage (entièrement) orienté objet.
D'ailleurs à l'origine PHP n'est pas du tout un langage objet.
Même si depuis la version 5, tout cela a bien évolué.

Toutefois, en PHP, pour mettre en majuscule un mot ou une phrase, on écrira :

strtoupper(quot;jonathanquot;)

On voit bien ici que quot;l'objetquot; traité est passé à une méthode au lieu de recevoir un message.

Si vous n'avez pas encore compris, regardez ce que cela donne en Ruby.

quot;jonathanquot;.uppercase()

Ici c'est bien l'objet (le string) qui reçoit le message lui indiquant de se mettre en majuscule.

Une des particularités de Ruby est qu'absolument tout (ou presque) est Objet.

C'est la raison pour laquelle j'ai pu écrire quot;jonathanquot;.uppercase() sans avoir auparavant créé
une instance de String...

Ruby quot;comprendquot; automatiquement que ce qui est entre deux guillemets est un string et
répond donc aux méthodes de cette classe.

On touche là une autre particularité de Ruby, le quot;Duck Typingquot; ou quot;Typage Canardquot; (si ça
marche comme un canard et si ça cancane comme un canard, alors ce doit être un canardquot; ).
Le principe est donc de ne pas forcer le programmeur à utiliser une classe donnée, mais de
l'obliger à mettre les données dans le format que nous voulons utiliser.
J'ai écrit quot;jonathanquot; entre guillemets, Ruby comprends que cet objet est un String.
Si j'écris [1, 14, 15] ce sera un Array (Tableau), {1=>quot;aaaquot;, 2=>quot;bquot;} sera un Hash (ou tableau
associatif)...

Bizarreries / P.O.L.S.



hkairi@hotmail.com, 77 366 77 92                                                             Page 2
Une autre particularité de Ruby est de suivre au maximum le P.O.L.S ou quot;Principle of Least
Surprisequot; (quot;Principe de moindre surprisequot;).

Cela peut sembler une évidence, mais en gros cela veut dire que les méthodes font ce que leur
nom laisse penser qu'elles font.

Pourtant, lorsque l'on lit la documentation de PHP, on se rend compte que ce n'est pas
toujours le cas :

array_merge( array $array1 [, array $array2 [, array $... ]] )

Merges the elements of one or more arrays together so that the values of one are appended to
the end of the previous one. It returns the resulting array.

If the input arrays have the same string keys, then the later value for that key will overwrite
the previous one.

If, however, the arrays contain numeric keys, the later value will not overwrite the original
value, but will be appended.

If only one array is given and the array is numerically indexed, the keys get reindexed in a
continuous way.

La même chose en Ruby (méthode merge de la classe Hash) :

hsh.merge(other_hash)

Returns a new hash containing the contents of other_hash and the contents of hsh, overwriting
entries in hsh with duplicate keys with those from other_hash.

Vous voyez la différence, n'est ce pas

[private joke]
On peut aussi en faire la démonstration avec AS3 et Ruby pour retourner un string :

AS3 :

myString.split('').reverse().join('')

Ruby

my_string.reverse()

[/private joke]

Voilà pour la première introduction, j'espère vous avoir donner envie d'en savoir un peu plus
et je vous monterais bientot les rudiments de la syntaxe Ruby (certes un peu étrange pour un
développeur PHP ou Flash, mais tellement sexy à l'usage !)

Un peu de syntaxe Ruby...
hkairi@hotmail.com, 77 366 77 92                                                           Page 3
Alors, essayons d'écrire un peu plus de Ruby...

Pour commencer, si vous souhaitez tester ces exemples sur votre poste je vous invite à
installer Ruby sur votre machine.
Pour les autres, vous pouvez tester en ligne ou vous contenter de lire :).

Pour l'installation, les Linuxiens se débrouillerons avec leur gestionnaire de paquets pour
installer les paquets ruby irb et rdoc.

Pour les utilisateurs de Windows, je vous invite à utiliser le one-click install qui vous donnera
tout ce qu'il faut pour commencer.

Comme je le disais dans le précédent article, la syntaxe de Ruby peut étonner au premier
abord, mais sa lisibilité en est fortement améliorée. Regardons ces quelques lignes tirées ou
inspirés du fameux quot;Why's (poignant) guide to Rubyquot; et de Softiesonrails pour s'en
convaincre.

5.times { print quot;Hello!quot; }

Essayons de lire ce bout de code en anglais, Five times print Hello, je vous laisse deviner ce
qu'il fait

Un autre exemple :

exit unless quot;restaurantquot;.include? quot;auraquot;

En anglais lu : Exit unless restaurant includes aura
Avec cette ligne, notre programme va se terminer (exit) sauf si (unless) le mot quot;restaurantquot;
contient (include?) le mot quot;auraquot;.

On retiendra de cette ligne le unless , assez rare dans les autres langages qui est en fait
l'inverse du if ainsi que l'utilisation très judicieuse du point d'interrogation dans le nom de
méthode include? pour signifier une question, un test (est-ce que quot;restaurantquot; contient quot;auraquot;
?.
Vous aurez déduis que les méthodes ce terminant par un point d'interrogation retourneront
normalement true ou false.

Allez écrivons maintenant une petite méthode (ou fonction si vous préférez, mais
normalement en Programmation Orientée Objet on dit méthode).

Imaginez un appareil photo, écrivons la méthode qui prend une photo.
Celle-ci vérifiera si l'appareil est allumé et s'il reste de la place sur la carte mémoire.

def capture_clicked
  capture_image if @camera.on? && @camera.memory_available?
end

Comme vous pouvez le constater, une méthode Ruby s'écrit avec def et end.
Pour le reste c'est encore une fois plutôt standard, vous remarquerez toutefois qu'en Ruby, on
peut écrire la clause if à la fin de l'instruction ce qui améliore la lisibilité.
En effet, ce que l'on veut faire dans notre cas (99% du temps) c'est capture_screen, il est

hkairi@hotmail.com, 77 366 77 92                                                              Page 4
donc logique de le voir tout dès le début de la méthode et pas encadré par un if comme ce
serait le cas dans beaucoup d'autres langages.

Imaginons maintenant qu'on vous demande une méthode qui prendrai des photos en mode
rafale tant qu'il y a de place, vous écrieriez alors simplement :

def rafale
  capture_image while @camera.memory_available?
end

Allez un dernier exemple pour la route, écrivons une petite classe Etudiant.
Celui-ci aura un nom, un prénom et un âge.
on a déjà tous écrit un truc du style avec une classe avec trois propriétés et leurs quot;gettersquot;.

<br />class    Etudiant
{
    private    $prenom;
    private    $nom;
    private    $age;

      function Etudiant(prenom, nom, age)
      {
          $this->prenom = prenom;
          $this->nom = nom;
          $this->age = age;
      }

      function prenom()
      {
          return $this->prenom;
      }
      function nom()
      {
          return $this->nom;
      }

      function age()
      {
          return $this->age;
      }
}

C'est moche n'est-ce pas !
Et bien en Ruby cela nous donne :

class Etudiant

    attr_reader :prenom, :nom, :age

    def initialize(prenom, nom, age)
      @prenom, @nom, @age = prenom, nom, age
    end

end

Alors, vous voyez bien que le mot sexy n'était pas exagéré pour décrire la syntaxe de Ruby


hkairi@hotmail.com, 77 366 77 92                                                             Page 5
Pour information, si l'on veut aussi les quot;settersquot;, en PHP ce sera trois nouvelles fonctions en
Ruby on remplacera juste :

attr_reader :prenom, :nom, :age

par

attr_accessor :prenom, :nom, :age

et si l'on veut mettre un peu de logique dans le getter, pour récupérer le prénom avec une
majuscule au début, il suffira de l'écrire à la main

def prenom
  @prenom.capitalize
end

Vous vous demandez quand même surement ce que sont ces @ que l'on peut voir devant
certaines variables.
Ce signe sert à distinguer les variables d'instances (les attributs d'un objet) des variables
locales (à une méthode ou autre).
Il existe également des variables notées @@ma_variable, celles-ci sont des variables de
classes, elles sont donc attachées à la classe et non à son instance.

Regardez ce petit exemple pour mieux comprendre :

class Voiture
  @@nom = quot;Renault Clioquot;

  attr_accessor :nom

  def initialize(nom)
    @nom = nom
  end

  def nom
    @nom.capitalize
  end

  def se_presente
    puts quot;Je suis une quot;+@@nom+quot; surnomée quot;+nom
  end
end
ma_voiture = Voiture.new(quot;titinequot;)
ma_voiture.se_presente

Cet exemple va afficher
Je suis une Renault Clio surnommée Titine.
Vous remarquerez au passage que je peux appeler les méthodes sans les parenthèses, celles-ci
sont optionnelles et les conventions veulent qu'on ne les écrive pas quand il n'y a pas de
paramètres.

Pour résumer pour les habitués à PHP :
nom équivaut à $nom



hkairi@hotmail.com, 77 366 77 92                                                                Page 6
@nom équivaut à $this->nom
@@nom équivaut à self::$nom

Alors, c'est qui qui a la plus belle syntaxe ?                                                  Supprimé : grosse
J'espère que vous avez encore appris plein de belles choses sur Ruby et je m'excuse d'avance
pour les larmes versées lors de votre prochaine tentative de codage en PHP, ActionScript,
Cobol ou Fortran .




hkairi@hotmail.com, 77 366 77 92                                                       Page 7

Contenu connexe

Similaire à Ruby

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
guest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
JS Bournival
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
mazenovi
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli
 

Similaire à Ruby (20)

Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
PHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben AlayaPHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben Alaya
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Séminaire Ruby on Rails (novembre 2010)
Séminaire Ruby on Rails (novembre 2010)Séminaire Ruby on Rails (novembre 2010)
Séminaire Ruby on Rails (novembre 2010)
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Introduction à Ruby on Rails
Introduction à Ruby on RailsIntroduction à Ruby on Rails
Introduction à Ruby on Rails
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Php seance1
Php seance1Php seance1
Php seance1
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Drools
DroolsDrools
Drools
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
PHP Training
PHP TrainingPHP Training
PHP Training
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours Php
Cours PhpCours Php
Cours Php
 

Dernier

Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
Faga1939
 

Dernier (13)

Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 

Ruby

  • 1. Ruby, c'est quoi comme langage ? Ruby c'est un langage informatique, au même titre que PHP, Python, Java, C, C++, l'ActionScript... Parmis tous ces langages, trois familles existent, les langages compilés, les langages interprétés et les langages intermédiaires. Pour information voici comment se répartissent certains langages que vous connaissez surement : • Langages compilés : C, C++... • Langages interprétés : PHP, PERL... • Langages intermédiaires : Java, ActionScript... Pour en savoir plus sur les différences entre ces trois familles de langages, je vous invite à lire l'explication de commentcamarche.net dont la vulgarisation est excellente (je m'étais lancé dans une explication, mais faire clair, simple et concis à ce sujet est vraiment compliqué). Puisque que c'est de lui qu'il s'agit, Ruby est un langage interprété, donc de la même famille que PHP, c'est d'ailleurs lui que j'utiliserais dans les comparaisons à venir puisqu'il est surement le langage interpreté le plus connu (au moins des lecteurs de ce blog). D'ailleurs contrairement à la croyance qui veut que Ruby soit un truc tout nouveau qui tombera bientôt à l'eau, Ruby est en fait aussi quot;vieuxquot; que PHP, leur première publication ayant toutes les deux eu lieu en 1995. Attention toutefois, Ruby est très différent de PHP ! Pourquoi ? Orienté Web / Peut tout faire hkairi@hotmail.com, 77 366 77 92 Page 1
  • 2. PHP a été crée par un développeur Web pour le développement Web, les bases de PHP viennent de la nécessité pour son créateur Rasmus Lerdorf, d'enregistrer la fréquentation sur son CV... Ruby quant à lui, a été crée par Yukihiro Matsumotow dit quot;Matzquot; en s'inspirant notamment de PERL et Smalltalk, cela veut principalement dire que Ruby a été écrit pour être un langage applicatif quot;à tout fairequot; en allant du petit script de classement de vos images aux bibliothèques d'interfaces graphiques (il est en cela comparable au C, C++, Java...). Non-Objet / Objet Dans un langage objet, les objets répondent à des messages. exemple : l'objet maVoiture reçoit un message lui demandant d'avancer donne ma_voiture.avance() PHP, lui, n'est pas un langage (entièrement) orienté objet. D'ailleurs à l'origine PHP n'est pas du tout un langage objet. Même si depuis la version 5, tout cela a bien évolué. Toutefois, en PHP, pour mettre en majuscule un mot ou une phrase, on écrira : strtoupper(quot;jonathanquot;) On voit bien ici que quot;l'objetquot; traité est passé à une méthode au lieu de recevoir un message. Si vous n'avez pas encore compris, regardez ce que cela donne en Ruby. quot;jonathanquot;.uppercase() Ici c'est bien l'objet (le string) qui reçoit le message lui indiquant de se mettre en majuscule. Une des particularités de Ruby est qu'absolument tout (ou presque) est Objet. C'est la raison pour laquelle j'ai pu écrire quot;jonathanquot;.uppercase() sans avoir auparavant créé une instance de String... Ruby quot;comprendquot; automatiquement que ce qui est entre deux guillemets est un string et répond donc aux méthodes de cette classe. On touche là une autre particularité de Ruby, le quot;Duck Typingquot; ou quot;Typage Canardquot; (si ça marche comme un canard et si ça cancane comme un canard, alors ce doit être un canardquot; ). Le principe est donc de ne pas forcer le programmeur à utiliser une classe donnée, mais de l'obliger à mettre les données dans le format que nous voulons utiliser. J'ai écrit quot;jonathanquot; entre guillemets, Ruby comprends que cet objet est un String. Si j'écris [1, 14, 15] ce sera un Array (Tableau), {1=>quot;aaaquot;, 2=>quot;bquot;} sera un Hash (ou tableau associatif)... Bizarreries / P.O.L.S. hkairi@hotmail.com, 77 366 77 92 Page 2
  • 3. Une autre particularité de Ruby est de suivre au maximum le P.O.L.S ou quot;Principle of Least Surprisequot; (quot;Principe de moindre surprisequot;). Cela peut sembler une évidence, mais en gros cela veut dire que les méthodes font ce que leur nom laisse penser qu'elles font. Pourtant, lorsque l'on lit la documentation de PHP, on se rend compte que ce n'est pas toujours le cas : array_merge( array $array1 [, array $array2 [, array $... ]] ) Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. If only one array is given and the array is numerically indexed, the keys get reindexed in a continuous way. La même chose en Ruby (méthode merge de la classe Hash) : hsh.merge(other_hash) Returns a new hash containing the contents of other_hash and the contents of hsh, overwriting entries in hsh with duplicate keys with those from other_hash. Vous voyez la différence, n'est ce pas [private joke] On peut aussi en faire la démonstration avec AS3 et Ruby pour retourner un string : AS3 : myString.split('').reverse().join('') Ruby my_string.reverse() [/private joke] Voilà pour la première introduction, j'espère vous avoir donner envie d'en savoir un peu plus et je vous monterais bientot les rudiments de la syntaxe Ruby (certes un peu étrange pour un développeur PHP ou Flash, mais tellement sexy à l'usage !) Un peu de syntaxe Ruby... hkairi@hotmail.com, 77 366 77 92 Page 3
  • 4. Alors, essayons d'écrire un peu plus de Ruby... Pour commencer, si vous souhaitez tester ces exemples sur votre poste je vous invite à installer Ruby sur votre machine. Pour les autres, vous pouvez tester en ligne ou vous contenter de lire :). Pour l'installation, les Linuxiens se débrouillerons avec leur gestionnaire de paquets pour installer les paquets ruby irb et rdoc. Pour les utilisateurs de Windows, je vous invite à utiliser le one-click install qui vous donnera tout ce qu'il faut pour commencer. Comme je le disais dans le précédent article, la syntaxe de Ruby peut étonner au premier abord, mais sa lisibilité en est fortement améliorée. Regardons ces quelques lignes tirées ou inspirés du fameux quot;Why's (poignant) guide to Rubyquot; et de Softiesonrails pour s'en convaincre. 5.times { print quot;Hello!quot; } Essayons de lire ce bout de code en anglais, Five times print Hello, je vous laisse deviner ce qu'il fait Un autre exemple : exit unless quot;restaurantquot;.include? quot;auraquot; En anglais lu : Exit unless restaurant includes aura Avec cette ligne, notre programme va se terminer (exit) sauf si (unless) le mot quot;restaurantquot; contient (include?) le mot quot;auraquot;. On retiendra de cette ligne le unless , assez rare dans les autres langages qui est en fait l'inverse du if ainsi que l'utilisation très judicieuse du point d'interrogation dans le nom de méthode include? pour signifier une question, un test (est-ce que quot;restaurantquot; contient quot;auraquot; ?. Vous aurez déduis que les méthodes ce terminant par un point d'interrogation retourneront normalement true ou false. Allez écrivons maintenant une petite méthode (ou fonction si vous préférez, mais normalement en Programmation Orientée Objet on dit méthode). Imaginez un appareil photo, écrivons la méthode qui prend une photo. Celle-ci vérifiera si l'appareil est allumé et s'il reste de la place sur la carte mémoire. def capture_clicked capture_image if @camera.on? && @camera.memory_available? end Comme vous pouvez le constater, une méthode Ruby s'écrit avec def et end. Pour le reste c'est encore une fois plutôt standard, vous remarquerez toutefois qu'en Ruby, on peut écrire la clause if à la fin de l'instruction ce qui améliore la lisibilité. En effet, ce que l'on veut faire dans notre cas (99% du temps) c'est capture_screen, il est hkairi@hotmail.com, 77 366 77 92 Page 4
  • 5. donc logique de le voir tout dès le début de la méthode et pas encadré par un if comme ce serait le cas dans beaucoup d'autres langages. Imaginons maintenant qu'on vous demande une méthode qui prendrai des photos en mode rafale tant qu'il y a de place, vous écrieriez alors simplement : def rafale capture_image while @camera.memory_available? end Allez un dernier exemple pour la route, écrivons une petite classe Etudiant. Celui-ci aura un nom, un prénom et un âge. on a déjà tous écrit un truc du style avec une classe avec trois propriétés et leurs quot;gettersquot;. <br />class Etudiant { private $prenom; private $nom; private $age; function Etudiant(prenom, nom, age) { $this->prenom = prenom; $this->nom = nom; $this->age = age; } function prenom() { return $this->prenom; } function nom() { return $this->nom; } function age() { return $this->age; } } C'est moche n'est-ce pas ! Et bien en Ruby cela nous donne : class Etudiant attr_reader :prenom, :nom, :age def initialize(prenom, nom, age) @prenom, @nom, @age = prenom, nom, age end end Alors, vous voyez bien que le mot sexy n'était pas exagéré pour décrire la syntaxe de Ruby hkairi@hotmail.com, 77 366 77 92 Page 5
  • 6. Pour information, si l'on veut aussi les quot;settersquot;, en PHP ce sera trois nouvelles fonctions en Ruby on remplacera juste : attr_reader :prenom, :nom, :age par attr_accessor :prenom, :nom, :age et si l'on veut mettre un peu de logique dans le getter, pour récupérer le prénom avec une majuscule au début, il suffira de l'écrire à la main def prenom @prenom.capitalize end Vous vous demandez quand même surement ce que sont ces @ que l'on peut voir devant certaines variables. Ce signe sert à distinguer les variables d'instances (les attributs d'un objet) des variables locales (à une méthode ou autre). Il existe également des variables notées @@ma_variable, celles-ci sont des variables de classes, elles sont donc attachées à la classe et non à son instance. Regardez ce petit exemple pour mieux comprendre : class Voiture @@nom = quot;Renault Clioquot; attr_accessor :nom def initialize(nom) @nom = nom end def nom @nom.capitalize end def se_presente puts quot;Je suis une quot;+@@nom+quot; surnomée quot;+nom end end ma_voiture = Voiture.new(quot;titinequot;) ma_voiture.se_presente Cet exemple va afficher Je suis une Renault Clio surnommée Titine. Vous remarquerez au passage que je peux appeler les méthodes sans les parenthèses, celles-ci sont optionnelles et les conventions veulent qu'on ne les écrive pas quand il n'y a pas de paramètres. Pour résumer pour les habitués à PHP : nom équivaut à $nom hkairi@hotmail.com, 77 366 77 92 Page 6
  • 7. @nom équivaut à $this->nom @@nom équivaut à self::$nom Alors, c'est qui qui a la plus belle syntaxe ? Supprimé : grosse J'espère que vous avez encore appris plein de belles choses sur Ruby et je m'excuse d'avance pour les larmes versées lors de votre prochaine tentative de codage en PHP, ActionScript, Cobol ou Fortran . hkairi@hotmail.com, 77 366 77 92 Page 7