Menu
CoddyTech

Klasy a obiekty

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 3 z 65.

Klasa i jej obiekty przechowują różne rzeczy. Stała const w klasie należy do samej klasy: istnieje jedna wartość, którą odczytujesz za pomocą nazwy klasy, bez tworzenia obiektu.

# dog.gd
class_name Dog
extends RefCounted

const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"
print(Dog.SPECIES) # Canis familiaris

Linie var opisują, co zawiera każdy obiekt. Każdy obiekt utworzony za pomocą new() otrzymuje własną kopię tych zmiennych, rozpoczynającą się od ich wartości domyślnych:

var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed

Zmiana dog1 pozostawia dog2 bez zmian. Obiekt również może odczytać stałą: dog1.SPECIES ma tę samą wartość co Dog.SPECIES.

Obiekt ma tylko te zmienne, które deklaruje jego klasa. dog1.color = "brown" zatrzymuje program z błędem, ponieważ Dog nie ma zmiennej color. Każda zmienna, której potrzebuje obiekt, musi znaleźć się w klasie.

challenge icon

Wyzwanie

Łatwy

Uzupełnij klasę Student w pliku student.gd:

  • stała SCHOOL o wartości "Godot High School", współdzielona przez całą klasę
  • zmienna typu String o nazwie student_name
  • zmienna typu String o nazwie grade, której początkową wartością jest "N/A"

Dostarczony kod odczytuje liczbę kolejnych uczniów, a następnie po jednym wierszu na ucznia: imię i nazwisko, opcjonalnie po którym następuje spacja i ocena. Tworzy obiekt Student dla każdego wiersza, ustawia jego nazwę i ustawia jego ocenę tylko wtedy, gdy wiersz ją zawiera. Następnie wyświetla Student.SCHOOL i każdego ucznia. Dla wierszy Alice A i Bob wyświetla:

School: Godot High School
Alice has grade A
Bob has grade N/A

Umieść swój kod w pliku 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 students: Array[Student] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		var student := Student.new()
		student.student_name = parts[0]
		if parts.size() > 1:
			student.grade = parts[1]
		students.append(student)
	print("School: %s" % Student.SCHOOL)
	for student in students:
		print("%s has grade %s" % [student.student_name, student.grade])
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