Type a search term to find related articles by LIMS subject matter experts gathered from the most trusted and dynamic collaboration tools in the laboratory informatics industry.
Ruby | ||
Date de première version | ||
---|---|---|
Paradigmes | Interprété, objet, impératif, concurrent, fonctionnel | |
Auteur | Yukihiro Matsumoto | |
Développeurs | Yukihiro Matsumoto et des contributeurs | |
Dernière version | 3.3.6 ()[1] | |
Typage | Fort, dynamique | |
Influencé par | Eiffel, Lisp, Smalltalk, Perl, Python, Dylan, Ada et CLU | |
A influencé | langage D[2], Groovy, Perl 6 | |
Implémentations | Ruby, YARV, Ruby MRI, JRuby, XRuby, Rubinius, Cardinal, Gardens Point Ruby.NET, IronRuby, MacRuby, mruby android-ruby | |
Écrit en | C | |
Système d'exploitation | Multiplate-forme | |
Licence | Licence Ruby, licence publique générale GNU version 2[3] et BSD 2-clauses (en)[4] | |
Site web | www.ruby-lang.org | |
Extension de fichier | rb et rbw | |
Ruby est un langage de programmation libre. Il est interprété, orienté objet et multi-paradigme. Le langage a été standardisé au Japon en 2011 (JIS X 3017:2011)[5], et en 2012 par l'Organisation internationale de normalisation (ISO 30170:2012)[6].
Yukihiro « Matz » Matsumoto est le créateur de Ruby. Frustré par son expérience en développement Smalltalk et Lisp, il commence la conception d'un nouveau langage en 1993 sous Emacs, puis publie une première version en 1995 sous licence libre. Il enchaîne depuis les nouvelles versions.
Depuis l'arrivée d'une documentation anglophone, et du framework web Ruby on Rails en 2004, Ruby a connu un certain engouement qui n'a cessé de croître jusqu'en 2008 dans le monde de la programmation, puis une érosion lente si on en juge par son index TIOBE.
Ruby est fortement orienté objet et se rapproche ainsi du paradigme objet de Smalltalk[note 1] :
Malgré cet aspect exclusivement objet, la programmation procédurale est possible et fréquente. Ruby utilise une syntaxe simple, inspirée par Eiffel et Ada[7].
Les fonctionnalités principales sont :
var
est une variable locale, @var
est une variable d'instance, @@var
est une variable de classe, $var
est une variable globale, Var
est une constante.L'interpréteur officiel, Ruby MRI, fonctionne sur de nombreux systèmes d'exploitation : UNIX, Linux, Microsoft Windows, MS-DOS, OS X, OS/2, ReactOS, AmigaOS, etc. Il est publié sous la double licence libre GNU GPL et la licence Ruby[8].
Ruby est fourni avec irb, un interpréteur de commandes interactif pour tester en profondeur le fonctionnement du langage. Il existe une version web d'irb pour tester Ruby dans un navigateur[9].
Depuis le , le développement de Ruby (1.9) est basé sur l'interpréteur YARV écrit par Koichi Sasada[10]. Ce nouvel interpréteur apporte un gain notable en performances[11].
Outre YARV, il existe plusieurs autres interpréteurs Ruby[11] :
La version 2.0 permet de créer des applications graphiques pour macOS et iOS.
Ruby possède une interface de programmation en langage C qui lui permet d'être intégré au sein d'autres logiciels. Ruby est notamment utilisable dans :
Le logiciel de création de jeu vidéo RPG Maker intègre dans ses versions XP et VX une bibliothèque nommée RGSS, Ruby Game Scripting System permettant l'usage de scripts en Ruby.
Il existe de nombreuses bibliothèques de fonctionnalités adjoignables au langage. Le dépôt historique de ces bibliothèques est le Ruby Application Archive (RAA)[20]. Il contient des fonctionnalités supplémentaires pour Ruby comme des bibliothèques de classes et de modules, mais aussi des extensions permettant d'utiliser des bibliothèques tierces.
Le RAA contient également des logiciels écrits en Ruby. Parmi ces logiciels on trouve notamment Rubygems qui est un outil d'empaquetage et d'installation pour les extensions Ruby[21]. Il permet de déployer rapidement des bibliothèques et des programmes Ruby.
La base de données de gems Rubygems est devenue avec le temps la référence en stockage de bibliothèques pour Ruby (plus de 49 milliards de téléchargements[22]) au travers de l'outil Bundler (également développé en Ruby), les dépendances d'un projet sont téléchargées par défaut depuis Rubygems.
Le classique Hello world :
puts 'Hello World!'
Utilisation des objets :
# Tout est objet, même les nombres:
-199.abs # 199
'ruby is cool'.length # 12
'Rick'.index 'c' # 2
"Nice Day Isn't It?".downcase.split(//).sort.uniq.join # " '?acdeinsty"
Utilisation de mixin et de l'héritage :
module AnimalSkills
def eat
puts "I'm eating !"
end
def move
puts "I'm moving !"
end
def express; puts "I'm expressing !" end
end
class Animal
include AnimalSkills # mixin
@@name = 'an animal' # variable de classe
def initialize(size, weight, color) # initialisation des variables d'instance
@size = size.to_i
@weight, @color = weight.to_i, color.to_s
end
def describe
puts "I'm #{@@name} !"
puts "I'm #{@size} meter tall, I weigh #{@weight} kilograms and I'm " + @color
end
end
class Zebra < Animal # héritage
@@name = 'a zebra' # rédéfinition de la variable de classe: maintenant tous les animaux sont des zèbres !
def initialize(size, weight, color = 'black and white') # surcharge
super # appel de la méthode de la classe mère (Animal)
end
end
z = Zebra.new(1, 50)
z.describe # => I'm a zebra ! / I'm 1 meter tall, I weigh 50 kilograms and I'm black and white
z.eat # => I'm eating !