Тип значения: int, float, string, bool | Курс по Nim, урок 6
Необходимые знания
Урок 1, Терминал и папки: первые команды: команда cd. Урок 4, Ошибка компилятора: как её читать: папка nim-kurs в редакторе, создание файла, сообщение cannot open, команда nim c -r --hints:off, адрес ошибки, кандидаты в сообщении. Урок 5, Переменная: var и let: объявление, присваивание, сообщение ':' or '=' expected.
Чем закончился урок 5
Программа из файла traty.nim печатает три строки, последняя из них сумма 1550. Вторая строка у вас может быть своя.
Откройте терминал и перейдите в папку nim-kurs. Эту же папку откройте в редакторе кода.
Так выглядит traty.nim после урока 5. Если файла нет или он не собирается, сохраните в него этот текст.
Пример traty.nim
echo "Учёт трат"
echo "Программа считает мои расходы"
var total = 0
total = total + 350
total = total + 1200
echo total
На Mac команды этого урока не запускались.
Что такое тип
В строке var total = 0 файла traty.nim значение это число. В строке echo "Учёт трат" значение это текст.
Тип это вид значения. От типа зависит, что можно делать со значением: к числу можно прибавить 350, к тексту нельзя. При сборке компилятор проверяет типы: можно ли сделать со значением то, что написано в программе.
Типы этого урока:
1) int: целое число, например 7 или -5
2) float: дробное число, например 21.5. Дробная часть отделяется точкой
3) string: текст в кавычках, например "Казань". Такое значение называется строкой. Дальше в уроке "строка" значит строку файла или вывода
4) bool: одно из двух значений, true (истина, да) или false (ложь, нет). По значению bool программа выбирает, что делать дальше. Разберу это в уроке 11
Тип по значению
В var total = 0 тип не написан. Компилятор определяет его по значению: 0 без точки и без кавычек, это int. Такой же тип получает переменная total.
Создайте файл pogoda.nim в папке nim-kurs. Наберите строки из примера в английской раскладке, кроме Казань, и сохраните файл.
Пример pogoda.nim
let days = 7
let temperature = 21.5
let city = "Казань"
let rain = false
echo days
echo temperature
echo city
echo rain
Наберите в терминале:
nim c -r --hints:off pogoda.nim
Вывод в PowerShell и Linux:
7
21.5
Казань
false
Строки вывода по порядку:
1) 7: строка 5 файла печатает days, тип int.
2) 21.5: строка 6 печатает temperature, тип float.
3) Казань: строка 7 печатает city, тип string. Кавычки отмечают границы текста в коде и не печатаются.
4) false: строка 8 печатает rain, тип bool.
echo 350 и echo "350" печатают одно и то же, а типы разные: int и string. К 350 можно прибавить число, к "350" нельзя.
Тип, записанный явно
Тип можно записать явно, знаком : после имени. У var и let запись одинакова:
var имя: тип = значение
В уроке 5 строка var steps дала сообщение ':' or '=' expected. После имени должен стоять : с типом или = со значением. Иначе тип взять неоткуда.
Если значения при объявлении нет, тип записывается обязательно: var days: int. Такая переменная получает значение по умолчанию, у int это 0. У let значение обязательно.
Проверка типов при сборке
Создайте файл nedelya.nim в папке nim-kurs. Наберите строки из примера и сохраните файл.
Пример nedelya.nim
var days: int = 7
echo days
days = "неделя"
echo days
Наберите:
nim c -r --hints:off nedelya.nim
Имя Anna в путях у вас будет своё.
Вывод в PowerShell:
C:\Users\Anna\nim-kurs\nedelya.nim(3, 8) Error: type mismatch: got 'string' for '"неделя"' but expected 'int'
Вывод в Linux:
/home/anna/nim-kurs/nedelya.nim(3, 8) Error: type mismatch: got 'string' for '"неделя"' but expected 'int'
Адрес: строка 3, столбец 8, там начинается значение "неделя". Перевод: "несовпадение типов: получено 'string' для '"неделя"', ожидался 'int'".
7 не напечаталось, хотя echo days стоит выше. Сборка не прошла, поэтому программа не запускалась. Ошибка найдена до запуска: ждать, пока программа дойдёт до строки 3, не нужно.
Откройте файл nedelya.nim в редакторе. Замените строку 1 на var days = 7 и сохраните файл. Снова наберите команду сборки. Сообщение то же: компилятор определил int по значению 7.
Тип переменной задаётся при объявлении и потом не меняется.
Поэтому запишите значение нужного типа. Снова откройте файл nedelya.nim в редакторе. Замените строку 3 на days = 8 и сохраните файл. Снова наберите команду сборки. Программа напечатает 7 и 8.
Ошибки в этих командах
Строки ниже показаны для PowerShell. В Linux отличается только начало пути. После каждой правки сохраните файл и снова соберите его.
':' or '=' expected. Знак : пропущен в строке var days int = 7:
C:\Users\Anna\nim-kurs\nedelya.nim(1, 10) Error: ':' or '=' expected, but got 'int'
Перевод: "ожидалось ':' или '=', получено 'int'". Допишите : сразу после имени.
undeclared identifier. Опечатка в имени типа, var days: innt = 7:
C:\Users\Anna\nim-kurs\nedelya.nim(1, 11) Error: undeclared identifier: 'innt'
candidates (edit distance, scope distance); see '--spellSuggest':
(1, 2): 'int'
Перевод: "необъявленное имя: 'innt'". Кандидат int. Пара (1, 2) не адрес, на неё можно не смотреть. Напишите int.
invalid indentation. В строке let temperature = 21,5 дробная часть отделена запятой:
C:\Users\Anna\nim-kurs\pogoda.nim(2, 21) Error: invalid indentation
Перевод: "неверный отступ". Отступа в этой строке нет, столбец 21 указывает на запятую. Поставьте точку: 21.5.
Задание
Создайте файл tipy.nim в папке nim-kurs. Объявите с var и явным типом четыре переменные:
1) count, тип int, значение 2
2) price, тип float, значение 775.5
3) category, тип string, значение "кафе"
4) paid, тип bool, значение true
Всё, кроме кафе, наберите в английской раскладке.
Ниже напечатайте каждую переменную отдельным echo, в том же порядке. Сохраните файл. Наберите:
nim c -r --hints:off tipy.nim
Снова откройте файл tipy.nim в редакторе. Последней строкой допишите присваивание без var, как days = 8: в count запишите "два". Сохраните файл. Снова наберите команду сборки.
Верно, если:
1) после первой сборки программа печатает четыре строки: 2, 775.5, кафе, true
2) при второй сборке компилятор печатает type mismatch: got 'string', адрес указывает на дописанную строку
После проверки откройте файл, удалите дописанную строку, сохраните файл и соберите его ещё раз: снова четыре строки. Файл traty.nim в этом уроке не менялся, с него начнётся урок 7.
Итоги
Тип это вид значения. От него зависит, что можно делать со значением. Компилятор определяет тип по значению, или вы записываете его знаком : после имени. Тип переменной не меняется. Несовпадение типов останавливает сборку, и программа не запускается.
В уроке 7 разберу арифметику: + - * / div mod.
Код урока
Примеры этого урока лежат в репозитории курса, папка lesson_06.
Предыдущий урок: Переменная: var и let
Следующий урок: Арифметика: + - * / div mod
Подписывайтесь на мой Telegram канал
Авторизуйтесь, чтобы оставить комментарий.
Нет комментариев.
Тут может быть ваша реклама
Пишите info@aisferaic.ru