Ruby First Step: Difference between revisions
Jump to navigation
Jump to search
(Created page with "== First Step == === Call Ruby command line === <pre>irb</pre> === Methode === * Define a methode "m" <pre>def m(name = "World") puts "Hello Mr #{name.capitalize}!" end</pre>...") |
(No difference)
|
Latest revision as of 18:02, 13 November 2014
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