Ruby
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