Ruby

Un article de Freepedia.

Pour les articles homonymes, voir Ruby (homonymie). Image:Logo Begriffsklärung.png

Image:Langage progr.png
Cet article fait partie de la série
Langages de programmation
Langages à objets
Ada 95 - C++ - C#
Common Lisp
Delphi - Eiffel - Java
Nice - Oz - Python
Ruby - Simula - Lisaac
Smalltalk - Visual Basic
Langages impératifs
APL - ASP - Assembleur
BASIC - C - Cobol
Forth - Fortran - Logo
OPL - Pascal - Perl - PHP
Langages fonctionnels
Erlang - Haskell
ML/OCaml - Oz
Lisp/Common Lisp
Scheme
Langages déclaratifs
Clips - Oz - Prolog
Langages concurrents
Ada 95 - Erlang
Java - Oz
Langages balisés
HTML - SGML - XML
Dialectes XML
S-expressions
Voir aussi
Conception - Codage
Tests - Optimisations

Ruby est un langage de programmation interprété entièrement orienté objet. Sa syntaxe se rapproche de celle d'Ada et Perl, propose des fonctionnalités proche de celles offertes par Smalltalk, et réinvestit des idées de Python, Lisp et CLU.

Yukihiro "Matz" Matsumoto a commencé l'écriture de ce langage en 1993 et a publié une première version en 1995. La syntaxe de Ruby est cohérente et conçue pour éviter autant que possible les mauvaises surprises, selon le principe PoLS (Principle of least surprise : principe de moindre surprise). Le nom Ruby n'est pas un acronyme, mais un jeu de mot sur Perl. La dernière version stable est la 1.8.2 (décembre 2004)

Sommaire

Philosophie

Ruby est entièrement orienté objet :

  • tout bit de donnée est un objet, y compris les types ;
  • toute fonction est une méthode ;
  • toute variable est une référence à un objet, non un objet en soi.

Ruby offre l'héritage de premier niveau, les blocs (mixin), les méthodes de classe... mais pas l'héritage multiple, car les classes peuvent mettre à profit l'architecture modulaire pour arriver au même résultat. La programmation procédurale (c'est-à-dire en dehors de la manipulation d'une instance de classe) est possible, mais tout programme écrit de cette façon reste attaché à la classe générique Object, qui est la classe parente de toutes les autres.

Ruby offre en fait une large variété de méthodes de programmation, pour répondre aux besoins du moment du programmeur : procédurale (ie. la définition d'une variable, fonction... en dehors d'une classe fait appel de façon transparente à la classe Object), orientée objet (tout est objet) ou fonctionnelle (fonction anonyme, fonction retournant une valeur, fermeture...).

Implémentations

L'interpréteur officiel a été porté sur de nombreux systèmes d'exploitation : Unix, Linux, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga sous la double licence libre GNU GPL et la licence Ruby [1]. Il existe aussi un interpréteur moins utilisé en Java, JRuby [2]. Enfin, Ruby vient avec IRB, un interprétateur de commande interactif pour tester en profondeur le fonctionnement du langage.

Fonctionnalités

Une définition rapide de Ruby pourrait être « un mélange de Smalltalk (tout objet, notion de bloc, système de gestion d'exceptions ...) et de Perl (langage de script indépendant d'un IDE, expressions régulières natives ...) » ; on retrouve en effet les fonctionnalités fortes de ces deux langages  :

  • tout en Ruby est un objet : les nombres, les classes, les exceptions, etc. Seules les instructions de contrôles ne sont pas basées sur une notion objet (if-then-else, while, for etc.), à l'inverse de Smalltalk par exemple ;
  • le ramasse-miettes se charge de libérer la mémoire ;
  • le système de gestion d'exceptions permet de gérer facilement les erreurs ;
  • Ruby permet le remplacement des méthodes et la modification des classes pendant l'exécution du programme, qu'elles soient définies par l'utilisateur ou non ;
  • Ruby intègre dans sa syntaxe les expressions régulières (et sait les gérer en japonais).

Exemples

Exemples de base

# tout est objet en Ruby, y compris les nombres et les chaînes de caractères :
-199.abs                                            # 199
"Ruby est cool !".length                            # 15
"Ruby".index("b")                                   # 2
"Bonjour tout le monde !".split(//).uniq.sort.join  # " !Bdejlmnortu"

Tableaux et tables de hachage

Création et utilisation d'un tableau :

t = [ 1, 'salut', 3.14, 1, 2, [4, 5] ]

t[2]                       # 3.14
t.reverse                  # [[4, 5], 2, 1, 3.14, "salut", 1]
t[2..4] << [8,7].sort      # [3.14, 1, 2, [7, 8]]

Idem pour une table de hachage:

h = {"L'eau" => 'mouille', 'Le feu' => 'brule'}
puts h['Le feu']

h.each_pair do |key, value| 
        puts "#{key}, ca  #{value} !"
end
# Le feu, ca  brule !
# L'eau, ca  mouille !

h.delete_if { |k,v| k == 'Le feu' }   # supprime l'association 'Le feu' => 'brule'

Blocks et itérateurs

Un tableau avec les cubes des nombres de 1 à 10 :

(1..10).map { |x| x*x*x }       # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Un bloc qui affiche 10 fois bonjour :

10.times do
    puts "Bonjour !"
end

Classe

Vous pouvez comparer cet exemple à son équivalent en Python.

class Fruit
end

class Pomme < Fruit
    @@Mangeurs = ["Jacques", "Nicolas"] # variable de classe
    attr_reader :couleur    # définit un attribut 'couleur' que l'on peut lire, mais pas modifier
    
    def initialize(couleur)
        super()
        @couleur = couleur
    end
               
    def comestible?(nom)
        if not @@Mangeurs.member?(nom)
            puts nom + " n'aime pas les pommes."
        else    
            puts nom + " aime les pommes."
        end     
    end     
end     

petitePomme = Pomme.new('verte')
petitePomme.comestible?('Pierre')       # Pierre n'aime pas les pommes.
petitePomme.comestible?('Nicolas')      # Nicolas aime les pommes.

Voir aussi

Liens internes

Liens externes

Bibliographie

Autres acceptions

  • Ruby en linguistique
Récupérée de « http://fr.freepedia.org/Ruby.html »


Views
Outils personels
Boîte à outils
Autres langues
Autres Liens