Funkcje statyczne
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 10 z 65.
static func należy do klasy, podobnie jak zmienna statyczna. Wywołujesz ją za pomocą nazwy klasy, bez obiektu, tak jak w lekcji o plikach: Greeter.greet("Ada"). Klasa może łączyć funkcje statyczne ze zwykłymi metodami:
# 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) # 1Funkcja statyczna działa bez obiektu, więc nie może używać zmiennych instancji ani self: score w is_passing() to błąd zgłaszany przed uruchomieniem programu. Może używać swoich parametrów, stałych, zmiennych statycznych i innych funkcji statycznych.
from_line() pokazuje typowe zastosowanie: funkcję statyczną, która tworzy i zwraca obiekt, w tym przypadku na podstawie wiersza tekstu. To drugi sposób tworzenia obiektu Student, obok Student.new().
Możesz też wywołać funkcję statyczną na obiekcie, tak jak w ada.is_passing(50), ale nazwa klasy jasno wskazuje, że nie chodzi o żaden obiekt.
Wyzwanie
ŁatwyNapisz kod oceniający w dwóch klasach.
Grader w pliku grader.gd ma tylko funkcje statyczne:
letter(points)zwraca"A"dla 90 lub więcej,"B"dla 80 lub więcej,"C"dla 70 lub więcej,"D"dla 60 lub więcej, a poniżej tego progu"F"is_passing(points)zwracatruedla 60 lub więcej
Student w pliku student.gd ma już swoje właściwości i konstruktor. Uzupełnij:
- funkcję statyczną
from_line(line), która dzieli wiersz, taki jakAda 91, w miejscu spacji i zwraca nowy obiektStudentz tym imieniem i wynikiem - metodę
report(), która zwracaNAME: SCORE (LETTER), passedalboNAME: SCORE (LETTER), failed, używając obu funkcjiGrader
Dostarczony kod odczytuje, ilu studentów występuje dalej, tworzy każdego z nich za pomocą Student.from_line(), wyświetla jego raport, a na końcu zlicza studentów, którzy zdali. Dla Ada 91, Bo 42 i Cy 75 wyświetla:
Ada: 91 (A), passed
Bo: 42 (F), failed
Cy: 75 (C), passed
Passed: 2 of 3Twój kod umieść w plikach grader.gd i student.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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])
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online