Fonctions statiques
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 10 sur 65.
Une static func appartient à la classe, comme une variable statique. Vous l’appelez via le nom de la classe, sans objet, comme dans la leçon sur les fichiers : Greeter.greet("Ada"). Une classe peut combiner des fonctions statiques et des méthodes ordinaires :
# student.gd
class_name Student
extends RefCounted
static var count: int = 0
var student_name: String
var score: int
func _init(new_name: String, new_score: int) -> void:
student_name = new_name
score = new_score
count += 1
static func is_passing(points: int) -> bool:
return points >= 60
static func from_line(line: String) -> Student:
var parts := line.split(" ")
return Student.new(parts[0], int(parts[1]))print(Student.is_passing(72)) # true
var ada := Student.from_line("Ada 91")
print(ada.score) # 91
print(Student.count) # 1Une fonction statique s’exécute sans objet ; elle ne peut donc pas utiliser de variables d’instance ni self : score dans is_passing() est une erreur signalée avant l’exécution du programme. Elle peut utiliser ses paramètres, des constantes, des variables statiques et d’autres fonctions statiques.
from_line() illustre un usage courant : une fonction statique qui construit et renvoie un objet, ici à partir d’une ligne de texte. C’est une deuxième façon de créer un Student, en plus de Student.new().
Tu peux aussi appeler une fonction statique sur un objet, comme dans ada.is_passing(50), mais le nom de la classe indique clairement qu’aucun objet n’est impliqué.
Défi
FacileÉcrivez le code de notation dans deux classes.
Grader dans grader.gd ne contient que des fonctions statiques :
letter(points)renvoie"A"pour 90 ou plus,"B"pour 80 ou plus,"C"pour 70 ou plus,"D"pour 60 ou plus et"F"en dessousis_passing(points)renvoietruepour 60 ou plus
Student dans student.gd possède déjà ses propriétés et son constructeur. Complétez :
- la fonction statique
from_line(line), qui sépare une ligne commeAda 91à l’espace et renvoie un nouvel objetStudentavec ce nom et ce score - la méthode
report(), qui renvoieNAME: SCORE (LETTER), passedouNAME: SCORE (LETTER), failed, en utilisant les deux fonctions deGrader
Le code fourni lit le nombre d’étudiants qui suivent, crée chacun d’eux avec Student.from_line(), affiche son rapport et compte enfin les étudiants ayant réussi. Pour Ada 91, Bo 42 et Cy 75, il affiche :
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3Votre code doit être placé dans grader.gd et student.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d’entrée/sortie fourni : conservez-le tel quel
var count := int(OS.read_string_from_stdin())
var passed := 0
for i in count:
var student := Student.from_line(OS.read_string_from_stdin())
print(student.report())
if Grader.is_passing(student.score):
passed += 1
print("Passed: %d of %d" % [passed, count])
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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne