Изменение переменных
Значение переменной может меняться, пока программа работает. Эмма продаёт яйца, и у неё становится больше монет:
local coins = 120
print("Монеты: " .. coins)
coins = coins + 15
print("Монеты: " .. coins)Программа выведет:
Монеты: 120
Монеты: 135В математике coins = coins + 15 не имело бы смысла. Но в программировании = означает «сохранить»: сначала Lua вычисляет правую часть с текущим значением (120 + 15), а затем сохраняет результат, 135, в coins. Старое значение исчезает. Программа выполняется сверху вниз, поэтому первый print всё равно вывел 120.
Обратите внимание, что в третьей строке нет local. local пишут только один раз, при создании переменной. Чтобы изменить её, пишите только имя, = и новое значение. local coins = coins + 15 создало бы вторую переменную с тем же именем. В такой короткой программе вы бы не заметили разницы, но в уроках об условиях и циклах изменение потерялось бы.
Новое значение можно вычислять и из других переменных. А переменная хранит число, а не вычисление, которое его дало:
local carrots = 10
local potatoes = 5
local crops = carrots + potatoes
carrots = 20
print(crops)Программа выведет:
15Когда Lua дошёл до строки с crops, он вычислил 10 + 5 и сохранил 15. Последующее изменение carrots не меняет crops.
Во многих языках есть сокращения вроде coins += 15 (прибавить 15) или coins++ (прибавить 1). В стандартном Lua их нет. (В Luau из Roblox есть +=, но это другой Lua; подробнее — в конце курса.) В Lua всегда пишут целиком, coins = coins + 15:
local coins = 120
coins += 15Lua сообщает:
main.lua:2: syntax error near '+'Как вы знаете из первого урока, синтаксическая ошибка означает, что программа написана не по правилам Lua. Near '+' показывает, где Lua запутался: он понял coins, но не ожидал после него +. Как и при любой синтаксической ошибке, ничего не запускается, даже строки выше.
Та же ошибка будет, если написать в строке только coins + 15. Lua не разрешает вычисление, результат которого нигде не сохраняется, так что хотя бы подсказывает, что вы забыли coins =.
Задание
- 1
Запустите программу. Строки 7 и 8 написаны так, как позволяют некоторые другие языки, и Lua сообщает об ошибке. Исправьте обе строки так, как принято в Lua: строка 7 прибавляет
4 * 5кcoins, а строка 8 вычитает 4 изcarrots. Программа выведет:Монеты: 50, морковь: 10 Монеты: 70, морковь: 6 - 2
На эти деньги Эмма покупает 3 пакетика семян тыквы по 5 монет. В конце программы вычтите их цену из
coins(пусть программа посчитает3 * 5) и выведите ту же строку ещё раз:Монеты: 50, морковь: 10 Монеты: 70, морковь: 6 Монеты: 55, морковь: 6 - 3
Перед уходом домой Эмма вытаскивает с поля ещё 8 морковок. Прибавьте их к
carrotsи выведите строку снова:Монеты: 50, морковь: 10 Монеты: 70, морковь: 6 Монеты: 55, морковь: 6 Монеты: 55, морковь: 14