Statische Funktionen
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 10 von 65.
Eine static func gehört zur Klasse, wie eine statische Variable. Du rufst sie über den Klassennamen auf, ohne Objekt, wie in der Lektion über Dateien: Greeter.greet("Ada"). Eine Klasse kann statische Funktionen mit gewöhnlichen Methoden kombinieren:
# 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) # 1Eine statische Funktion wird ohne ein Objekt ausgeführt und kann daher keine Instanzvariablen oder self verwenden: score innerhalb von is_passing() ist ein Fehler, der gemeldet wird, bevor das Programm ausgeführt wird. Sie kann ihre Parameter, Konstanten, statischen Variablen und andere statische Funktionen verwenden.
from_line() zeigt eine häufige Verwendung: eine statische Funktion, die ein Objekt erstellt und zurückgibt, hier aus einer Textzeile. Dies ist eine zweite Möglichkeit, einen Student zu erstellen, neben Student.new().
Du kannst eine statische Funktion auch auf einem Objekt aufrufen, wie in ada.is_passing(50), aber der Klassenname macht deutlich, dass kein Objekt beteiligt ist.
Aufgabe
EinfachSchreibe den Bewertungscode in zwei Klassen.
Grader in grader.gd hat nur statische Funktionen:
letter(points)gibt bei 90 oder mehr"A", bei 80 oder mehr"B", bei 70 oder mehr"C", bei 60 oder mehr"D"und darunter"F"zurückis_passing(points)gibt bei 60 oder mehrtruezurück
Student in student.gd hat seine Eigenschaften und seinen Konstruktor bereits. Vervollständige:
- die statische Funktion
from_line(line), die eine Zeile wieAda 91am Leerzeichen aufteilt und eine neueStudent-Instanz mit diesem Namen und dieser Punktzahl zurückgibt - die Methode
report(), dieNAME: SCORE (LETTER), passedoderNAME: SCORE (LETTER), failedzurückgibt und dabei die beidenGrader-Funktionen verwendet
Der bereitgestellte Code liest ein, wie viele Studierende folgen, erstellt jede Person mit Student.from_line(), gibt ihren Bericht aus und zählt schließlich die Studierenden, die bestanden haben. Für Ada 91, Bo 42 und Cy 75 gibt er Folgendes aus:
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3Dein Code gehört in grader.gd und student.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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])
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler