Ruby est un langage interprété pur object développé par Yukihiro Matsumoto
Pour télécharger ruby aller sur le site francophone http://www.ruby-lang.org/fr
Sous Debian, l'installation se fait avec la commande : apt-get install ruby
Pour lancer l’interpréteur ruby, sous Linux taper irb
Guide de Programmation en Ruby : http://www.ruby-doc.org/docs/ProgrammingRuby/html/
x=12 "abc #{x} abc" 'abc #{x} abc' |
=> "abc 12 abc" => "abc #{x} abc" |
Double cote, évalue #{x} Simple cote, n'évalue pas #{x} |
"ab"+"cd" |
=>"abcd" |
Concaténation |
"ab" "cd" |
=>"abcd" | Concaténation |
"ab"*3 |
=>"ababab" |
Répliqué 3 fois |
"abc".reverse |
=> "cba" |
|
s="abc" s.reverse! |
=> "cba" |
Modification physique |
s="aaa" s << " do" << " re" |
=> aaa do re |
Modification physique |
s=String.new("abc") |
=> "abc" |
|
%Q#abc# |
=> "abc" |
Double cote |
%=abc= | => "abc" | Double cote |
%<abc> | => "abc" | Double cote |
%q*abc* | => "abc" | Simple cote |
%q{abc} | => "abc" | Simple cote |
`date +%A` |
=> "dimanche\n" | Anticote, commande système |
%x(date +%A) |
=> "dimanche\n" |
Anticote, commande système |
%r&ab|cd& |
=> /ab|cd/ |
Expression régulière |
s= <<DOC ab cd ef DOC |
=>"ab\ncd\nef\n" |
Texte avec passage à la ligne ab cd ef |
"%05d" % 12 |
=> "00012" |
Format décimal justifié |
"%-5d" % 12 | => "12 " |
Format décimal justifié |
"%b" % 5 |
=> "101" |
Format binaire |
"%x" % 255 |
=> "ff" |
Format hexadécimal |
"%.2f" % 3.1415 |
=> "3.14" |
Format flotant avec 2 chiffres de précisions |
"ab\"cd" |
=> "ab\"cd" | Caractère d'échapement \ |
s="abcde" s.empty? s.length s.size |
=> false => 5 => 5 |
|
"ab".to_sym | => :ab |
String --> Symbol |
:ab.to_s |
=>"ab" |
Symbol--> String |
"12".to_i |
=> 12 |
String --> Fixnum |
"3.14".to_f |
=> 3.14 |
String --> Float |
5.to_s |
=> "5" |
Float --> String |
5.to_s(2) |
=> "101" |
En base 2 |
s="abcdefg" s[1] |
=> "b" |
|
s[1..3] |
=> "bcd" |
|
s["bcd"]="AB" s |
=> aABefg |
Modification physique |
s.index("Be") |
=> 2 |
|
s="toto" s.gsub("to","ga") s.gsub!("to","ga") s.insert(2,"zo") s.chop s.chop! |
=> "gaga" => "gaga" => "gazoga" => "gazog" => "gazog" |
Modification physique Modification physique Voir aussi chomp Modification physique |
"e".ord |
=> 101 |
|
101.chr |
=> "e" |
|
"ab" <=> "ac" |
=> -1 |
Comparaison lexicographique |
"Ab".casecmp("ac") |
=> -1 |
Comparaison lexicographique sans majuscule |
s="ab" s.center(10) s.ljust(10) s.rjust(10) |
=> " ab " => "ab " => " ab" |
|
s.upcase s.upcase! s.downcase s.downcase! |
=> "AB" => "AB" => "ab" => "ab" |
Modification physique Modification physique |
s="il fait beau" s.split(/ /) |
=> ["il", "fait", "beau"] |
s="abcdefg" r =/cd|dc/ s =~ r r =~ s s.match(r) r.match(s) |
=> 2 => 2 => #<MatchData "cd"> => #<MatchData "cd"> |
Expression régulière cd|dc Conforme à l'expression régulière cd|dc à partir de l'indice 2 |
s="zakdd" r =/([ab]+)k([cd]+)/ s =~ r m=s.match(r) m[0] m[1] m[2] |
=> 1 => #<MatchData "akdd" 1:"a" 2:"dd"> => "akdd" => "a" => "dd" |
Expression régulière /([ab]+)k([cd]+)/ Conforme à partir de l'indice 1 |
Modele |
Description |
^ |
Début de ligne. |
$ |
Fin de ligne. |
. |
Un caractère autre que le newline (sauf en mode m). |
[abc] |
Un caractère a ou b ou c. |
[^abc] | Un caractère qui n'est pas ni a ni b ni c. |
[a-e2-5] |
Un caractère entre a et e ou entre 2 et 5. |
X* |
0 ou plusieur occurences de X. Non gourmand X*? |
X+ |
1 ou plusieur occurences de X. Non gourmand X+? |
X? |
0 ou 1 occurence de X. Non gourmand X?? |
X{n} |
Exactement n occurences de X |
X{n,} |
n ou plus d'occurences de X. Non gourmand {n,}? |
X{n,m} |
de n à m occurences de ce qui précède. Non gourmand {n,m}? |
X|Y |
X ou Y |
(X) |
Groupé et mémorisé |
(?:X) |
Groupé et non mémorisé |
X(?=Y) |
X si suivie de Y |
\w |
Caractères word [A-Za-z0-9_] |
\W |
Caractères word [^A-Za-z0-9_] |
\s |
Espace [ \t\n\r\f] |
\S |
Non espade [^ \t\r\n\f] |
\d |
Chiffre [0-9] |
\D |
Non chiffre [^0-9] |
\n,\t... |
newline, tabulation, etc. |
\1...\9 |
n ième expression mémorisées |
\10 |
10 ième expression mémorisée si elle existe sinon caractère de code octal 10. |
A = [5,9,7,2,8] A.all? {|x| x<100} A.any? {|x| x==4} [false, nil, false].none? A.none?{|x| x>10} A.one?{|x| x>8} A.one?{|x| x>7} |
=> true => true => true => true => true => false |
||
A.collect {|x| x*x} A.collect_concat{|x| x*x} A.count A.count(4) A.count{|x|, x.even?} A.cycle A.cycle(2) A.cycle(2).to_a (3..6).to_a A.drop(3) A.drop_while{|x| x>3} A.first(3) A.find {|x| x>6} A.find_all{|x| x.even?} A.reject{|x| x.even?} A.find_index(8) A.find_index{|x| x>6} A.include?(7) |
=> [25,81,49,1] (alias map) => [25,81,49,1] (alias flat_map) => 6 => 1 => 3 => 5,9,7,2,8,5,9,7,2,8,5,9,7,2,8.... => 5,9,7,2,8,5,9,7,2,8 => [5,9,7,2,8,5,9,7,2,8] => [3,4,5,6] => [2,8] => [2,8] (alias take_while) => [5,9,7] (alias take) => 9 (alias detect) => [2,8] (alias select) => [5,9,7] => 4 => 1 => true (alias member?) |
Nombre de fois 4 dans A Nombre de n pair dans A Saute les 3 premières valeurs Saute les premiers x tant que x>3 Les 3 premières valeurs La première valeur satisfaisant x>6 L'index de la valeur 8 L'index du pemier x>6 |
Enumerator Enumerator Enumerator Enumerator Enumerator Enumerator Enumerator Enumerator Enumerator Enumerator |
A.each{|x| p(x)} A.each_with_index{|x,i| p(x,i)} A.each_with_object([s0]){|x,s| p(x,s); s<<x} A.reverse_each{|x| p(x)} (1..10).each_cons(3){|m| p(m)} (1..10).each_slice(3){|m| p(m)} (1..10).each_slice_before{|x| x%4==0} |
Boucle for x in A (alias each_entry) Boucle for x in A avec l'indice i s= [s0] puis [s0,x0] puis [s0,x0,x1]..... Boucle for x in A.reverse temporaire Boucle for m in [[1,2,3], [2,3,4], [3,4,5]...., [8,9,10]] Boucle for m in [[1,2,3], [4,5,6], [7,8,9]..., [10]] => [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]] |
|
A = [5,9,7,2,8] A.group_by {|x| x%3} [5,2,4,6,1,3].chunk{|x| x%3} A.partition {|x| x.even?} |
=> {2=>[5, 2, 8], 0=>[9], 1=>[7]} => [[2, [5, 2]], [1, [4]], [0, [6]], [1, [1]], [0, [3]]] => [[2, 8], [5, 9, 7]] |
|
A.sort A.sort{|a,b| f(a)<=>f(b)} A.max A.max{|a,b| f(a)<=>f(b)} A.min A.min{|a,b| f(a)<=>f(b)} A.minmax A.minmax{|a,b| f(a)<=>f(b)} A.sort_by {|x| f(x)} A.max_by{|x| f(x)} A.min_by{|x| f(x)} A.minmax_by{|x| f(x)} |
|
|
A.reduce(:+) A.reduce{|s,x| s+x} A.reduce(s0, :+) A.reduce(s0){|s,x| s+x} [1,2,3].zip(A,B) |
Somme de tous les éléments de A (alias
inject) Somme de tous les éléments de A s0 + Somme de tous les éléments de A s0 + Somme de tous les éléments de A égale à [[1,A1,B1],[2,A2,B2],[3,A3,B3]] |
L = [ ] L = Array.new L = Array.new(3) L = Array.new(3,7) L = Array.[](5,2,4) [1,1,3,5]&[2,3,1] [1,2,3]*3 [1,2,3]*"," [1, 5] + ["ab", 7] [1,1,2,2,3,5]-[3,1,4] L = [12, 3, 5] L.last L.join L.join(", ") L[0] L[1] L.respond_to?("each") L.sort L.length L.reverse L.pop L.push(79) L.include?(12) L[5] L[5]="abc" L L=[2] L<< 5 << 7 L<<"ab" %w{a bb ccc} [7,2,5].delete(2) a,b = [2,7,5] [a,b] L=[0,1,2,3,4] L[0,2]=[5,7,7] L[1,3]="a" L[0..1]=[9,9,9] L[0..3]=[8,9] L[0..2]=[ ] L[-1]=9 M=[3,4,9] M.equal?(L) M.eql?(L) |
=> [] |
Modification physique de la liste L : pop, push,<<
L = { } |
=> { } |
Modification physique |
3+5 |
=> 8 Permute a et b |
Affectation parallèle |
if cond1 then action1
elsif cond2 then action2
else action3
end
(le then peut être remplacé par un passage à la ligne)
if cond1
action1
elsif cond2
action2
else action3
end
unless cond1 then action1 else action2 end
action if cond
action unless cond
action while cond
action until cond
while cond
action
end
begin
action
end while cond
until cond
action
end
begin
action
end untilcond
case x
when 0..5 then action1
when 6 then action2
when 6 : action3
when cond then action4
else action5
end
loop do
action
break if cond
end
(5..8).each do |i| action end
(5..8).each { |i| action }
[2,4,7].each { |i| action }
"toto\nlili\nlulu".each { |i| action }
for i in 5..8
action
next if cond1
retry if cond2
end
for i in 5..8; action end
for i in 5..8 do action end
for i in [2,4,7]; action; end
for i in "toto\nlili\nlulu"; action; end
3.times do action end
3.times { action }
--- 26 mai 2013 ---
|
Définition d'une fonction f (appelée aussi une méthode f) avec valeur par défauts. | ||
|
Application de la fonction f |
|
Définition d'une fonction f (appelée aussi une méthode f) | ||
|
Application de la fonction f |
|
Définition d'une classe avec le constructeur initialise et deux variables x, y.
y en lecture seul.
Dans la classe A, @x et @y désigne les variables d'instances. |
||
|
Création d'un objet de classe A | ||
|
Non hérités |
|
|
Boucle while |
||
|
Boucle each avec un Array | ||
|
Boucle each avec un Range | ||
|
Boucle each avec un Hash | ||
|
Boucle times |
|
Temps |
|
Extention de la classe des Integer avec la méthode oDans une classe A, self désigne l'objet solicité par la méthode. | ||
|
Création d'un objet de classe A |
|
|
Méthode singleton Redirection d'erreur |
||
attr_reader :v ≡ def v; @v; end |
|
|
fonction | ||
|
Execution de la fonction |
|
fonction | ||
|
Execution de la fonction |
|
Les methodes sont aussi des objets |
|
|
Les opérateurs peuvent être définie +, *, [], []=, -@, +@, ... à l'exception des opérateurs suivants : |
defined? x => nil
defined? 56 => "expression"
defined? y => "local_variable"
defined? puts => "method"
x.eql?(y) => true si x et y sont de même type
x.equal?(y) => true si x et y sont le même objet
x == y => true si x est égale en valeur à y
x <=> y => 1, 0 ou -1 selon que x est plus grand, égale, ou plus petit que y
de même pour < <= > =>
not, !, and, &&, or, ||,
|
|
|
super désigne le constructeur de la classe mère. |
|
Ecrire dans un fichier texte. |
|
|
|
Oject --|--> Module ----> Class
|--> IO ----> File
|--> String
|--> Array
|--> Hash
|--> Regexp
|--> Numeric --|--> Integer --|--> Fixnum
| |--> Bignum
|--> Float
Range
Symbol
Priorité des opérateurs :
[] []= Référence, Assignation
** Exponantiation
! ~ + - Non, Complement, Plus unaire (+@), Moins unaire (-@)
* / % Multiplication, Division, Modulo
+ - Plus, Moins
>> << Shift droit, Shift gauche
& Et (entre deux entiers)
^| Ou exclusif (entre deux entiers), Ou (entre deux entiers)
<= < > >= Plus petit ou égale, Plus petit, Plus grand, Plus grand ou égale
<=> == === != =~ ~!
&& Et
|| Ou
.. ... Range inclusive, Range exclusive
?: If-then-else
= %= /= += |= &= >>= <<= *= &&= ||= **= Assignement
defined? If défined
not Non
or and Ou,Et
if unless while until Modificateur
Begin/end Bloque
$0 Nom du fichier de script Ruby qui s'éxecute
$$ Numéro du processus Ruby qui s'éxecute
Les portées locales :
1- L'entête du programme
2- Chaque classe et module
3- Chaque methode
Float::DIG => 15
Float::MAX => 1.79769313486232e+308
alias methodNew methodOlD
a.sort pas de modification physique a.upcase
a.chomp
a.reverse
a.sort! modification physique
a.upcase!
a.chomp!
a.reverse!
STDOUT
STDOUT.flush exit nil NIL TRUE FALSE nil.object_id => 4 Trois suffixes spéciaux autorisés pour les méthodes : "?", "!", "="
ENV.each {|k,v| puts "#{k}: #{v}"} texte seulement ENV["toto"] = "456" Le changement ne sera visible que pour le processus et fils.
ARGV tableau des variables transmises en lign de commande.
Symbol.all_symbols
module
include B,C
class A
module B
end
end
A::B
Marshal.dump(x,f) serialization
x = Marshal.load(f)