Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Stringe di formato in GDScript
Godot offre diversi modi per modificare dinamicamente il contenuto delle stringhe:
Stringhe di formato:
var string = "Ho %s gatti." % "3"Il metodo
String.format():var string = "Ho {0} gatti.".format([3])Concatenazione di stringhe:
var string = "Ho " + str(3) + " gatti."
Questa pagina spiega come utilizzare le stringhe di formato e illustra brevemente il metodo format() e la concatenazione delle stringhe.
Stringhe di formattazione
Le stringhe di formato sono un modo per riutilizzare schemi di testo per creare concisamente stringhe diverse ma simili.
Le stringhe di formato sono esattamente come le stringhe normali, tranne che contengono determinate sequenze di caratteri segnaposto come %s . Questi segnaposto possono quindi essere sostituiti dai parametri passati alla stringa di formato.
Esaminare questo esempio concreto in GDScript:
# Define a format string with placeholder '%s'
var format_string = "We're waiting for %s."
# Using the '%' operator, the placeholder is replaced with the desired value
var actual_string = format_string % "Godot"
print(actual_string)
# Output: "We're waiting for Godot."
I segnaposto iniziano sempre con %, ma il carattere o i caratteri successivi, l'identificatore di formato, determinano come il valore specificato è convertito in una stringa.
Il %s visto nell'esempio precedente è il segnaposto più semplice e funziona per la maggior parte dei casi d'uso: converte il valore con lo stesso metodo con il quale una conversione implicita in String o str() lo convertirebbe. Le stringhe rimangono invariate, i booleani diventano "True" o "False", un int o float diventa un numero decimale, e altri tipi di solito restituiscono i loro dati in una stringa leggibile in chiaro.
Esistono altri format specifiers.
Segnaposto multipli
Le stringhe di formato possono contenere più segnaposto. In tal caso, i valori vengono forniti sotto forma di array, un valore per segnaposto (a meno che non si utilizzi un'indentificatore di formato con *, consultare dynamic padding):
var format_string = "%s was reluctant to learn %s, but now he enjoys it."
var actual_string = format_string % ["Estragon", "GDScript"]
print(actual_string)
# Output: "Estragon was reluctant to learn GDScript, but now he enjoys it."
Da notare che i valori sono inseriti in ordine. Da ricordare che tutti i segnaposto si devono sostituire allo stesso tempo, quindi deve esserci un numero appropriato di valori.
Identificatori di formato
Ci sono altri identificatori di formato oltre a s che si possono utilizzare come segnaposto. Consistono in uno o più caratteri. Alcuni funzionano da soli come s, altri compaiono prima di altri caratteri, altri ancora funzionano solamente con alcuni valori o caratteri.
Tipi di segnaposto
Uno e uno solo di questi deve sempre comparire come ultimo carattere in un identificatore di formato. A parte s, questi richiedono certi tipi di parametri.
|
Semplice conversione a String, tramite lo stesso metodo di conversione implicita a String. |
|
Un singolo carattere Unicode. Accenta un punto di codice Unicode (intero) una stringa di un solo carattere. Supporta valori oltre 255. |
|
Un numero decimale intero. Prevede un numero intero o reale (il quale sarà arrotondato per difetto). |
|
Un numero intero ottale. Prevede un numero intero o reale (il quale sarà arrotondato per difetto). |
|
Un numero esadecimale intero con lettere minuscole. Prevede un numero intero o reale (il quale sarà arrotondato per difetto). |
|
Un numero esadecimale intero con lettere maiuscole. Prevede un numero intero o reale (il quale sarà arrotondato per difetto). |
|
Un numero decimale reale. Prevede un numero intero o reale. |
|
Un vettore. Prevede qualsiasi oggetto vettore di tipo float o int ( |
Modificatori di segnaposto
Questi caratteri compaiono prima di quelli menzionati precedentemente. Alcuni di loro funzionano solo in determinate condizioni.
|
Negli identificatori numerici, mostra il segno + se è positivo. |
Numero intero |
Imposta l'imbottitura. Imbottito con spazi o con zeri se l'intero comincia con |
|
Prima di |
|
Spaziatura da destra anziché da sinistra. |
|
Spaziatura dinamica, prevede che un ulteriore parametro intero imposti la spaziatura interna o la precisione dopo |
Padding
I caratteri . (punto), * (asterisco), - (segno meno) e le cifre (0-9) sono usati per la spaziatura. Questo permette di stampare più valori allineati verticalmente come se fossero in una colonna, a condizione che sia usato un font a larghezza fissa.
Per imbottire una stringa fino a una lunghezza minima, aggiungere un intero all'identificatore:
print("%10d" % 12345)
# output: " 12345"
# 5 leading spaces for a total length of 10
Se l'intero inizia con 0, i valori interi vengono imbottiti con zeri anziché spazi vuoti:
print("%010d" % 12345)
# output: "0000012345"
La precisione può essere specificata per i numeri reali aggiungendo un . (punto) con un intero che lo segue. Senza un intero dopo ., viene usata una precisione di 0, arrotondando al valore intero. L'intero da usare per la spaziatura deve apparire prima del punto.
# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space
Il carattere - indica una spaziatura a destra anziché a sinistra, utile per allineare il testo a destra:
print("%-10d" % 12345678)
# Output: "12345678 "
# 2 trailing spaces
Spaziatura dinamica
Utilizzando il carattere * (asterisco), è possibile impostare la spaziatura o la precisione senza modificare la stringa di formato. È utilizzato al posto di un numero intero nell'identificatore di formato. I valori per la spaziatura e la precisione vengono poi passati durante la formattazione:
var format_string = "%*.*f"
# Pad to length of 7, round to 3 decimal places:
print(format_string % [7, 3, 8.8888])
# Output: " 8.889"
# 2 leading spaces
È comunque possibile imbottire con zeri nei segnaposto interi aggiungendo 0 prima di *:
print("%0*d" % [2, 3])
# Output: "03"
Sequenza di escape
Per inserire un carattere letterale % in una stringa di formato, è necessario sottoporlo a escape per evitare che sia interpretato come un segnaposto. Ciò si ottiene raddoppiando il carattere:
var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"
Metodo di formattazione di stringa
Esiste anche un altro modo per formattare testo in GDScript, ovvero il metodo String.format(). Sostituisce tutte le occorrenze di una chiave nella stringa con il valore corrispondente. Il metodo può gestire array o dizionari per le coppie di chiave/valore.
Gli array si possono usare in stile chiave, indice o misto (vedere esempi sotto). Con gli array, l'ordine è importante solo per lo stile indice o misto.
Un breve esempio in GDScript:
# Define a format string
var format_string = "We're waiting for {str}"
# Using the 'format' method, replace the 'str' placeholder
var actual_string = format_string.format({"str": "Godot"})
print(actual_string)
# Output: "We're waiting for Godot"
Esempi del metodo di formattazione
I seguenti sono alcuni esempi di come usare le varie invocazioni del metodo String.format().
Tipo |
Stile |
Esempio |
Risultato |
Dizionario |
chiave |
|
Ciao, Godette v3.0! |
Dizionario |
indice |
|
Ciao, Godette v3.0! |
Dizionario |
misto |
|
Ciao, Godette v3.0! |
Array |
chiave |
|
Ciao, Godette v3.0! |
Array |
indice |
|
Ciao, Godette v3.0! |
Array |
misto |
|
Ciao, Godette v3.0! |
Array |
senza indice |
|
Ciao, Godette v3.0! |
I segnaposto si possono anche personalizzare quando si usa String.format, ecco alcuni esempi di questa funzionalità.
Tipo |
Esempio |
Risultato |
Infisso (predefinito) |
|
Ciao, Godette v3.0 |
Suffisso |
|
Ciao, Godette v3.0 |
Prefisso |
|
Ciao, Godette v3.0 |
Potrebbe essere utile combinare il metodo String.format e l'operatore %, poiché String.format non è in grado di manipolare la rappresentazione dei numeri.
Esempio |
Risultato |
|
Ciao, Godette v3.11 |
Concatenazione di stringhe
È anche possibile combinare le stringhe concatenandole insieme, tramite l'operatore +.
# Define a base string
var base_string = "We're waiting for "
# Concatenate the string
var actual_string = base_string + "Godot"
print(actual_string)
# Output: "We're waiting for Godot"
Quando si utilizza la concatenazione di stringhe, è necessario convertire i valori che non sono stringhe attraverso la funzione str(). Non è possibile specificare il formato stringa dei valori convertiti.
var name_string = "Godette"
var version = 3.0
var actual_string = "Hi, " + name_string + " v" + str(version) + "!"
print(actual_string)
# Output: "Hi, Godette v3!"
A causa di queste limitazioni, le stringhe di formato o il metodo format() sono spesso una scelta migliore. In molti casi, la concatenazione di stringhe è anche meno leggibile.
Nota
Nel codice C++ di Godot, è possibile accedere alle stringhe di formato di GDScript attraverso la funzione ausiliare vformat() nell'header di Variant.