Переменная: var и let | Курс по Nim, урок 5
Необходимые знания
Урок 1, Терминал и папки: первые команды: команда cd. Урок 3, Первая программа: от текста к исполняемому: echo, сохранение файла, команда nim c -r, ключ --hints:off. Урок 4, Ошибка компилятора: как её читать: папка nim-kurs в редакторе, создание файла, сообщение cannot open, адрес ошибки, сообщение undeclared identifier.
Чем закончился урок 4
Программа из файла traty.nim печатает две строки. Вторая строка у вас может быть своя.
Откройте терминал и перейдите в папку nim-kurs. Эту же папку откройте в редакторе кода.
Так выглядит traty.nim после урока 4. Если файла нет или он не собирается, сохраните в него этот текст.
Пример traty.nim
echo "Учёт трат"
echo "Программа считает мои расходы"
На Mac команды этого урока не запускались.
Что такое переменная
Программа учёта трат будет считать сумму. Пока идёт счёт, сумму надо хранить. Значение это число, текст или другие данные, с которыми работает программа. Переменная это имя для значения, которое программа хранит, пока работает.
var объявляет переменную, то есть вводит в программу новое имя. Вид значения называется типом, его разберу в уроке 6.
Создайте файл shagi.nim в папке nim-kurs. Наберите строки из примера в английской раскладке и сохраните файл.
Пример shagi.nim
var steps = 3000
echo steps
steps = 4500
echo steps
steps = steps + 200
echo steps
Наберите в терминале:
nim c -r --hints:off shagi.nim
Вывод в PowerShell и Linux:
3000
4500
4700
Строки вывода по порядку:
1) 3000: строка 1 файла объявила steps со значением 3000, строка 2 напечатала значение.
2) 4500: строка 3 записала новое значение вместо старого.
3) 4700: строка 5 прибавила 200 к текущему значению.
echo steps без кавычек печатает значение переменной. echo "steps" с кавычками печатает слово steps.
Присваивание: что делает знак =
Знак = записывает значение справа в переменную слева. Такое действие называется присваиванием.
Возьмите строку 5 примера, steps = steps + 200. Как равенство она неверна: число не равно себе плюс 200. Программа выполняет её по шагам:
1) читает текущее значение steps: 4500
2) прибавляет 200: получается 4700
3) записывает 4700 в steps, старое значение 4500 заменяется
let: значение без новой записи
let тоже объявляет переменную. Значение задаётся при объявлении, заменить его потом нельзя.
Откройте файл shagi.nim в редакторе. В строке 1 замените var на let и сохраните файл. Снова наберите:
nim c -r --hints:off shagi.nim
Имя Anna в путях у вас будет своё.
Вывод в PowerShell:
C:\Users\Anna\nim-kurs\shagi.nim(3, 1) Error: 'steps' cannot be assigned to
Вывод в Linux:
/home/anna/nim-kurs/shagi.nim(3, 1) Error: 'steps' cannot be assigned to
Адрес: строка 3, столбец 1. Перевод: "переменной 'steps' нельзя присвоить значение". Строка 2 ошибки не дала: читать значение такой переменной можно. Исправлять shagi.nim не нужно.
Переменную, значение которой менять незачем, объявляйте с let. Случайная запись нового значения остановит сборку, и ошибка будет видна сразу. Остальные объявляйте с var.
Как компилятор сравнивает имена
Имя состоит из букв, цифр и подчёркиваний _ и начинается с буквы. Подчёркивание не ставится в конец имени и два раза подряд.
Два имени компилятор считает одним по таким правилам:
1) первая буква совпадает точно: большая с большой, маленькая с маленькой
2) остальные символы совпадают, только у английских букв большая и маленькая считаются одной
3) подчёркивания при сравнении не считаются
Создайте файл imena.nim в папке nim-kurs. Наберите строки из примера и сохраните файл.
Пример imena.nim
var total_sum = 100
totalSum = totalSum + 50
var TotalSum = 7
echo total_sum
echo totalSum
echo TotalSum
Наберите:
nim c -r --hints:off imena.nim
Вывод в PowerShell и Linux:
150
150
7
Строки вывода по порядку:
1) 150: строка 4 печатает total_sum. Строка 2 уже изменила эту переменную под именем totalSum: к 100 прибавилось 50.
2) 150: строка 5 печатает ту же переменную.
3) 7: строка 6 печатает TotalSum. Первая буква у этого имени большая, поэтому строка 3 объявила другую переменную.
В своём коде пишите каждое имя везде одинаково: при чтении total_sum и totalSum выглядят как две переменные.
Ошибки в этих командах
Строки ниже показаны для PowerShell. В Linux отличается только начало пути.
':' or '=' expected. В строке var steps нет значения, поэтому ошибка стоит строкой выше адреса:
C:\Users\Anna\nim-kurs\shagi.nim(2, 1) Error: ':' or '=' expected, but got 'echo'
Перевод: "ожидалось ':' или '=', получено 'echo'". Допишите значение: var steps = 3000. Сохраните файл и снова соберите его. Знак : разберу в уроке 6.
undeclared identifier. Сообщение для строки steps = 3000, перед которой нет var:
C:\Users\Anna\nim-kurs\shagi.nim(1, 1) Error: undeclared identifier: 'steps'
candidates (edit distance, scope distance); see '--spellSuggest':
(2, 2): 'items'
Перевод: "необъявленное имя: 'steps'". Пара (2, 2) не адрес. Кандидат items, это имя из самого Nim, в вашем файле его нет. На него имя не заменяйте. Проверьте причины, исправьте строку, сохраните файл и снова соберите его:
1) строки с var нет или она стоит ниже: объявите переменную выше
2) опечатка: сравните имя с именем в строке var
3) другая первая буква: Steps и steps, это разные имена. Исправьте букву по строке с var
Задание
Откройте файл traty.nim в редакторе. Строки с echo оставьте. Ниже допишите в английской раскладке:
1) объявите с var переменную total со значением 0
2) прибавьте к total число 350, следующей строкой 1200
3) напечатайте значение total
Прибавление пишется, как строка 5 примера shagi.nim: var в ней нет, имя стоит слева и справа от =.
Сохраните файл. Наберите:
nim c -r --hints:off traty.nim
Снова откройте файл traty.nim в редакторе. Замените var на let и сохраните файл. Снова наберите команду сборки.
Верно, если:
1) с var выводятся две прежние строки, а за ними 1550
2) с let компилятор печатает 'total' cannot be assigned to, адрес указывает на строку, где прибавляется 350
Если вместо 1550 вывелось 1200, строка total = 1200 заменила значение. Справа от = должно стоять и имя total: исправьте строку, сохраните файл и снова соберите его.
Откройте файл, верните var, сохраните файл и соберите его ещё раз: снова 1550. С этой версии traty.nim начнётся урок 6.
Итоги
= записывает значение справа в переменную слева. Значение переменной с var можно заменить, с let нельзя. В именах подчёркивания не считаются. Большая и маленькая английские буквы различаются только в первой букве имени.
В уроке 6 разберу тип значения: int, float, string, bool.
Код урока
Примеры этого урока лежат в репозитории курса, папка lesson_05.
Предыдущий урок: Ошибка компилятора: как её читать
Следующий урок: Тип значения: int, float, string, bool
Подписывайтесь на мой Telegram канал
Авторизуйтесь, чтобы оставить комментарий.
Нет комментариев.
Тут может быть ваша реклама
Пишите info@aisferaic.ru