Menu
CoddyTech

La parola chiave self

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 4 di 65.

Una funzione dichiarata in una classe viene eseguita su un oggetto specifico: quello che precede il punto nella chiamata. All’interno della funzione, la parola chiave self fa riferimento a quell’oggetto.

# 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() esegue describe() con self impostato su my_car, quindi la funzione legge le variabili di quell’auto. Non passi mai self tu stesso:

var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Sono una berlina rossa
taxi.describe() # Sono una berlina gialla

Scrivere self. è facoltativo. All'interno di una funzione di una classe, color da solo indica già il color dell'oggetto, quindi print("I am a %s %s" % [color, model]) fa la stessa cosa.

Ti serve self quando un parametro ha lo stesso nome di una variabile della classe. All'interno della funzione, il nome indica il parametro e self. seleziona la variabile dell'oggetto:

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

Senza self., la riga color = color copia il parametro su se stesso e l’auto mantiene il suo vecchio colore.

challenge icon

Sfida

Facile

Completa le due funzioni della classe Car in car.gd:

  • set_info(year, make, model) memorizza i suoi tre parametri nelle variabili dell'auto con gli stessi nomi
  • describe() restituisce This car is a YEAR MAKE MODEL, ad esempio This car is a 2020 Toyota Corolla

Il codice fornito legge quante auto seguono, quindi una riga per ogni auto (year make model). Crea ogni auto, chiama set_info() e stampa describe() per ogni auto. Per la riga 2020 Toyota Corolla stampa:

This car is a 2020 Toyota Corolla

Il tuo codice va in car.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online