Constantes
Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 14 sur 57.
Une constante commence par une lettre majuscule et, par convention, s’écrit en majuscules. Définie dans le corps d’une classe, elle peut être utilisée par son nom dans chaque méthode de la classe. En dehors de la classe, vous écrivez ClassName::NAME :
class Account
MIN_BALANCE = -100
def self.allowed?(balance)
balance >= MIN_BALANCE
end
end
puts Account::MIN_BALANCE
puts Account.allowed?(-50)
puts Account.allowed?(-150)Sortie :
-100
true
falseLes constantes conviennent aux données fixes utilisées par toute la classe, telles que des limites ou des tables de correspondance. fetch sur une constante de type hash déclenche KeyError pour une clé inconnue au lieu de renvoyer silencieusement nil :
class Shipping
RATES = { "standard" => 5, "express" => 12 }.freeze
def self.cost(method)
RATES.fetch(method)
end
end
puts Shipping.cost("express")
begin
Shipping.cost("drone")
rescue KeyError => e
puts e.message
endSortie :
12
key not found: "drone"Un nom de constante ne peut pas pointer vers un nouvel objet sans que Ruby n’affiche un avertissement, mais l’objet qu’il contient peut toujours être modifié. freeze rend l’objet lui-même accessible en lecture seule, donc toute modification lève FrozenError :
class Palette
COLORS = ["red", "green"].freeze
end
begin
Palette::COLORS << "blue"
rescue FrozenError => e
puts e.message
end
p Palette::COLORS
p Palette::COLORS.frozen?Résultat :
can't modify frozen Array: ["red", "green"]
["red", "green"]
trueChoisissez en fonction du comportement de la valeur. Une valeur qui ne change jamais appartient à une constante figée l’état qui change pendant l’exécution du programme, comme un compteur, appartient à une variable d’instance de classe :
class Ticket
PREFIX = "TK" # fixe : une constante
@issued = 0 # change : variable d'instance de classe
def self.next_code
@issued += 1
"#{PREFIX}-#{@issued}"
end
endDéfi
FacileComplétez la classe Order. Elle possède les constantes RATES (un hash gelé : standard coûte 5, express 12, pickup 0) et FREE_FROM (50). initialize(total, method) lève ArgumentError avec unknown shipping: drone lorsque la méthode n'est pas une clé de RATES. shipping renvoie 0 pour les totaux supérieurs ou égaux à FREE_FROM, et le tarif dans le cas contraire ; to_s renvoie 40.00 + 5 express = 45.00.
Le code fourni affiche free from 50 en utilisant la constante, puis lit les commandes sous forme de lignes total method et affiche chaque commande ou le message d'erreur.
Votre code doit se trouver dans order.rb. main.rb contient le code d'entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
require_relative 'order'
# Code d'entrée/sortie fourni : le garder tel quel
input = []
while (line = gets)
input << line.chomp
end
puts "free from #{Order::FREE_FROM}"
input.each do |line|
total, method = line.split
begin
puts Order.new(total.to_f, method)
rescue ArgumentError => e
puts e.message
end
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 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