Menu
CoddyTech

Słowo kluczowe self

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

Funkcja zadeklarowana w klasie działa na jednym konkretnym obiekcie: tym, który znajduje się przed kropką w wywołaniu. Wewnątrz funkcji słowo kluczowe self odnosi się do tego obiektu.

# car.gd
class_name Car
extends RefCounted

var color: String = "Red"
var model: String = "Sedan"

func describe() -> void:
	print("I am a %s %s" % [self.color, self.model])

my_car.describe() uruchamia describe() z self ustawionym na my_car, więc funkcja odczytuje zmienne tego samochodu. Nigdy nie przekazujesz self samodzielnie:

var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Jestem czerwonym sedanem
taxi.describe() # Jestem żółtym sedanem

Zapisywanie self. jest opcjonalne. Wewnątrz funkcji klasy samo color oznacza już color obiektu, więc print("I am a %s %s" % [color, model]) robi to samo.

Potrzebujesz self, gdy parametr ma taką samą nazwę jak zmienna klasy. Wewnątrz funkcji ta nazwa oznacza parametr, a self. wskazuje zmienną obiektu:

func repaint(color: String) -> void:
	self.color = color

Bez self. wiersz color = color przypisuje parametr do samego siebie, a samochód zachowuje swój stary kolor.

challenge icon

Wyzwanie

Łatwy

Uzupełnij dwie funkcje klasy Car w pliku car.gd:

  • set_info(year, make, model) zapisuje trzy parametry w zmiennych samochodu o tych samych nazwach
  • describe() zwraca This car is a YEAR MAKE MODEL, na przykład This car is a 2020 Toyota Corolla

Dostarczony kod odczytuje liczbę kolejnych samochodów, a następnie po jednym wierszu na samochód (year make model). Tworzy każdy samochód, wywołuje set_info() i wypisuje wynik describe() dla każdego samochodu. Dla wiersza 2020 Toyota Corolla wypisuje:

This car is a 2020 Toyota Corolla

Twój kod umieść w pliku car.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 cars: Array[Car] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var car := Car.new()
		car.set_info(int(parts[0]), parts[1], parts[2])
		cars.append(car)
	for car in cars:
		print(car.describe())
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