SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Introduction au langage Ruby
Ruby is designed to make programmers happy
                      Matz (Yukihiro Matsumoto)
Perl + Python
Ruby =
           Smalltalk
Interprété
Interprété
Introspection
                   eval()

          REPL
Orienté Objet
   (Totalement)
Blocks
Blocks
[1,2,3].each do |item|
 puts item
end

file_contents = open(file_name) { |f| f.read }

widget.on_button_press { puts "Got Button Press" }
Blocks
def execute_n_times(times)
 (0...times).each do
  yield
 end
end

def execute_n_times_with_args(times, &block)
 (0...times).each do |time|
  block.call(time)
 end
end
messages != méthodes
messages != méthodes

  foo = "Bar"

  foo.length
  # Send :length to foo

  foo.index("a")
  # Send :index to foo with argument "a"

  1+2
  # Send :+ to object 1 with argument 2

  a = Array.new
  a[i]
  # Send :[] to a with argument i
messages != méthodes
class VCR

 def initialize
  @messages = []
 end

 # Captures everything
 def method_missing(method, *args, &block)
  @messages << [method, args, block]
 end

 # Replays all captured messages
 def play_back_to(obj)
  @messages.each do |method, args, block|
   obj.send(method, *args, &block)
  end
 end

end
messages != méthodes
Remote proxies
                   Auto loaders

      Decorators


                   Mock Objects
  Builders
Dynamique
Dynamique
         Modifier des classes existantes
class Integer

 def even?
  (self % 2) == 0
 end

end


class String

 def url_friendly
  self.downcase.gsub(/.../,'-').gsub(/-{2,}/,'-')
 end

end
Dynamique
            Méthodes singletons

class Dog
end

a_dog = Dog.new
anoher_dog = Dog.new

def a_dog.bark
 "Waff Waff"
end

a_dog.bark # => "Waff Waff"
another_dog.bark # => NoMethodError
Dynamique
                           Hooks

class Tracing

 def self.method_added(name)
  puts "Method #{name} added to #{self.name} class."
 end

 def new_method
  # Yada yada yada
 end
end
Dynamique
                            Code Eval
class Module
 def trace_attr(sym)
   self.module_eval %{
    def #{sym}
      printf "Accessing %s with value %sn",
        "#{sym}",
        @#{sym}.inspect

     @#{sym}
    end
  }
 end
end

class Dog
 trace_attr :name

 def initialize(dog_name)
  @name = dog_name
 end
end

Dog.new("Fido").name
# => Accessing name with value "Fido"
Introduction au langage Ruby
When I see a bird
 - that walks like a duck
 - and swims like a duck
 - and quacks like a duck,

I call that bird a duck.
                           James Whitcomb Riley
Pas besoin dʼinterface !


class Duck
 def talk; puts "Quack"; end
end

class DuckLikeObject
 def talk; puts "Kwak"; end
end

flock = [ Duck.new, DuckLikeObject.new ]

flock.each do |d|
 d.talk
end
Introduction au langage Ruby
DSL
DSL
               (Rake)
desc "Clean active targets"
task :clean do
 # ...
end

desc "Build the project"
task :build => :clean do
 # ...
end

task :default => :build
desc "Clean active targets"
task :clean do
 # ...
end

desc "Build the project"
task :build => :clean do
 # ...
end

task :default => :build




     def desc(description)
      # ...
     end

     def task(*args, &block)
      # ...
      block.call
     end
Have Fun !
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/


Vous êtes libres de reproduire, distribuer et communiquer cette création au
                 public, ainsi que de modifier cette création



            Paternité. Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de
            l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui
            suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre).



            Pas d'Utilisation Commerciale.Vous n'avez pas le droit d'utiliser cette création à des fins
            commerciales.




            Partage des Conditions Initiales à l'Identique. Si vous modifiez, transformez ou adaptez
            cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat
            identique à celui-ci.

Contenu connexe

Tendances

Introduction à Ruby 2
Introduction à Ruby 2Introduction à Ruby 2
Introduction à Ruby 2Microsoft
 
Introduction à Ruby - MS Techdays 2012
Introduction à Ruby - MS Techdays 2012Introduction à Ruby - MS Techdays 2012
Introduction à Ruby - MS Techdays 2012Nicolas Ledez
 
Programmer le robot humanoïde NAO [French]
Programmer le robot humanoïde NAO [French]Programmer le robot humanoïde NAO [French]
Programmer le robot humanoïde NAO [French]Elise Devaux
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesRémi Prévost
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonbbourgois
 
Breizh camp intro ruby
Breizh camp   intro rubyBreizh camp   intro ruby
Breizh camp intro rubyNicolas Ledez
 

Tendances (11)

Introduction à Ruby 2
Introduction à Ruby 2Introduction à Ruby 2
Introduction à Ruby 2
 
Introduction à Ruby - MS Techdays 2012
Introduction à Ruby - MS Techdays 2012Introduction à Ruby - MS Techdays 2012
Introduction à Ruby - MS Techdays 2012
 
