Ruby base

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Sujet Bases du langage Ruby
Console Irb
Suite Ruby base2
Voir aussi Ruby · Structure de donnees (Ruby)

Notions de base du langage Ruby : expressions, lambdas (blocs anonymes), classes et méthodes. Les exemples se testent dans Irb.

Premières expressions

puts 5 + 6

a = 5
b = 6
puts a + b

# Un lambda est un bloc de code anonyme
addition = lambda { |a, b| return a + b }
puts addition.call(5, 6)

empty_block = lambda { }
puts empty_block.object_id
puts empty_block.class
puts empty_block.class.superclass

Classes

class Calculator
  def add(a, b)
    return a + b
  end
end

puts Calculator.new.add(5, 6)

Récupérer une méthode d'une instance et la transformer en proc :

class Calculator
  def add(a, b)
    return a + b
  end
end

addition_method = Calculator.new.method("add")
addition = addition_method.to_proc

puts addition.call(5, 6)

Exercice : compléter les opérations sur le modèle de l'addition.

Addition       = lambda { |a, b| return a + b }
Subtraction    = lambda { }   # votre code entre les accolades
Multiplication = lambda { }
Division       = lambda { }

Ouvrir une classe existante

Ruby permet de rouvrir une classe standard (ici Array) pour y ajouter une méthode :

class Array
  def foldl(method)
    inject { |result, i| result ? result.send(method, i) : i }
  end
end

puts [1000.0, 200.0, 50.0].foldl("/")

Fibers

# Charger la stdlib fiber donne des fonctions supplémentaires, dont Fiber#alive?
require "fiber"

class FakeEnumerator
  def next
    @fiber ||= Fiber.new do
      each { |e| Fiber.yield(e) }
      raise StopIteration
    end

    if @fiber.alive?
      @fiber.resume
    else
      raise StopIteration
    end
  end
end

Voir aussi