Menu
CoddyTech

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) # 1

Funkcja 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.

challenge icon

Wyzwanie

Łatwy

Napisz 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) zwraca true dla 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 jak Ada 91, w miejscu spacji i zwraca nowy obiekt Student z tym imieniem i wynikiem
  • metodę report(), która zwraca NAME: SCORE (LETTER), passed albo NAME: SCORE (LETTER), failed, używając obu funkcji Grader

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 3

Twó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])
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online