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 / playersIn 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.
Sfida
FacileScrivi la funzione process_data. Prende una stringa text e restituisce una stringa:
- Se
textnon è un numero intero, restituisciInput must be a number! - Se il numero è
0, restituisciCannot divide by zero! - Altrimenti, dividi
100.0per 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionari12Gestione di base degli errori
Che cos'è la gestione degli errori?Convalida dell'inputClausole di guardiaRestituire codici di erroreRiepilogo - Divisione sicuraEsercitati da solo: Compilatore GDScript online