Результат: вы прочитаете короткую программу и объясните обычными словами, что каждая строка вносит в результат, который вы видите.
Что нужно знать: ничего. Страница написана для тех, кто ни разу не писал программ. Если вы уже программируете, сразу переходите к разделу Первая программа.
Программа — это описание, а не команда, выкрикнутая машине
Программирование часто представляют как отдачу команд компьютеру. На деле оно ближе к записи описания, настолько точного, что следование ему не оставляет места для толкований. Вы записываете, чем являются вещи и как получается результат. Машина следует описанию буквально, включая те части, где вы ошиблись.
Последняя оговорка и есть всё ремесло. Машина не умеет угадывать замысел. Всё, что вы узнаёте о языке, на самом деле сводится к тому, как выразить замысел, не оставив пробелов.
Четыре понятия покрывают почти всё
Почти любая программа, которую вам доведётся прочитать, собрана из четырёх понятий.
Значение — это единица данных. Число 45, текст "study plan", ответ true.
Имя указывает на значение, чтобы к нему можно было обратиться позже. Запись let total = 45 даёт значению 45 имя total.
Функция — это вычисление с именем. Вы передаёте ей значения, она возвращает значение. Она нужна затем, чтобы вычисление можно было записать один раз и использовать во многих местах.
Запуск — это момент, когда описанию следуют и получают нечто наблюдаемое.
Вот все четыре в одном файле.
function minutesLeft(total: int, spent: int) -> int {
total - spent
}
let plan = "study plan"
let total = 45
let spent = 20
print("{plan}: {minutesLeft(total, spent)} 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 пришёл из имени plan, которое указывает на значение "study plan". Число 25 нигде не записано. Его вычислила minutesLeft из 45 и 20.
Взгляните на функцию ещё раз. Её первая строка объявляет контракт. Она принимает два целых числа с именами total и spent и обещает вернуть целое число. Тело состоит из одного выражения total - spent, и это выражение становится ответом. Ничто другое в файле не может изменить поведение этой функции, потому что всё нужное приходит к ней через два параметра.
Это свойство стоит назвать отдельно. О вычислении, которое зависит только от переданного ему, можно рассуждать в одиночку, не держа в голове остальную программу.
Зачем нужен шаг проверки
Вы выполнили две команды, а не одну. Проверка читает ваше описание и ищет пробелы до того, как что-либо выполнится. Если вы написали minutesLeft(total) и забыли второе значение, проверка сообщит об этом и назовёт место. Запуск даже не начнётся.
В одних средах пропущенный аргумент обнаруживается лишь при выполнении вызова, а языки со статической проверкой могут найти его раньше. Топаз даёт отдельную команду для такого ответа до запуска, поэтому во всех примерах здесь сначала выполняется check.
Попробуйте
Замените spent на 50, не трогая остального. Предскажите вывод до запуска.
Показать ответ
Строка станет study plan: -5 minutes left. Вычитание выполняется ровно так, как записано, и ничто в описании не требует, чтобы результат был положительным. Если отрицательные минуты для вашей задачи недопустимы, это правило тоже нужно записать. В одной строке здесь весь урок, машина следует сказанному, а не задуманному.
Готовы двигаться дальше, если
Вы можете показать значение, имя, сигнатуру функции и выражение, которое даёт её результат, а также объяснить, что делает команда проверки и чего не делает запуск.
Установите инструментарий и напишите собственный первый файл в разделе Первая программа. Если вы уже знаете другой язык, страница Переход с других языков свяжет ваши знания с тем, что вы только что прочитали.