Technologies du commerce électroniquedift2035/e2009/cours/introduction_a_ru… · Comme Smalltalk,...
Transcript of Technologies du commerce électroniquedift2035/e2009/cours/introduction_a_ru… · Comme Smalltalk,...
Technologies du commerce
électroniqueélectronique
Le langage de programmation Ruby
Plan (première partie)
� Le langage Ruby
� Comment écrire un programme Ruby
� Instructions d'affichage � Instructions d'affichage
� Lecture de valeur du clavier
� Fonctions
� Structures de contrôle
2
C'estC'est quoi Ruby ?quoi Ruby ?
3
C'estC'est quoi Ruby ?quoi Ruby ?
Ruby est …
“… programming … programming language with language with a focus on simplicity and a focus on simplicity and
4
a focus on simplicity and a focus on simplicity and productivity. It has an elegant productivity. It has an elegant syntax that is natural to read and syntax that is natural to read and easy to write.”easy to write.”
Source : http://www.ruby-lang.org
Le langage Ruby
� Open source� Interprété � Typage dynamique � Optimisé pour les développeurs� Optimisé pour les développeurs
� Facile à lire et à écrire � Puissant � On prends du fun à développer avec Ruby
� Tout est objet� Pas de type primitifs
5
Le langage Ruby (suite)
� Procédural� Modulaire� Purement orienté objet (tout est objet)� Offre quelques concepts de la programmation � Offre quelques concepts de la programmation fonctionnelle
� Bien adapté pour la méta-programmation� Facilité l'écriture de langages spécifiques au domaine (DSL)
6
Interpréteurs Ruby
� Ruby 1.8.x
� Le plus utilisé (implémentation en C)
� Ruby 1.9.1
� Implémentation plus efficace (implémentation en C)
� JRuby
� Ruby sur la machine virtuelle de Java� Ruby sur la machine virtuelle de Java
� MacRuby
� Portage de Ruby pour s’exécuter sur la machine virtuelle de Objective-C de Mac OS X
� IronRuby
� Ruby dans l’environnement .NET
� Rubinuis
� Interpréteur Ruby ... écrit (presque) complètement en Ruby
7
Interpréteurs Ruby
Code Ruby
Machine virtuelle ou physique
Interpréteur
8
Comment écrire un programme Ruby ?
� Créer un fichier avec extension .rb et ajouter des instructions Ruby à l'intérieurdes instructions Ruby à l'intérieur
9
Les commentaires
� Deux façons différentes pour insérer les commentaires dans du code Ruby � # ceci est un commentaire sur une seule ligne� # ceci est un commentaire sur une seule ligne
� =begin
commentaire sur
plusieurs lignes
=end
10
Instructions d'affichage
� puts "puts ajoute des "
� puts "sauts de ligne."
� print "print n'ajoute pas"
� print " de sauts de ligne."
11
Pas de point virgule à la fin d'une
instruction
Lecture de valeur à partir du clavier
� puts "What is your name?"
� name = STDIN.gets
� puts "Salut "+name� puts "Salut "+name
� Ou bien :
� puts "Salut #{name}"
12
Fonctions � Déclaration d'une fonction :
def welcome(nom)
puts "Salut #{nom}"
end
� Ou bien : def welcome nom def welcome nom
puts "Salut #{nom}"
end
� Appelle de la fonction :welcome("Toto")
� Ou bien : welcome "Toto"
13Les parenthèses sont optionnelles
Fonctions (suite)
� Avec retour de valeur :def multiply(a,b)
product = a * b product = a * b
return product
end
� puts multiply(2,3)
14
Fonctions (suite)
� Avec retour de valeur … sans utiliser le mot clé return :def multiply(a,b)
product = a * b # la dernière valeur calculée sera retournéeproduct = a * b # la dernière valeur calculée sera retournée
end
� puts multiply(2,3)
15
Fonctions (suite)
� Avec retour de valeur … sans utiliser le mot clé return et sans variable intermédiaire :def multiply(a,b) def multiply(a,b)
a * b
end
� puts multiply(2,3)
16
Fonctions (suite)
� Paramètres optionnels :def test(a=1,b=2,c=a+b)
puts "#{a},#{b},#{c}" end end
� Appel de la méthode : � test # => 1,2,3
� test 5 # => 5,2,7
� test 4, 6 # => 4,6,10
� test 3, 4, 6 # => 3,4,6
17
Fonctions (suite)
� Paramètres optionnels :def test(a=1,b=2,c=a+b)
puts "#{a},#{b},#{c}" end end
� Appel de la méthode : � test # => 1,2,3
� test 5 # => 5,2,7
� test 4, 6 # => 4,6,10
� test 3, 4, 6 # => 3,4,6
18
Fonctions (suite)
� Retour de plusieurs valeurs : def getConstAndTaxes
chaine = "salut"
taxes = 30
return chaine , taxesreturn chaine , taxesend
� Appel de la méthode : � cost, taxes = getConstAndTaxes
� puts "cost = #{cost}, taxes = #{taxes}"
19
Structures de Structures de contrôlecontrôle
20
Structures de Structures de contrôlecontrôle
Affectations
puts "----Chaque affectation retourne la valeur affectée "puts a = 4 #=> 4
puts "----Les affectations peuvent être enchaînées"puts a = b = 4 #=> 4puts a+b #=> 8
puts "----Racourcis"puts a += 2 #=> 6puts a += 2 #=> 6puts a = a + 2 #=> 8
puts "----Affectations parallèles"a, b = b, aputs a #=> 4puts b #=> 8
puts "----Décomposition d’un tableau"array = [1,2]a, b = *arrayputs a #=> 1puts b #=> 2
21
Instructions conditionnelles
puts "----if/else"if (1 + 1 == 2)puts “Un plus Un est égal à deux"
elseputs “Pas de chance !"
end
puts "----if et unless"
If condition1# instructions
elsif condition2#instructions
else# instructions
end
puts "----if et unless"puts “La vie est belle !" if (1 + 1 == 2)puts “Surprenant !" unless (1 + 1 == 2)
unless (1+1 ==2) puts “Faux”
end
puts "---- operateur ternaire "puts (1 + 1 == 2)? ‘Vrai‘ : ‘Faux'
unless condition# instructions end
objet = (condition)? valeur1 : valeur2
22
instructions unless conditioninstructions unless condition
instructions if conditioninstructions if condition
Instructions conditionnelles (suite 1)
case objet
end
case objetwhen valeur1
# code Ruby when valeur2#code Ruby
else # code Ruby
end
case objetwhen valeur1…valeurN1
# code Ruby when valeur2…valeurN2#code Ruby
when valeur3#code Rubyendend
end
#code Rubyelse # code Ruby
endobjet = case
else
end
objet = casewhen condition1
# retourner une valeur à objet when condition2# retourner une autre valeur à objet
else # retourner une autre valeur à objet
end
23
a= 2
r = casewhen a==1
"a est égal à 1"
when a==2
"a est égal à 2"
Instructions conditionnelles (suite 2)
a= 2
case awhen 1
p "a est égal à 1"
when 2..10"a est égal à 2"
else
"ce n\’est ni 1 ni 2"
end
puts r
p "a ente 2 et 10"
else
p "ce n\’est ni 1 ni entre 2 et 10"
end
24
Structures d’itération
puts "---- while 1"while (i < 10)i *= 2
endputs i #=> 16
puts "---- while 2"
while condition# instructions end
puts "---- while 2"i *= 2 while (i < 100)puts i #=> 128
puts "---- while avec begin/end"begini *= 2
end while (i < 100)puts i #=> 256
instructions while (condition)
end while(condition)
begin #instructions
end while(condition)
25
Structures d’itération (suite 1)
puts "---- until"i *= 2 until ( i >= 1000)puts i #=> 1024
puts "---- loop"loop do
i *= 2
instructions until (condition)
loop doi *= 2break if (i >= 4000)
endputs i #=> 4096
puts "---- times"4.times doi *= 2
endputs i #=> 65536
loop dobreak condition# instructions end
end
number.times do # instructions
end
26
Structures d’itération (suite 2)
puts "---- array"r =[1,2,3,4]for i in rp i
endputs "---- intervalle” for i in 1..4p i
for i in intervalle# instructions
end
for i in array# instructions
end
p iendputs "---- each” [1,2,3,4].each |i| do
p iendputs "---- each” (1..4).each |i| do
p iend
endend
array.each |i| do# instructions
end
intervalle.each |i| do# instructions
end
27
Types de base de Ruby
� Chaînes de caractères
� Nombres
Tableaux � Tableaux
� Tables de hachage
� Symboles
28
Types Ruby :Types Ruby :
29
Types Ruby :Types Ruby :
NombresNombres
Nombres : Fixnum et Bignum
� Dans Ruby, les nombres sont des objets
� 123456 : Fixnum
� 123_456_789_123_456_789 : Bignum
� Les soulignements sont ignorés
� 123_456 : 123456
� 12_34_56 : 123456
� 123_456_789_123_456_789 : 123456789123456789
30
Types Ruby :Types Ruby :
ChaînesChaînes de de caractèrescaractères
31
ChaînesChaînes de de caractèrescaractères
Types de base de Ruby
� Une façon de créer une chaîne de caractères en Ruby consiste à utiliser les simples ou doubles guillemets pour créer ce qu’on appelle une chaîne littérale � puts "Hello World!"
� puts ‘Hello World!’� puts ‘Hello World!’
� Les doubles guillemets permettent d’intégrer les variables ou du code Ruby à l’intérieur d’une chaîne littérale. Ceci est communément référencé comme de l’interpolation� nom = “Toto”
puts “Votre nom est #{nom}“ # Votre nom est Toto
puts 'Votre nom est #{nom}' # Votre nom est #{nom}
32
Affichage de chaînes dans la sortie standard
avec puts et print
� puts : insère automatiquement une nouvelle ligne après chaque texte � >> puts "Say", "hello"
Sayhellohello
� print : n’insère une nouvelle ligne que si spécifié explicitement� >> print "Say", "hello", "\n“, “again”
Sayhello
again
� Remarque : � La méthode ‘p’ est une abréviation de la méthode ‘puts’
33
Types Ruby :Types Ruby :
34
Types Ruby :Types Ruby :
Tableaux Tableaux
Tableaux : Array
� Un tableau est une collection de données pouvant être insérées/retrouvées via un indice
� Dans Ruby les tableaux peuvent contenir des objets de différents types différents types
� Déclaration d’un tableau � mon_tableau1 = Array.new
� mon_tableau2 = []
� mon_tableau3 = ["un élément", 2, "un troisième élément"]
35
Tableaux : Array (suite 1)
� Accès aux éléments d’un tableau � puts tableau[0]� puts tableau[0]� tableau[0] = “Salut”
36
La notation %
� %w : cause le découpage d’une chaîne de caractères en éléments d’un tableau à la rencontre des espacesen éléments d’un tableau à la rencontre des espaces� %w(a b c) : ["a", "b", "c"]
37
Types Ruby : Types Ruby :
38
Types Ruby : Types Ruby :
Tables de Tables de hachagehachage
Tables de hachage : Hash
� Les tables de hachage sont la généralisation des tableaux � Un tableau indexe les éléments par des entiers (0,1, 2, ...)
� Les clés sont des entiers� Les clés sont des entiers
� Avec une table de hachage, on peut spécifier les objets qui vont jouer le rôle de clés
� Dans une table de hachage � Chaque clé est présente au plus une fois
39
Tables de hachage : Hash (suite)
� Création d’une table de hachage� table_hachage1 = Hash.new
� table_hachage2 = {}
� table_hachage3 = {"a" => 1, "b" => 2, "c" => 3} table_hachage3 = {"a" => 1, "b" => 2, "c" => 3}
� Accès aux éléments d’une table � puts table_hachage3[“a”]
� table_hachage3[“d”] = “4”
40
Types Ruby :Types Ruby :
Les Les symbolessymboles
41
Les Les symbolessymboles
C’est quoi un symbole ?
� Un symbole en Ruby est la représentation interne d’un nom
� C’est une classe dans le langage Ruby� :mon_symbole.class #=> Symbol� :mon_symbole.class #=> Symbol
� Un symbole se construit en précédent un nom de deux points� :mon_symbole
42
C’est quoi un symbole ? (suite)
� Un symbole est � atomique : non décomposable
� immutable : ne peux être transformé en un autre type
� et unique : toutes les références à un symbole référent au même � et unique : toutes les références à un symbole référent au même objet
� :mon_symbole.equal?(:mon_symbole) #=> true
� “ma_chaine".equal?("ma_chaine") #=> false
43
Symboles vs. Chaînes de caractères
� Les symboles sont interchangeables avec les chaînes de caractères� La où on peut utiliser une chaîne de caractère, on peut utiliser un symbole
� Pourquoi utiliser un symbole à la place d’une chaîne ?� Si la même chaine est répétée dans un code 10000 fois, ça coutera 10000 fois
plus en espace mémoire de la chaîne
� Si par contre on utilise un symbole 10000 fois, il n’engendrera l’occupation que
44
� Si par contre on utilise un symbole 10000 fois, il n’engendrera l’occupation que de l’espace mémoire d’un symbole seulement
� Autres raisons d’utiliser les symboles à la place des chaînes de caractères� Les symboles sont plus faciles à saisir que les chaînes de caractères
� La différence de syntaxe permet de distinguer les clés des valeurs (cas des tables de hachage)
� :name => ‘Toto‘
Symboles vs. Chaînes de caractères (suite)
� 1000.times dosome_object.getProperty("name")
end
� La chaîne de caractères “name” sera créée 1000 fois
45
La chaîne de caractères “name” sera créée 1000 fois
� 1000.times dosome_object.getProperty(:name)
end
� Le symbole :name ne sera créé qu’une seule fois
Où sont utilisés les symboles ?
� Les symboles sont souvent utilisés en tant que :
� Clés de tables de hachage (:name => 'Brian', :hobby => 'golf')
� Paramètres de méthodes (:name, :title)
� Noms de méthodes (:poster_un_commentaire) � Noms de méthodes (:poster_un_commentaire)
� Pour faire référence au nom d’une méthode, on peut utiliser un symbole
� Car en définissant une méthode, un symbole est créé et porte le même nom que la méthode en question
46
Plan (deuxième partie)
� Les objets
� Les classes
� Méthodes
� Paramètres, visibilité, méthode avec “!” � Paramètres, visibilité, méthode avec “!”
� Variables
� Modules
� Opérateurs Ruby
� Convention de nommage dans Ruby
47
L’objetL’objet dansdans RubyRuby
48
L’objetL’objet dansdans RubyRuby
Dans Ruby tout est objet
� Comme Smalltalk, Ruby est un langage purement orienté objet � Tout est objet
� Contrairement à d’autres langages tel que C#, C++ et Java qui sont des langages hybrides langages hybrides � Qui divisent le monde en types primitifs et objets
� L’approche hybride fournit une meilleure performance pour quelques applications, mais l’approche purement orientée objet est plus consistante et plus facile à utiliser
� Il n’est pas nécessaire d’envelopper une variable de type primitif dans un objet pour pouvoir l’utiliser en tant qu’objet
49
C’est quoi un objet ?
� Un objet est une entité qui peut effectuer trois choses différentes� Un objet peut contenir des données, incluant des références à d’autres � Un objet peut contenir des données, incluant des références à d’autres
objets
� Un objet peut contenir des méthodes qui sont des fonctions qui ont un accès spécial aux données de l’objet
� Une méthode d’un peut appeler/exécuter d’autres méthodes
50
Variables et objets
� Créer un objet de type chaîne de caractères contenant le texte "Stephen Colbert“
>> comedien = "Stephen Colbert“
� Nous avons aussi dit à Ruby d’utiliser la variable "comedien" pour faire référence à cet objet qui est sauvegardé en mémoire
Stephen Colbertcomedien
51
Les classes RubyLes classes Ruby
52
Les classes RubyLes classes Ruby
Classes Ruby
� Tout objet en Ruby a une classe
� Pour retrouver la classe d’un objet, on appelle la méthode class � “Ceci est une chaîne de caractères".class #=> String� “Ceci est une chaîne de caractères".class #=> String
� 9.class #=> Fixnum
� [“Ceci",“est",“un",“tableau"].class #=> Array
� {:ceci => “est", :une => "hash"}.class #=> Hash
� :symbole.class #=> Symbol
53
Définir une classe
� Utiliser le mot clé class
class Chocolat� class Chocolat
# code de la classe à mettre iciend
54
Instanciation d’objets
� Un objet est créé via un processus appelé instanciation
� Dans Ruby ceci est principalement réalisé à travers l’appel à la méthode de classe new� objet1 = MaClasse.new(parametres)
� Cette méthode crée l’objet en mémoire et par la suite délégue le contrôle� Cette méthode crée l’objet en mémoire et par la suite délégue le contrôleà la méthode initialize de la classe si elle est présente
� La méthode itnitialize est le constructeur de la classe� class MaClasse
def initialize(nom)
@nom = nomend
endobjet = MaClasse.new(“Toto”)
55
Méthodes
� Déclaration d’une méthode� class UneClasse
def nom_method(parametres)
#code de la méthode
end
endend
� Appelle d’une méthode : � À partir d’un objet :
� objet.nom_methode(parametres)
� objet.nom_methode parametres
� Méthode indépendante� nom_methode(parametres)
� nom_methode parametres
56
Les classes Ruby : Les classes Ruby : HéritageHéritage
57
Héritage
� Une classe hérite des fonctionnalités (comportements) et des variables (états) d’une superclasse � Une superclasse est appelée classe parente ou classe de base
� Ruby ne supporte pas l’héritage multiple � Une classe en Ruby peut avoir une seule super classeUne classe en Ruby peut avoir une seule super classe
� Toutes les variables et méthodes sont héritées par une classe enfant de sa superclasse
� Exemple � class ClasseEnfant < ClasseParent
end
58
Redéfinition de méthodes
� Une classe hérite des méthodes (comportements) et des variables (états) d’une superclasse
� Si une classe redéfinit une méthode de sa superclasse, on peut toujours appeler la méthode de la superclasse en utilisant le mot clé super
59
Redéfinition de méthodes (suite)
� Exemple
class ParentClass
def a_methodputs 'b'
endendend
class ChildClass < ParentClassdef a_methodsuper # appelle la méthode a_method de ParentClassputs 'a'
endend
instance = ChildClass.newinstance.a_method
60
Variables Variables
61
Variables Variables
Types de variables
� Variables locales
� Variables d’instance
� Variables de classe� Variables de classe
� Variables globales
62
Types de variables
� Variables locales
� Variables d’instance
� Variables de classe� Variables de classe
� Variables globales
63
Variables locales
� Une variables locale est accessible seulement dans le contexte où ellea été définie� Souvent à l’intérieur d’une méthode
� Exemple
i0 = 1loop {i1 = 2print defined?(i0), "\n" # i0 a été initialisée à l’extérieur du blcokprint defined?(i1), "\n" # i1 a été initialisée dans le block courantbreak
}print defined?(i0), "\n" # i0 a été initalisée dans ce block print defined?(i1), "\n" # nil; i1 n’est pas accessible
64
Types de variables
� Variables locales
� Variables d’instance
� Variables de classe� Variables de classe
� Variables globales
65
Variables d’instance
� Une variables dont le nom commence par ‘@’� @nom
� Une variable d’instance, appartient à l’objet lui même� Une variable d’instance, appartient à l’objet lui même� Elle est visible à l’intérieur des méthodes de l’objet seulement
� Les variables d’instance non initialisées ont la valeur nil
66
Types de variables
� Variables locales
� Variables d’instance
� Variables de classe� Variables de classe
� Variables globales
67
Variables de classe
� Une variables dont le nom commence par ‘@@’� @@nom
� Les variables de classes sont partagées par toutes les instances de la classe, de la superclasses et des sous-classes de la classe, de la superclasses et des sous-classes
� Une variable de classe est accessible aux niveau de toutes les méthodes de la classe
68
Variables de classe (suite)
� Exemple
class Polygon
@@sides = 10
def self.sides
@@sides@@sides
end
end
class Triangle < Polygon
@@sides = 3
end
# Class variables are shared in the class hierarchy
puts Triangle.sides # => 3
puts Polygon.sides # => 3
69
Types de variables
� Variables locales
� Variables d’instance
� Variables de classe� Variables de classe
� Variables globales
70
Variables globales
� C’est une variable dont le nom commence par '$‘� $variable_globale
� Sa portée est globale
� Elle peut être accédée de n’importe quelle place dans le programmeprogramme
� Les variables globales sont à utiliser avec précaution� Dangeureuses car elles peuvent être accédées/modifiées n’importe où
� La surutilisation des variables globales rend la détection de bug difficile
71
MéthodesMéthodes
72
MéthodesMéthodes
Méthode de classe vs. Méthode
d’instance
� Une méthode de classe est accessible sans instanciation� MaClasse.methode_classe
� Une méthode d’instance n’est accessible qu’après instanciation� mon_objet = MaClasse.new
mon_objet.methode_d_instance
� Une classe peut contenir des méthodes de classe et/ou des méthodes � Une classe peut contenir des méthodes de classe et/ou des méthodes d’instance
� Les méthodes de classes sont définies en utilisant le mot clé self� self.def nom_methode_classe
# code ruby
end
� def self.nom_methode_classe
# code ruby
end
73
Méthode de classe vs. Méthode
d’instance (exemple)
class MyClass
def self.classe_method
#code
end
def my_instance_method
#code
end
end
MyClass.classe_method
my_object = MyClass.new
my_object.my_instance_method
74
Méthodes: Méthodes: Visibilité Visibilité
75
Méthodes: Méthodes: Visibilité Visibilité
Déclarer la visibilité
� Par défaut, toutes les méthodes des classes Ruby sont publiques � Accessibles pour tout le monde
� Si nécessaire, cet accès peut être restreint avec � Si nécessaire, cet accès peut être restreint avec les mots clés � private� protected
76
Visibilité : private & protected
� Les parenthèses autour des paramètres peuvent être omises
� Si private ou protected sont utilisées sans paramètres, toutes les méthodes qui vont suivre ces appels seront privées ou protégés (suivant le cas)
� Une méthode privée peut être appelée seulement à l’intérieur du même objet
� Une méthode protégée peut être appelée à l’intérieur du même objet ou par des objets de la même classe et de ses sous-classespar des objets de la même classe et de ses sous-classes
class Exampledef methodAendprivate # toutes les méthodes qui vont suivre seront privéesdef methodP1enddef methodP2end
end
77
Déclarer la visibilité : private
� La méthode private peut être invoquée avec des paramètres� Seulement les méthodes indiquées dans les paramètres seront privées
class Exampledef methodAendend
def methodPend
private :methodP # change la visibilité de methodP à privateend
78
MéthodesMéthodes ::
MéthodeMéthode avec ! (Bang) avec ! (Bang)
79
MéthodeMéthode avec ! (Bang) avec ! (Bang)
Méthodes avec ! (Bang)
� Dans Ruby, les méthodes dont les noms se terminent pas un point d’exclamation modifient l’objet appelant
� Si par contre une méthode ne contient pas le point d’exclamation, alors l’objet appelant n’est pas modifié
� Exemple � nom = “Toto”
� nom2= nom.upcase # contenu de nom = “Toto”, et nom2 : “TOTO”
� nom.upcase! # nom sera : “TOTO”
80
Modules Modules
81
Modules Modules
C’est quoi un Module ?
� Dans Ruby, les modules peuvent regrouper des méthodes, des variables et des classes
� Un module se comporte comme une classe sauf qu’un module � Un module se comporte comme une classe sauf qu’un module ne peut pas être instancié
� Les modules est un mécanisme efficace pour l’extension de classes/objets
82
Déclaration d’un module
module NotrePremierModule
# methodes# variables# variables# classes
end
83
Mixage (Mix-in)
� Un module peut être inclus dans une classe en utilisant le mot clé include suivi du nom du module
module MixAlotdef say_what?"hello"
endendend
class Mcinclude MixAlot
# ... method say_what? est disponibleend
a = Mc.newa.say_what? # hello
84
Importer un module
� Si un module est déclaré dans un autre fichier, on doit en premier lieu importer ce module avec le mot clé require avant de pouvoir l’utiliser
# module MixAlot sauvegardé dans un fichier nommé : mixalot.rb
module MixAlotdef say_what?def say_what?"hello"
endend
# et la classe Mc sauvegardée dans un fichier nommé mc.rb# (dans le même répertoire )require “mixalot”class Mcinclude MixAlotend
85
OpérateursOpérateurs Ruby Ruby
86
OpérateursOpérateurs Ruby Ruby
Opérateurs Ruby
� a+=b : a = a + b
� a-=b : a = a - b
� a*=b : a = a * b� a*=b : a = a * b
� a/=b : a = a / b
� a and b : et logique vaut true ou false
� a or b : ou logique vaut true ou false
87
Opérateurs Ruby (suite)
� a || b : a est évalué en premier. � Si a est différent de nil et de false, alors l’évaluation s’arrête et l’expression retourne a
� Sinon c’est b qui est retourné� Sinon c’est b qui est retourné
� Souvent utilisé pour retourver une valeur par défaut lorsqu’une variable n’a pas été initialisée
� a ||= b : équivalent à a = a || b
88
Conventions de Conventions de
89
Conventions de Conventions de
nommage nommage
Conventions de nommage
� Fichier Ruby : extension .rb� monprogramme.rb
� Exécuter un fichier Ruby � >>ruby monprogramme.rb
� Noms de classes et de modules : minuscules +majuscules� MaClasse� MonModule
� Méthodes : minuscules + soulignés� ma_premiere_methode
� Variables locales: idem que les méthodes� ma_premiere_variable
� Variables d’instance : @ comme préfixe au nom de la variable� @ma_variable_d_instance
90
Conventions de nommage (suite)
� Variables de classe : @@ comme préfixe au nom de la variable� @@ma_variable_de_classe
� Variables globales : $ comme préfixe au nom de la variable� Variables globales : $ comme préfixe au nom de la variable� $ma_variable_globale
� Constantes : majuscules + soulignes� MA_CONSTANTE
91
Méthodes récursives
� Une méthode est dite récursive si elle s'appelle elle même
� Example
� Calcul du factoriel d'un nomber
def factoriel(n)
if (n > 1)
return n * factoriel (n-1)return n * factoriel (n-1)
else
return 1
end
end
Ou :
def factoriel(n)
(n > 1) ? (n * factoriel (n-1)) : 1
end
92
Références
� Ruby à partir du navigateur
� http://tryruby.hobix.com/
� Vidéos sur les concepts de base de Ruby
� http://www.tekniqal.com/
� Huw Collingbourne, The book Of Ruby. 2009.
� http://www.sapphiresteel.com/The-Book-Of-Ruby� http://www.sapphiresteel.com/The-Book-Of-Ruby
� Cours de Sang Shin
� http://www.javapassion.com/rubyonrails/
� Cours introductifs à ruby
� http://www.techotopia.com/index.php/Ruby_Essentials
� Tutorial ruby avec des exemples
� http://www.fincher.org/tips/Languages/Ruby/
� Why’s (poignant) guide to ruby. Livre gratuit sous forme d’une bande dessinée
� http://poignantguide.net/ruby/whys-poignant-guide-to-ruby.pdf
93