Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Форматований текст GDScript

GDScript пропонує функцію під назвою форматований текст, яка дозволяє повторно використовувати текстові шаблони для створення короткого, але схожого тексту.

Форматований текст (рядок, строка) подібний до звичайного тексту (рядка, строки), за винятком того, що вони містять певні послідовності символів-заповнювачів. Ці заповнювачі потім можуть бути легко замінені параметрами, переданими до форматованого тексту.

As an example, with %s as a placeholder, the format string "Hello %s, how are you?" can easily be changed to "Hello World, how are you?". Notice the placeholder is in the middle of the string; modifying it without format strings could be cumbersome.

Використання в GDScript

Ознайомтеся з цим конкретним прикладом 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."

Заповнювачі завжди починаються з символу %, але наступний символ, або символи, специфікатор формату, вони визначають, як задане значення перетворюється на текст.

Видимий в наведеному вище прикладі %s є найпростішим заповнювачем і працює для більшості випадків: він перетворює значення тим же методом, що і перетворення String, або str(). Текст залишається незмінним, булеві (логічні) перетворюються на "True", або "False", цілі, чи дійсні, числа перетворюється на десяткові, інші типи зазвичай повертають свої дані у читабельний для людини текст.

Існує також інший спосіб форматування тексту в GDScript, а саме метод String.format(). Він замінює всі входження ключа в тексті відповідним значенням. Метод може обробляти масиви, або словники, для пар ключ/значення.

Масиви можна використовувати як ключ, індекс, або змішаний стиль (див. Приклади нижче). Порядок має значення лише тоді, коли використовується індекс, або змішаний стиль масиву.

Короткий приклад у 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"

Є й інші format specifiers, але вони застосовуються лише при використанні оператора %.

Кілька заповнювачів

