SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie Ruby

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 AlayaMahdi Ben Alaya
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
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)Novelys
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
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).pdfYasushiTsubakik
 
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 OMEZZINEMarouan OMEZZINE
 
Introduction à Ruby on Rails
Introduction à Ruby on RailsIntroduction à Ruby on Rails
Introduction à Ruby on RailsNovelys
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationpapediallo3
 

Kürzlich hochgeladen (20)

Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'information
 

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