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
- (en) Site officiel
- (en) Le livre Programming Ruby en ligne
- (en) Ruby Application Archive qui regroupe un grand nombre de projets codés en Ruby (en anglais)
- (fr) RubyFR.org, wiki francophone
- (en) RubyGarden, wiki anglophone
Bibliographie
- Yukihiro Matsumoto (2002), Ruby in a Nutshell, ISBN 2-84177-210-1
Autres acceptions
- Ruby en linguistique



