gros, on lui envoie du Ruby et il donne le résultat C’est un excellent outil pour apprendre le langage Ça devient un outil très puissant pour manipuler des données quand on est dans un framework faites vous du bien et jouez beaucoup avec irb
de créer de nombreux framework : Ruby on Rails, Merb, … (frameworks web complets) Sinatra, Ramaze, … (micro-frameworks web) Anemone (web spider), Test::Unit, RSpec, Cucumber (frameworks de tests)
plupart des langages de programmation : String, Integer, Float, … Ruby a 2 structures principales : Array et Hash Ces structures sont très souples et peuvent servir de files, piles, ensembles, … Ruby a d’autres types, comme Time Et tout ça, ce sont des objets en Ruby
et si il “parle” comme un canard alors c’est un canard # On vérifie si ces objets implémentent la méthode to_str() # à ne pas confondre avec to_s() qui fait du transtypage puts ('Une chaîne'.respond_to? :to_str) # => true puts (Exception.new.respond_to? :to_str) # => true puts (4.respond_to? :to_str) # => false
code est executé si la condition donne true En Ruby, false et nil sont false et tout le reste est true (0, “”, etc.) num = rand(10) print "#{num}: " if num == 7 puts "Chanceux!" elsif num <= 3 puts "Un peu bas." else puts "Un nombre chiant." end # >> 2: Un peu bas.
quand ça tourne mal Les objets Error on un type, un message, et un backtrace Par defaut, l’execution s’arrête si elle n’est pas capturée >> 42 / 0 ZeroDivisionError: divided by 0 from (irb):1:in `/' from (irb):1 from :0
begin … end Ajouter la clause rescue pour les types d’erreur qu’on veut gérer >> begin >> n = 42 / 0 >> rescue ZeroDivisionError => error >> n = 0 >> end => 0 >> n => 0
exceptions, tout est un Objet Même un nombre est un Objet et on peut appeler des méthodes dessus >> -42.abs => 42 >> 3.times { puts "Pizza" } Pizza Pizza Pizza => 3
enfant hérite du comportement de ses parents Object en Ruby est le parent le plus élevé pour toutes les Classes class Parent def salut @salutation ||= "Coucou" end end class Enfant < Parent def initialize @salutation = "Yo!" end end puts Parent.new.salut puts Enfant.new.salut # >> Coucou! # >> Yo!
peut “mixer” un Module de méthodes “dans” dans une Classe On appèle ces Modules des “mixins” module Netstring def to_netstring(*args) str = to_s(*args) "#{str.length}:#{str}," end end class String include Netstring end class Integer < Numeric include Netstring end p "Pizza".to_netstring p 42.to_netstring(2) # >> "5:Pizza," # >> "6:101010,"
à une méthode Le code du bloc est dans { … } ou do … end Cette méthode peut executer le code fourni avec yield def jusqu_a_succes loop do break if yield == :succes end end jusqu_a_succes { puts "Appelé." :succes if rand(3).zero? } # >> Appelé. # >> Appelé. # >> Appelé. # >> Appelé.
le bloc une fois pour chaque élément de la collection name = %w[Pizza Bières Chips] name.each do |word| puts word.reverse end # >> azziP # >> serèiB # >> spihC
Chaque élément de la collection est passé au bloc et le résultat remplace l’élément dans une nouvelle collection nums = *1..5 p nums p nums.map { |n| n ** 2 } # >> [1, 2, 3, 4, 5] # >> [1, 4, 9, 16, 25]
est passé dans le bloc et si le résultat donne true l’élément est placé dans une nouvelle collection nums = *1..10 p nums p nums.select { |n| n % 2 == 0 } # >> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # >> [2, 4, 6, 8, 10]
String et plus de 70 sur Array Conversion mathématiques automatiques Un puissant case (conditions multi-branches) Comportements personnalisés par objet Plus de 30 itérateurs Puissantes capacités de réflexion