Méthodes de classe
Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 12 sur 57.
Une méthode de classe appartient à la classe, et non à une instance. Dans le corps de la classe, self désigne la classe, donc def self.name définit une méthode sur la classe. Vous l’appelez directement sur la classe :
class Temperature
def self.to_fahrenheit(celsius)
celsius * 9 / 5.0 + 32
end
end
puts Temperature.to_fahrenheit(100)
puts Temperature.to_fahrenheit(-40)Sortie :
212.0
-40.0Les méthodes de classe et les méthodes d’instance résident à des endroits différents. Une instance ne peut pas appeler directement une méthode de classe ; elle y accède via self.class ou le nom de la classe :
class Circle
def self.area_for(r)
(3.14159 * r * r).round(2)
end
def initialize(r)
@r = r
end
def area
self.class.area_for(@r)
end
end
puts Circle.area_for(1)
puts Circle.new(2).area
begin
Circle.new(2).area_for(2)
rescue NoMethodError => e
puts e.message
endSortie :
3.14
12.57
undefined method `area_for' for an instance of Circleclass << self ouvre une section du corps de la classe dans laquelle chaque def est une méthode de classe. Cela évite d’écrire self. lorsqu’une classe en possède plusieurs :
class Units
class << self
def km_to_miles(km)
(km * 0.621371).round(1)
end
def miles_to_km(miles)
(miles / 0.621371).round(1)
end
end
end
puts Units.km_to_miles(10)
puts Units.miles_to_km(26.2)Sortie :
6.2
42.2Utilisez une méthode de classe pour les opérations qui concernent le type d’objet plutôt qu’un objet particulier : convertir des unités, analyser du texte pour en faire un objet ou conserver le compte de toutes les instances. Les opérations qui nécessitent les données d’un objet restent des méthodes d’instance :
class Invoice
def self.tax_rate # le même pour chaque facture
0.2
end
def tax # a besoin du montant de cette facture
@amount * Invoice.tax_rate
end
endDéfi
FacileComplète les méthodes de classe de Temperature. to_fahrenheit(c) et to_celsius(f) convertissent une valeur. feel(celsius) renvoie freezing en dessous de 0, cold en dessous de 15, mild en dessous de 25 et hot dans les autres cas. convert(text) prend un texte tel que 20 C ou 68 F et renvoie 20.0 C = 68.0 F (mild) ou 68.0 F = 20.0 C (mild), avec une décimale et la sensation correspondant à la valeur en Celsius ; elle utilise les autres méthodes de classe.
Le code fourni appelle Temperature.convert(line) pour chaque ligne d’entrée et affiche le résultat. Aucune instance de Temperature n’est créée.
Ton code doit être placé dans temperature.rb. main.rb contient le code fourni pour les entrées et les sorties et ne peut pas être modifié.
Essayez vous-même
require_relative 'temperature'
# Code d'entrée/sortie fourni : le garder tel quel
input = []
while (line = gets)
input << line.chomp
end
input.each { |line| puts Temperature.convert(line) }
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 livres3Méthodes et variables de classe
Méthodes de classeVariables d’instance de classeConstantesMéthodes de fabriqueRécapitulatif - Codes de réductionEntraînez-vous par vous-même : Compilateur Ruby en ligne