Ruby
Programmation Orientée Objet
En Ruby, TOUT est objet, même les opérateurs. On peut donc appliquer à chaque élément un certain nombre de méthodes comme dans les exemples suivants :
# Longueur d'une chaîne de caractères
"Hello World".length # => 11
# Index d'un caractère spécifique
"Ruby".index("b") # => 2
# Valeur absolue d'un nombre
-2005.abs # => 2005
# Conversion d'une chaîne de caractères en entier
"22".to_i # => 22
# Conversion d'un entier en chaîne de caractères
443.to_s # => "443"
Classes
Voici un exemple de définition de classe :
class MaClasse [ < ClasseParent ]
def initialize
...
end
[public | private | protected]
def ma_methode
...
end
end
Quelques explications :
- Une classe peut hériter d'une et une seule autre classe maximum via l'opérateur
<
- Une méthode est délimitée par les mots-clé
def
etend
. - La méthode
initialize
permet de défninir le constructeur de l'objet. - La visibilité d'une méthode peut être sélectionnée parmi les valeurs suivantes :
public
,private
ouprotected
.
Un objet ainsi défini peut ensuite être utilisé de la façon suivante :
# Instanciation
obj = MaClasse.new( ... )
# Appel d'une méthode
obj.ma_methode
Getters & Setters
Il existe plusieurs façons de déclarer des getters et setters en Ruby : une première méthode "classique" ou une méthode nettement plus simple :
# Définition d'un getter
def var1
return @var1
end
# Autre méthode
attr_reader :var1
# Définition d'un setter
def var1=( var1 )
@var1 = var1
end
# Autre méthode
attr_writer :var1
# Définition d'un accesseur (getter et setter)
attr_accessor :var2
Comme on peut le constater, les méthodes attr_ permettent de déclarer très simplement des getters et/ou setters en limitant nettement le nombre de lignes de codes produit.
L'utilisation des getters et setters est également très simple :
# Affectation d'une valeur
obj.var1 = 10
# Récupération d'une valeur et affichage
puts obj.var1
Modules
Un module a pour principale utilité de permettre de défnir des méthodes et des constantes.
Voici un exemple d'utilisation du module Math inclus dans la librairie standard :
Math.sqrt(2) # => 1.41421
Math::PI # => 3.14159
# Autre méthode d'appel
include Math
sqrt(2) # => 1.41421
PI # => 3.14159
Pour créer un module, on procède ainsi :
# Définition d'un module
Module NomModule
def NomModule.nomMéthode
...
end
end
# Appel d'un module
class MaClasse
include MonModule
...
end
Exceptions
En Ruby, la gestion des exceptions s'effectue via une syntaxe spécifique. Cependant, cette gestion est similaire a bien d'autres langages orientés objet. :
begin
... # Code susceptible de lever une exception
rescue TypeException => e then
... # Code exécuté si une exception est levée
else
... # Code si aucune exception n'a été levée
ensure
... # Code exécuté dans tous les cas
end
Il n'est pas obligatoire d'utiliser tous les mots-clés contenus dans le bloc begin
- end
. Cependant, rescue
doit toujours précéder ensure
.
Pour faire un parallèle avec un langage plus "classique", voici une comparaison des termes utilisés en Ruby et en Java :
Ruby | Java |
---|---|
begin | try |
rescue | catch |
ensure | finally |