🦊 FoxWiki

Вложенные условия

Иногда одного условия мало. Сначала нужно проверить одно, а потом — внутри этой проверки — ещё одно. Например: сначала убедиться, что перед черепашкой есть блок, а потом — какой именно это блок.

Это называется вложенными условиями — одно if находится внутри другого.


Базовый пример

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Каждый уровень вложенности отступает правее. Это называется индентацией — без неё в глубоко вложенном коде быстро теряешься.


Отступы — не украшение, а необходимость

Посмотри, насколько сложнее читать код без отступов:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Каждый новый уровень — 4 пробела или один Tab. Придерживайся этого всегда.


Когда вложенность — сигнал упростить код

Если условий больше двух-трёх уровней — это обычно знак, что код можно написать чище. Один из способов — ранний выход через return или break:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

Второй вариант называют guard clauses (охранные выражения). Сначала проверяем всё, что может пойти не так, и выходим — а потом пишем основную логику без вложенности.


Объединение через and

Иногда вложенные условия можно заменить одним and:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11

Но это работает только если оба условия независимы и тебе не нужно разное поведение для каждого случая.


Практический пример: система безопасности

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

🚀 Задания

Задание 1 Напиши функцию safeStep(): сначала проверь топливо (если 0 — вернись с false), потом проверь блок впереди (если лава — вернись с false), иначе сделай шаг и вернись с true.

Задание 2 Перепиши этот код с глубокой вложенностью через guard clauses:

Редактор Lua
1
2
3
4
5
6
7

Задание 3 Напиши проверку инвентаря: пройдись по слотам 1–16, для каждого слота получи данные через turtle.getItemDetail(slot). Если слот не пуст — выведи имя предмета и количество.

Задание 4 Добавь к предыдущей задаче вложенную проверку: если найден предмет с именем "minecraft:diamond" — выведи отдельное сообщение "Алмазы в слоте " .. slot .. "!" и останови цикл.

Задание 5 Напиши программу с тремя уровнями проверки: 1) есть ли сигнал редстоуна спереди; 2) если есть — проверь уровень топлива; 3) если топлива достаточно — начни движение. На каждом уровне выводи соответствующее сообщение.

НазадУправление движением
ДалееПараметры и возвращаемые значения