Technologies du commerce électroniquedift2035/e2009/cours/introduction_a_ru… · Comme Smalltalk,...

Post on 17-Oct-2020

5 views 0 download

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