Introduction au langage Ruby

948 views
885 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
948
On SlideShare
0
From Embeds
0
Number of Embeds
94
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide





  • Lancer irb


  • require «blocks»


  • require «vcr»
  • b = Builder::XmlMarkup.new

  • require ‘extensions

  • require ‘tracing’
  • require ‘module_tracing’


  • require ‘duck_typing’
  • exemple geolocalisation
    require ‘mixins’





  • Introduction au langage Ruby

    1. 1. Ruby is designed to make programmers happy Matz (Yukihiro Matsumoto)
    2. 2. Perl + Python Ruby = Smalltalk
    3. 3. Interprété
    4. 4. Interprété Introspection eval() REPL
    5. 5. Orienté Objet (Totalement)
    6. 6. Blocks
    7. 7. 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" }
    8. 8. 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
    9. 9. messages != méthodes
    10. 10. 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
    11. 11. 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
    12. 12. messages != méthodes Remote proxies Auto loaders Decorators Mock Objects Builders
    13. 13. Dynamique
    14. 14. 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
    15. 15. 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
    16. 16. 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
    17. 17. 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"
    18. 18. 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
    19. 19. 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
    20. 20. DSL
    21. 21. DSL (Rake) desc "Clean active targets" task :clean do # ... end desc "Build the project" task :build => :clean do # ... end task :default => :build
    22. 22. 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
    23. 23. Have Fun !
    24. 24. 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.

    ×