Qui, Quand, Où ?

I named it Ruby---after the precious red stone--- and released it to the public in 1995.

Yukihiro Matsumoto, a.k.a. ``Matz''

On peut aussi y voir une référence à Perl

Utilisation

Au Japon ce language est plus populaire que Perl ou Python

Installation sous Debian / Ubuntu

sudo apt-get install ruby
sudo apt-get install irb
utilisation de ruby gems possible
Synaptics -> Ruby (1.8 par défaut)

Ruby <-> IRB

Ruby est l'interpréteur chargé d'exécuter le code que nous écrirons plus tard

IRB est un "Live" interpreter, il permet de tester le code au fur et à mesure qu'on le tape
On peut le voir comme un shell en Ruby

Une variable

fondant = "Praliné fondant"
nombre = 42
tableau = [1,2,3,5,7]
hash = { "cle" => "valeur", "key" => "value"}

Une variable

opérateurs de comparaison
> < => =< == !=
algèbre booléenne
and, or, not, true, false

Les symboles

On aurait pu écrire
hash = { :cle => "valeur", :key => "value"}

au lieu de
hash = { "cle" => "valeur", "key" => "value"}

Les symboles

Chaque clé format chaîne de caractère pointe vers une zone mémoire différente, même si elles sont identiques.

Un symbole permet de stocker dans un emplacement mémoire unique toutes les clés identiques.
Souvent utilisé dans Ruby on Rails

Exemples de base

puts "Hello World"
=> "Hello World"
gets chaine
# attend une entrée

Exemples de base

puts chaine.capitalize
# majuscule en première lettre
puts chaine < "foobar"
#true ou false en fonction

Exemples de base

Bien entendu toute l'arithmétique habituelle et des fonctions de manipulations de chaîne en veux-tu, en voilà

.upcase, .downcase, .swapcase, .chomp, .chop
puts ("Hello".rjust(80))

Qu'est ce que c'est que ça

En Ruby, tout est objet

puts ("Hello".rjust(80))

Un objet est une instance d'une classe
Une praline est une instance d'un moule

Méthodes

"Sur" des objets on peut utiliser des méthodes
praline.croquer(), praline.avaler

Ces méthodes peuvent prendre des arguments
praline.couper(3) couper en 3 morceaux

Variables membres

Les objets contiennent aussi ce qu'on appelle des variables membres.

Deux variables membres de la praline serait par

exemple :

une variable booléenne biscuit
une chaîne de caractère chocolat

Le principe de l'orienté objet

Lier les actions (méthodes) et les propriétés (variables membres) à l'objet qui les concerne

La définition de la structure de l'objet se fait dans une classe, ses "valeurs" sont spécifiées à l'instanciation de l'objet (quand on moule la praline).

Tout est objet ?

En Ruby, tout est objet

EXEMPLES !

Tout est objet ?

3.to_s
=> "3"

Tout est objet ?

("24".to_i + 3).to_s
=> "27"

Tout est objet ?

([1,3,2].sort.last.to_s + " pralines").reverse
=> "senilarp 3"

Méthode de classe

Qu'est ce qu'une méthode de classe ?

Une méthode que l'on peut appeler sur une classe, sans qu'aucune instance de cette classe n'existe,
sans qu'aucun objet de cette classe n'existe

Méthode de classe

Time.now
=> Tue Jul 04 15:07:03 CEST 2006

Méthode de classe

Praline.nombre
=> "42 pralines créées"

Les blocs conditionnels

Tout comme dans la plupat des languages, on retrouve les

if elseif else
for
while

Les blocs conditionnels

Pas d'accolades, pas d'indentation

if (condition)
	code ...
end
#end finit un bloc

Les itérateurs

Un itérateur est une méthode standard pour parcourir une collection de donnée une liste, une hash table, une pile, etc ...

Les itérateurs

[1,2,3].each do |i|
	puts i.to_s
end
puts "Piano !"

Les itérateurs

hash = 	{	:pomme => "rouge", 
		:raisin => ["noir", "blanc"]
	}
hash.each do |key, val|
	puts "#{key} de couleur #{val}"
end

Les itérateurs

On va parcourir la hash table et obtenir

raisin de couleur noirblanc
pomme de couleur rouge

Les itérateurs

Un itérateur "marrant"

3.times do
	puts "Hello World"
end

Tableaux

On peut utiliser une méthode particulière sur le type tableau

fruits = ["pomme", "poire", "raisin"]
puts fruits
	=> 	pomme
		poire
		raisin

Tableaux

pruts fruits.to_s
	=> pommepoireraisin
puts fruits.join(' - ') + ';'
	=> pomme - poire - raisin;

Tableaux

Et les grands classiques

fruits.last, fruits.length, fruits.pop,
fruits.push ("abricot"), ...

Fonctions

Pour une écrire une fonction, rien de plus simple

def fonction(arg1, arg2)
	code ...
	return arg1*arg2
end
puts fonction("poire", 3)
	=> poirepoirepoire

Fonctions

Encore une fois le mot clé 'end' finit le bloc 'return' spécifie la valeur retournée
et 'def' ... anonce une définition

"une chaine"*3 ... vous avez compris ;)

Fonctions

def fonction(arg1, arg2)
puts fonction("poire", 3)

ou

def fonction arg1, arg2
puts fonction "poire", 3

Fonctions

il est conseillé de ne pas laisser d'espace entre le nom de fonction et la parenthèse ouvrante des arguments

fonction("poire", 3) et pas fonction ("poire", 3)

Fonctions

variable locale != variable globale toute variable déclarée à l'intérieur du bloc de
la fonction est locale à la fonction
la fonction n'accède pas aux variables externes
=> passage d'arguments

Fonctions

il est également possible de passer ou retourner un tableau dans une fonction

pratique pour passer une structure de donnée complète d'un coup ou récupérer de multiples informations d'un coup en valeur de retour

Orienté Objet

Définition de la classe

class Praline
	@biscuit
	@chocolat
	def initialize (bis, choc)
		@biscuit = bis
		@chocolat = choc
	end

Orienté objet

	def afficher
		puts "au chocolat #{@chocolat}"
		puts "et au biscuit" if @biscuit
	end
end

Orienté objet

praline = Praline.new(false, "noir")
praline2 = Praline.new(true, "brun")

praline.afficher
puts "-"*20
praline2.afficher

Orienté objet

résultats

au chocolat noir
--------------------
au chocolat brun
et au biscuit