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

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

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

Наприклад, за допомогою заповнювача %s, форматований текст "Hello %s, how are you? може бути легко змінений на "Hello World, how are you?". Зауважте, що заповнювач знаходиться посередині текста; модифікація його без форматованого тексту може бути громіздкою.

Використання в 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

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

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

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

+

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

Integer (ціле)

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

.

Перед f встановіть точність (precision) на 0 знаків після коми. Можна змінити числа в подальшому. Заповнені нулями.

-

Заповнення справа (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