Форматований текст може містити кілька заповнювачів. У такому випадку значення передаються у вигляді масиву, одне значення на заповнювач (якщо не використовується специфікатор формату з *, див. 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."

Запримітьте, що значення вставляються по порядку. Пам'ятайте, що всі заповнювачі повинні бути замінені відразу, тому повинно бути відповідне число значень.

Специфікатори формату

Окрім s існують інші специфікатори формату, які можна використовувати в заповнювачах. Вони складаються з одного, або кількох символів. Деякі з них працюють так само, як s, деякі з’являються перед іншими символами, деякі працюють лише з певними значеннями, або символами.

Типи заповнювачів

Один, і тільки один, з них завжди повинен відображатися як останній символ у специфікаторі формату. Крім s, для них потрібні певні типи параметрів.

s

Просте перетворення в String (текст, строку) тим самим методом, що і неявне перетворення.

c

Єдиний символ Unicode. Очікує одне 8-бітове ціле число (0-255) для кодової точки, або односимвольного тексту (строки).

d

Десятковий інтеграл. Очікує інтегральне, або дійсне, число (буде в десятковому вигляді).

o

Вісімкове інтегральне число. Очікує інтегральне, або дійсне, число (буде виведене).

x

A hexadecimal integral number with lower-case letters. Expects an integral or real number (will be floored).

X

A hexadecimal integral number with upper-case letters. Expects an integral or real number (will be floored).

f

Десяткове дійсне число. Очікує ціле, чи дійсне, число.

v

A vector. Expects any float or int-based vector object ( Vector2, Vector3, Vector4, Vector2i, Vector3i or Vector4i). Will display the vector coordinates in parentheses, formatting each coordinate as if it was an %f, and using the same modifiers.

Модифікатори заповнювачів

Ці символи з'являються раніше. Деякі з них працюють лише за певних умов.

+

У специфікаторах чисел, **покажіть + знак**(show + sign), якщо число позитивне.

Integer (ціле)

Set padding. Padded with spaces or with zeroes if integer starts with 0 in an integer or real number placeholder. The leading 0 is ignored if - is present. When used after ., see ..

.

Before f or v, set precision to 0 decimal places. Can be followed up with numbers to change. Padded with zeroes.

-

Заповнення справа (Pad to the right), а не зліва.

*

Динамічний відступ, очікує додатковий інтегральний параметр, що встановлює відступ або точність після ., дивись динамічний відступ.

Фаска

Символи . (крапка), * (зірочка), - (мінус) і цифри (0-9) використовуються для відступів. Це дозволяє надрукувати декілька значень, вирівняних вертикально, як у стовпчику, за умови використання шрифту фіксованої ширини.

Щоб заповнити рядок до мінімальної довжини додайте ціле число до специфікатора:

print("%10d" % 12345)
# output: "     12345"
# 5 leading spaces for a total length of 10

Якщо ціле число починається з 0, інтегральні значення заміщуються нулями замість пробілу:

print("%010d" % 12345)
# output: "0000012345"

Точність для дійсних чисел можна задати, додавши .``(*крапку*) з цілим числом, що слідує за нею. Якщо після ``. немає цілого числа, використовується точність 0, округлюючи до цілого значення. Ціле число, яке буде використано для пробілів, повинно з’явитися перед крапкою.

# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space

Символ - буде викликати відступи справа , а не зліва, корисний для правильного вирівнювання тексту:

print("%-10d" % 12345678)
# Output: "12345678  "
# 2 trailing spaces

Динамічний відступ

За допомогою символу * (зірочки), можна встановити відступ або точність, не змінюючи рядок форматування. Він використовується замість цілого числа у специфікаторі формату. Потім при форматуванні передаються значення для заповнення та точності:

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

Все ще можна заповнити нулями в цілочисельних заповнювачах, додавши 0 перед *:

print("%0*d" % [2, 3])
# Output: "03"

Керуюча (Escape) послідовність

Щоб вставити символ % у форматований рядок, його потрібно приховати, щоб він перестав читатися як заповнювач. Це робиться шляхом подвоєння символа:

var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"

Приклади методів форматування

Далі слідують кілька прикладів використання різних застосувань методу String.format .

Тип

Стиль

Приклад

Результат

Словник

ключ

"Привіт, {name} {version}!".format({"name":"Godette", "version":"3.0"})

Привіт, Godette 3.0!

Словник

індекс

"Привіт, {0} {1}!".format({"0":"Godette", "1":"3.0"})

Привіт, Godette 3.0!

Словник

суміш

"Привіт, {0} {version}!".format({"0":"Godette", "version":"3.0"})

Привіт, Godette 3.0!

Масив

ключ

"Привіт, {name} {version}!".format([["version","3.0"], ["name","Godette"]])

Привіт, Godette 3.0!

Масив

індекс

"Привіт, {0} {1}!".format(["Godette","3.0"])

Привіт, Godette 3.0!

Масив

суміш

"Привіт, {name} {0}!".format([3.0, ["name","Godette"]])

Привіт, Godette 3.0!

Масив

без індекса

"Привіт, {} {}!".format(["Godette", 3.0], "{}")

Привіт, Godette 3.0!

Заповнювачі також можуть бути налаштовані при використанні String.format. Далі кілька прикладів цього функціоналу.

Тип

Приклад

Результат

Інфікс (за замовчанням)

"Привіт, {0} {1}".format(["Godette", "3.0"], "{_}")

Привіт, Godette v3.0

Постфікс

"Привіт, 0% 1%".format(["Godette", "3.0"], "_%")

Привіт, Godette v3.0

Префікс

"Привіт, %0 %1".format(["Godette", "3.0"], "%_")

Привіт, Godette v3.0

Поєднання метода String.format з оператором може бути корисним, оскільки String.format не має способу маніпулювати поданням чисел.

Приклад

Результат

"Привіт, {0} {version}".format({0:"Godette", "version":"%0.2f" % 3.114})

Привіт, Godette v3.11