Programmer le robot humanoïde NAO [French]
Programmer le robot humanoïde NAO [French]Programmer le robot humanoïde NAO [French]
Programmer le robot humanoïde NAO [French]
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancées
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec python
 
Breizh camp intro ruby
Breizh camp   intro rubyBreizh camp   intro ruby
Breizh camp intro ruby
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
chapitre1.ppt
chapitre1.pptchapitre1.ppt
chapitre1.ppt
 
Swift
SwiftSwift
Swift
 

Similaire à Introduction au langage Ruby

Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575kate2013
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Joël Séguillon
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à SinatraRémi Prévost
 
Graphgen - le générateur de graphes
Graphgen - le générateur de graphesGraphgen - le générateur de graphes
Graphgen - le générateur de graphesChristophe Willemsen
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 

Similaire à Introduction au langage Ruby (20)

Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Les bases du javascript
Les bases du javascriptLes bases du javascript
Les bases du javascript
 
Php1
Php1Php1
Php1
 
Poo vb.net
Poo vb.netPoo vb.net
Poo vb.net
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à Sinatra
 
Graphgen - le générateur de graphes
Graphgen - le générateur de graphesGraphgen - le générateur de graphes
Graphgen - le générateur de graphes
 
JQuery
JQueryJQuery
JQuery
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 

Introduction au langage Ruby

  • 2. Ruby is designed to make programmers happy Matz (Yukihiro Matsumoto)
  • 3. Perl + Python Ruby = Smalltalk
  • 6. Orienté Objet (Totalement)
  • 8. Blocks [1,2,3].each do |item| puts item end file_contents = open(file_name) { |f| f.read } widget.on_button_press { puts "Got Button Press" }
  • 9. Blocks def execute_n_times(times) (0...times).each do yield end end def execute_n_times_with_args(times, &block) (0...times).each do |time| block.call(time) end end
  • 11. messages != méthodes foo = "Bar" foo.length # Send :length to foo foo.index("a") # Send :index to foo with argument "a" 1+2 # Send :+ to object 1 with argument 2 a = Array.new a[i] # Send :[] to a with argument i
  • 12. messages != méthodes class VCR def initialize @messages = [] end # Captures everything def method_missing(method, *args, &block) @messages << [method, args, block] end # Replays all captured messages def play_back_to(obj) @messages.each do |method, args, block| obj.send(method, *args, &block) end end end
  • 13. messages != méthodes Remote proxies Auto loaders Decorators Mock Objects Builders
  • 15. Dynamique Modifier des classes existantes class Integer def even? (self % 2) == 0 end end class String def url_friendly self.downcase.gsub(/.../,'-').gsub(/-{2,}/,'-') end end
  • 16. Dynamique Méthodes singletons class Dog end a_dog = Dog.new anoher_dog = Dog.new def a_dog.bark "Waff Waff" end a_dog.bark # => "Waff Waff" another_dog.bark # => NoMethodError
  • 17. Dynamique Hooks class Tracing def self.method_added(name) puts "Method #{name} added to #{self.name} class." end def new_method # Yada yada yada end end
  • 18. Dynamique Code Eval class Module def trace_attr(sym) self.module_eval %{ def #{sym} printf "Accessing %s with value %sn", "#{sym}", @#{sym}.inspect @#{sym} end } end end class Dog trace_attr :name def initialize(dog_name) @name = dog_name end end Dog.new("Fido").name # => Accessing name with value "Fido"
  • 20. When I see a bird - that walks like a duck - and swims like a duck - and quacks like a duck, I call that bird a duck. James Whitcomb Riley
  • 21. Pas besoin dʼinterface ! class Duck def talk; puts "Quack"; end end class DuckLikeObject def talk; puts "Kwak"; end end flock = [ Duck.new, DuckLikeObject.new ] flock.each do |d| d.talk end
  • 23. DSL
  • 24. DSL (Rake) desc "Clean active targets" task :clean do # ... end desc "Build the project" task :build => :clean do # ... end task :default => :build
  • 25. desc "Clean active targets" task :clean do # ... end desc "Build the project" task :build => :clean do # ... end task :default => :build def desc(description) # ... end def task(*args, &block) # ... block.call end
  • 27. http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Vous êtes libres de reproduire, distribuer et communiquer cette création au public, ainsi que de modifier cette création Paternité. Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre). Pas d'Utilisation Commerciale.Vous n'avez pas le droit d'utiliser cette création à des fins commerciales. Partage des Conditions Initiales à l'Identique. Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

Notes de l'éditeur

  1. Lancer irb
  2. require &amp;#xAB;blocks&amp;#xBB;
  3. require &amp;#xAB;vcr&amp;#xBB;
  4. b = Builder::XmlMarkup.new
  5. require &amp;#x2018;extensions
  6. require &amp;#x2018;tracing&amp;#x2019;
  7. require &amp;#x2018;module_tracing&amp;#x2019;
  8. require &amp;#x2018;duck_typing&amp;#x2019;
  9. exemple geolocalisation require &amp;#x2018;mixins&amp;#x2019;