Ruby: Difference between revisions

From Objectif Client Inc
Jump to navigation Jump to search
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Ruby]]
[[Category:Ruby]]
[[Category:Code]]
[[Category:Code]]
== First Step ==
=== Call Ruby command line ===
<pre>irb</pre>


=== Methode ===
==[[Ruby First Step]]==
* Define a methode "m"
==[[Ruby Installation]]==
<pre>def m(name = "World")
==[[Ruby Le Language]]==
puts "Hello Mr #{name.capitalize}!"
==[[Ruby Rail First Step]]==
end</pre>
 
* Execute
<pre>m("nicolas")</pre>
 
<pre>Hello Mr Nicolas!
=> nil</pre>
 
=== Class ===
<pre>
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</pre>
* class define a new class
* @name is a variable d'instance
===Object===
<pre>irb>o = Greeter.new("Nicolas")
=> #<Greeter:0x00000002579a48 @name="Nicolas"></pre>
<pre>irb>o.say_hi
Hi Nicolas!
=> nil</pre>
<pre>irb> o.say_bye
Bye Nicolas, come back soon.
=> nil</pre>
====Methodes of a particular Object====
* Current Object and parent
<pre>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__]</pre>
* Current Object only
<pre>irb>Greeter.instance_methods(false)
=> [:say_hi, :say_bye]</pre>
 
====Validate Object Methode ====
<pre>irb>o.respond_to?("name")
=> false</pre>
<pre>o.respond_to?("say_hi")
=> true</pre>
<pre>o.respond_to?("to_s")
=> true</pre>
 
====Change Class Attribut====
<pre>irb>class Greeter
attr_accessor :name
end</pre>
 
o = Greeter.new("MySelf")<br>
 
o.respond_to?("name")<br>
 
o.respond_to?("name=")<br>
 
o.say_hi<br>
 
o.name="Betty"<br>
 
o<br>
 
o.name<br>
 
o.say_hi<br>
 
* attr_accessor add tow methods "name" and ""name=""
 
====Create a batch file====
<pre>
#!/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
 
</pre>
 
* Execute
<pre>ruby helloworl.rb</pre>
 
<pre>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!
</pre>
 
===Structure===
 
====Comment====
 
<pre># This is a comment</pre>
====If====
 
<pre># 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
</pre>
 
====Iteration====
<pre>@names.each do |name|
  puts "Hello #{name}!"
end
</pre>
 
 
====Control====
* __FILE__ contains the current file name.
* $0 The name of the used to run the current file
<pre>if __FILE__ == $0</pre>

Latest revision as of 18:59, 13 November 2014