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.classSortie :
Woof
Dognew 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").speakSortie :
Rex says Woof
Bella says WoofLes 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.0Les 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
endSortie :
wrong number of arguments (given 1, expected 2)Défi
FacileComplé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
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
1Classes et objets
Travailler avec des fichiersDéfinir des classesVariables d’instanceMéthodes et selfto_s et inspectRécapitulatif - Carte de bibliothèque4Encapsulation
Méthodes privéesMéthodes protégéesSetters privésProtéger l’étatRécapitulatif - Distributeur automatique7Polymorphisme et typage canard
PolymorphismeTypage canardMéthodes abstraitesCas et classesRécapitulatif - méthodes de paiement10Patrons de conception – Partie 2
Délégation avec ForwardablePatron DécorateurPatron BuilderPatron État2Accesseurs et self
Lecteurs et écrivainsSetters personnalisésself dans les méthodesIdentité et égalitéRécapitulatif - Liste de contacts5Héritage
Sous-classesRedéfinition des méthodesAppeler superis_a? et ancêtresRécapitulatif - Paie du personnel8Méthodes spéciales
Égalité et hachageMéthodes d’opérateursIndexation et ajoutCollections personnaliséesRécapitulatif - Fractions11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Compilateur Ruby en ligne