11 juillet 2020 Progression du niv.175 RubyⅤ
Vous pouvez créer une classe à partir de zéro, mais vous pouvez utiliser une classe existante et créer une nouvelle classe basée sur cette classe. Ce faisant, les parties communes peuvent être rassemblées et le code peut être écrit efficacement.
La création d'une nouvelle classe basée sur une certaine classe s'appelle l'héritage. Vous pouvez définir une nouvelle classe en héritant d'une autre classe avec classe nouveau nom de classe <nom de classe d'origine
. La nouvelle classe est appelée "classe enfant" et la classe d'origine est appelée "classe parent".
La méthode d'instance de la classe parent est héritée.
food.rb
require "./menu"
class Food < Menu
end
Lorsqu'une instance d'une classe enfant hérite, la classe enfant hérite de la méthode d'instance de la classe parent.
index.rb
food1=Food.new
puts food1.name
puts food2.info
menu.rb
class Menu
attr_accessor :name
#En traitement
def info
return "#{self.name} #{self.price}Cercle"
end
end
Utilisez ʻattr_accessor` comme précédemment pour ajouter des variables d'instance aux classes enfants.
menu.rb
class Menu
attr_accessor :name
attr_accessor :price
end
Parce que la classe Food hérite de la classe Menu. Il a trois variables d'instance «nom, prix, calorie».
food.rb
class Food < Menu
#Ajouter des calories à la classe alimentaire
attr_accessor :calorie
end
Les méthodes d'instance peuvent être ajoutées de la même manière.
Vous pouvez remplacer une méthode en définissant une méthode dans la classe enfant qui porte le même nom que la méthode parent. C'est ce qu'on appelle le remplacement.
index.rb(Appelez la méthode)
food1~Food.new(...)
food1.calorie=700
puts food1.info
menu.rb(Classe parent)
class Menu
#En traitement
def info
#En traitement
end
end
food.rb(Classe enfant)
class Food < Menu
#En traitement
#Méthode d'écrasement (la méthode d'écrasement est appelée)
def info
#En traitement
end
end
L'instance de classe enfant appelle préférentiellement la méthode définie dans la classe enfant. Par conséquent, si la classe enfant et la classe parente ont des méthodes portant le même nom, le contenu de la méthode de la classe enfant sera écrasé. Vous pouvez également le remplacer avec la méthode initialize.
super
Vous pouvez appeler une méthode avec le même nom dans la classe parente en définissant super
dans la méthode remplacée. Puisque super appelle une méthode, il est nécessaire de passer un argument à super selon la méthode de la classe parente.
menu.rb
class Menu
attr_accessor :name
attr_accessor :price
def initialize(name:, price:)
self.name=name
self.price=price
end
end
food.js
class Food < Menu
attr_accessor :calorie
def initialize(name:, price:, calorie:)
super(name: name, price: price)
self.calorie=calorie
end
end
Une classe qui gère les dates. La classe Date est déjà préparée par Ruby et peut être utilisée sans définir de classe en lisant date avec require
. Les classes déjà préparées nécessitent une manière d'écrire différente de celle des autres </ font>
index.rb
# "/date"n'est pas!
reruire "date"
Vous pouvez créer une instance avec Date.new
. Vous pouvez créer une instance de la date du jour avec Date.today
.
index.rb
require "date"
#Créez une méthode Date en passant "année / mois / jour" comme argument
date1=Date.new(2020,7,8)
puts date
console
2020-07-08
Il existe de nombreuses méthodes d'instance. C'est la méthode "dimanche?" Qui passe, que ce soit dimanche ou non, sous forme de valeur booléenne.
index.rb
require "date"
date1=date1.new(2020,7,11)
puts date1.sunday?
console
false
Une méthode à appeler pour une classe. Le lieu de «aujourd'hui» de «Date.today». Les méthodes de classe peuvent être définies en utilisant def class name.method name
. Contrairement à la méthode d'instance, écrivez le nom de la classe avant le nom de la méthode.
Appelez la méthode de classe avec nom de classe.nom de méthode
.
menu.rb
class Menu
#En traitement
#Renvoie une valeur booléenne indiquant si la date du jour est dimanche
def Menu.is_discount_day?
#Instance de date avec des informations pour la date du jour
today=Date.today
return today.sunday
end
end
puts Menu.is_discount_day?
Appeler une méthode de classe dans une méthode d'instance
menu.rb
class Menu
#En traitement
def get_total_price #Méthode d'instance
if Menu.discount_day? #Appel d'une méthode de classe
#En traitement
end
end
end
Recommended Posts