Menu
CoddyTech

Clausole di guardia

Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 68 di 78.

Quando una funzione deve eseguire diversi controlli, annidare un if dentro un altro spinge il lavoro vero e proprio sempre più in profondità:

func buy(gold: int, price: int) -> String:
	if price > 0:
		if gold >= price:
			return "Bought! %d gold left" % (gold - price)
		else:
			return "Not enough gold"
	else:
		return "Invalid price"

Una clausola di guardia ribalta la situazione. Controlla un caso non valido all’inizio della funzione e termina subito con return. Il codice dopo le clausole di guardia viene eseguito solo con valori validi e non richiede annidamenti:

func buy(gold: int, price: int) -> String:
	if price <= 0:
		return "Invalid price"
	if gold < price:
		return "Not enough gold"
	return "Bought! %d gold left" % (gold - price)

buy(50, 30) restituisce Bought! 20 gold left, buy(10, 30) restituisce Not enough gold e buy(50, 0) restituisce Invalid price.

L'ordine delle condizioni di protezione è importante: la condizione che protegge una riga deve precederla. Controlla il testo con is_valid_int() prima di usare il numero e controlla che non sia zero prima di dividerlo:

func share(coins: int, players: int) -> int:
	if players <= 0:
		return 0
	return coins / players

In una funzione -> void, una guardia è un return da solo. All’interno di un ciclo, continue funziona come guardia per un elemento: salta un elemento non valido e il ciclo prosegue con quello successivo.

challenge icon

Sfida

Facile

Scrivi la funzione process_data. Prende una stringa text e restituisce una stringa:

  1. Se text non è un numero intero, restituisci Input must be a number!
  2. Se il numero è 0, restituisci Cannot divide by zero!
  3. Altrimenti, dividi 100.0 per il numero e restituisci il risultato con due cifre decimali

Ad esempio, process_data("8") restituisce 12.50, process_data("-5") restituisce -20.00 e process_data("abc") restituisce Input must be a number!.

Scrivi i due controlli come clausole di guardia all'inizio della funzione.

Provalo tu

func process_data(text: String):
	# Scrivi il codice qui
	pass
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 Logica e flusso

Esercitati da solo: Compilatore GDScript online