Результат: вы сможете читать небольшие программы и объяснять вклад каждой строки в конечный наблюдаемый результат. Каждая строка выполняет определённую роль в формировании итогового вывода, поэтому понимание структуры кода помогает разбирать программы любой сложности.
Что нужно знать: предварительные знания не требуются. Материал подготовлен для тех, кто никогда не писал код. Если у вас есть опыт программирования, сразу переходите к разделу Первая программа.
Программа — это описание, а не команда, выкрикнутая машине
Программирование часто воспринимают как отдачу команд компьютеру. На практике оно ближе к составлению спецификации, настолько точной, что её исполнение исключает неоднозначность. Вы описываете сущности и порядок формирования результата. Машина исполняет описание буквально, включая допущенные ошибки.
Когда человек даёт указания другому человеку, слушатель использует контекст и догадывается о намерении, даже если фраза сформулирована неполно. Компьютер не обладает интуицией и не домысливает пропущенные детали. Машина считывает только то, что написано в коде, и выполняет инструкции шаг за шагом. По этой причине программа представляет собой набор правил и связей, из которых формируется итоговое поведение.
Именно в этом нюансе заключается суть разработки. Машина не способна интерпретировать намерения. Изучение языка сводится к тому, чтобы выразить замысел, не оставив неопределённостей.
Четыре понятия покрывают почти всё
Практически любая программа состоит из четырёх базовых концепций. Каждая из них выполняет свою задачу в построении общего алгоритма.
Значение — единица данных. Число 45, текст "study plan", значение true. Значения представляют собой исходный материал, с которым работает код. В примере строки let всего = 45 и let план = "study plan" задают конкретные данные для последующих вычислений.
Имя — ссылается на значение для повторного обращения к нему. Конструкция let всего = 45 связывает значение 45 с именем всего. Имена позволяют не повторять одни и те же данные вручную. В примере имя потрачено в строке let потрачено = 20 даёт возможность обращаться к числу 20 по понятному обозначению.
Функция — именованное вычисление. Функция принимает значения и возвращает результат. Она позволяет описать вычисление единожды и вызывать его повторно. В примере блок function осталосьМинут(...) объединяет правило вычитания под одним названием.
Запуск — этап исполнения описания с получением наблюдаемого результата. Без запуска программа остаётся лишь текстом на диске. В примере ввод команды topaz run what-a-program-is.tpz запускает исполнение описанного кода и выводит итоговую строку на экран.
Пример применения всех четырёх концепций в одном файле.
function осталосьМинут(всего: int, потрачено: int) -> int {
всего - потрачено
}
let план = "study plan"
let всего = 45
let потрачено = 20
print("{план}: {осталосьМинут(всего, потрачено)} minutes left")Если Топаз уже установлен, сохраните файл под именем what-a-program-is.tpz, после чего проверьте и запустите его приведёнными ниже командами. Если инструментарий ещё не установлен, пока продолжайте чтение. В разделе Первая программа вы установите его и создадите свой первый файл.
topaz check what-a-program-is.tpz
topaz run what-a-program-is.tpzНаблюдаемый результат.
study plan: 25 minutes leftЧитайте от результата обратно к коду
Начните с вывода и анализируйте код в обратном порядке. Анализ с конца помогает увидеть, как отдельные элементы связываются в итоговый результат. Текст study plan получен из имени план, ссылающегося на значение "study plan". Число 25 не задано в коде явно. Функция осталосьМинут вычислила его из 45 и 20.
Рассмотрите функцию ещё раз. Её первая строка определяет сигнатуру. Функция принимает два целых числа с именами всего и потрачено и возвращает целое число. Запись : int после имени указывает, что в этом месте ожидается целое число, а -> int обозначает, что функция возвращает целое число. В следующем уроке эти обозначения будут разобраны подробно, поэтому сейчас на них можно не останавливаться.
Тело функции состоит из единственного выражения всего - потрачено, значение которого становится результатом. Никакой другой код в файле не влияет на поведение функции, так как все необходимые данные передаются через её параметры.
Это свойство имеет ключевое значение. Вычисление, зависящее исключительно от входных параметров, можно анализировать изолированно, не учитывая остальной контекст программы. Такой подход упрощает поиск ошибок и чтение кода.
Зачем нужен шаг проверки
Были выполнены две команды вместо одной. Разделение проверки и запуска помогает находить неточности на раннем этапе. Проверка анализирует описание и выявляет ошибки до начала исполнения. Если вызвать осталосьМинут(всего), опустив второй аргумент, проверка укажет на ошибку и место её возникновения. Запуск программы при этом не произойдёт.
Разработчик получает сообщение об ошибке с указанием конкретной строки файла. Это позволяет исправить недочёты до того, как код начнёт выполняться.
В некоторых средах пропущенный аргумент обнаруживается только в момент вызова, тогда как языки со статической проверкой выявляют подобные расхождения заранее. Топаз предоставляет отдельную команду для предварительной проверки до запуска, поэтому во всех примерах руководства сначала выполняется check.
Попробуйте
Замените потрачено на 50, не меняя остальные значения. Предскажите вывод до запуска. Это упражнение показывает, как машина реагирует на края расчётов.
Показать ответ
Вывод принимает вид study plan: -5 minutes left. Вычитание выполняется в точности так, как описано, и условия не ограничивают результат положительными значениями. Если отрицательное количество минут недопустимо для вашей задачи, это ограничение следует явно сформулировать в коде. Данная строка иллюстрирует главный принцип. Машина исполняет переданную инструкцию, а не исходный замысел.
Готовы двигаться дальше, если
Вы можете проверить себя по следующим пунктам:
· Вы можете определить значение, имя, сигнатуру функции и выражение, формирующее её результат. · Вы можете объяснить назначение команды проверки и особенности процесса запуска.
Установите инструментарий и создайте свой первый файл в разделе Первая программа. Если у вас есть опыт работы с другими языками, страница Переход с других языков поможет соотнести имеющиеся знания с рассмотренными концепциями.