Menu
Coddy logo textTech

Définir des classes

Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 2 sur 57.

Une classe décrit un type d’objet : ce qu’il sait et ce qu’il peut faire. class Dog ... end déclare la classe, et Dog.new crée un objet de cette classe, une instance. Une méthode définie avec def à l’intérieur de la classe peut être appelée sur chaque instance :

class Dog
  def speak
    "Woof"
  end
end

rex = Dog.new
puts rex.speak
puts rex.class

Sortie :

Woof
Dog

new crée l’objet, puis appelle sa méthode initialize avec les arguments que vous avez fournis à new. initialize configure l’objet, généralement en stockant les arguments dans des variables d’instance, dont les noms commencent par @ :

class Dog
  def initialize(name)
    @name = name
  end

  def speak
    "#{@name} says Woof"
  end
end

puts Dog.new("Rex").speak
puts Dog.new("Bella").speak

Sortie :

Rex says Woof
Bella says Woof

Les méthodes prennent des arguments comme toute méthode Ruby et renvoient la valeur de leur dernière expression. Chaque appel à new construit un objet distinct :

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

  def average(numbers)
    numbers.sum.to_f / numbers.size
  end
end

calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])

Sortie :

5
3.0

Les noms de classes sont des constantes écrites en CamelCase (BankAccount) ; les noms de méthodes et de variables utilisent snake_case (deposit_money). new vérifie ses arguments par rapport à initialize, donc un argument manquant déclenche ArgumentError :

class Point
  def initialize(x, y)
    @x = x
    @y = y
  end
end

begin
  Point.new(1)
rescue ArgumentError => e
  puts e.message
end

Sortie :

wrong number of arguments (given 1, expected 2)
challenge icon

Défi

Facile

Complétez la classe Formatter. Sa méthode title(text) renvoie le texte avec chaque mot commençant par une majuscule (the hobbit donne The Hobbit), slug(text) renvoie les mots en minuscules reliés par - (the-hobbit), et initials(text) renvoie la première lettre de chaque mot en majuscule (TH).

Le code fourni crée un objet Formatter et, pour chaque ligne d’entrée, affiche les trois résultats sur des lignes distinctes.

Votre code doit être placé dans formatter.rb. main.rb contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

require_relative 'formatter'

# Code d'entrée/sortie fourni : le laisser tel quel
input = []
while (line = gets)
  input << line.chomp
end
formatter = Formatter.new
input.each do |line|
  puts formatter.title(line)
  puts formatter.slug(line)
  puts formatter.initials(line)
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Ruby en ligne