Ruby

From Objectif Client Inc
Jump to navigation Jump to search

First Step

Call Ruby command line

irb

Methode

  • Define a methode "m"
def m(name = "World")
puts "Hello Mr #{name.capitalize}!"
end
  • Execute
m("nicolas")
Hello Mr Nicolas!
=> nil

Class

class Greeter
  def initialize(name = "World")
   @name = name
  end
  def say_hi
    puts "Hi #{@name}!"
  end
  def say_bye
    puts "Bye #{@name}, come back soon."
   end
end
  • class define a new class
  • @name is a variable d'instance

Object

irb>o = Greeter.new("Nicolas")
=> #<Greeter:0x00000002579a48 @name="Nicolas">
irb>o.say_hi
Hi Nicolas!
=> nil
irb> o.say_bye
Bye Nicolas, come back soon.
=> nil

Methodes of a particular Object

  • Current Object and parent
irb>Greeter.instance_methods
=> [:say_hi, :say_bye, :m, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
  • Current Object only
irb>Greeter.instance_methods(false)
=> [:say_hi, :say_bye]

Validate Object Methode

irb>o.respond_to?("name")
=> false
o.respond_to?("say_hi")
=> true
o.respond_to?("to_s")
=> true

Change Class Attribut

irb>class Greeter
attr_accessor :name
end

o = Greeter.new("MySelf")

o.respond_to?("name")

o.respond_to?("name=")

o.say_hi

o.name="Betty"

o

o.name

o.say_hi

  • attr_accessor add tow methods "name" and ""name=""

Create a batch file

#!/usr/bin/env ruby

class MegaGreeter
  attr_accessor :names

  # Création d'un objet
  def initialize(names = "World")
    @names = names
  end

  # Saluer tout le monde
  def say_hi
    if @names.nil?
      puts "..."
    elsif @names.respond_to?("each")
      # @names est une liste de noms : traitons-les uns par uns
      @names.each do |name|
        puts "Hello #{name}!"
      end
    else
      puts "Coucou #{@names}!"
    end
  end

  # Dire au revoir à tout le monde
  def say_bye
    if @names.nil?
      puts "..."
    elsif @names.respond_to?("join")
      # Grouper les différents noms de la liste par des virgules
      puts "Goodbye #{@names.join(", ")}.  Come back soon!"
    else
      puts "Ciao #{@names}.  Come back soon!"
    end
  end

end


if __FILE__ == $0
  mg = MegaGreeter.new
  mg.say_hi
  mg.say_bye

  # Modifier le nom en Zeke
  mg.names = "Zeke"
  mg.say_hi
  mg.say_bye

  # Changer le nom pour un tableau (une liste de noms)
  mg.names = ["Albert", "Brenda", "Charles",
    "Dave", "Engelbert"]
  mg.say_hi
  mg.say_bye

  # Maintenant, le nom n'est plus...
  mg.names = nil
  mg.say_hi
  mg.say_bye
end

  • Execute
ruby helloworl.rb
Coucou World!
Ciao World.  Come back soon!
Coucou Zeke!
Ciao Zeke.  Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert.  Come back soon!

Structure

Comment

# This is a comment

If

# If null
  if @names.nil?
    puts "..."
  elsif @names.respond_to?("join")
    # Grouper les noms par des virgules
    puts "Goodbye #{@names.join(", ")}.  Come back soon!"
  else
    puts "Goodbye #{@names}.  Come back soon!"
  end

Iteration

@names.each do |name|
  puts "Hello #{name}!"
end


Control

  • __FILE__ contains the current file name.
  • $0 The name of the used to run the current file
if __FILE__ == $0