top of page

Урок третий

Я собираюсь чередовать уроки. Один из двух подряд идущих уроков будет о каких-то вещах, специфичных для TIC-80, ну, к примеру, как предыдущий урок о графических примитивах, второй - о программировании в целом.

На этом уроке я бы хотел поговорить о переменных и функциях. Для тех, кто по школьной математике уже знаком с понятиями переменной и функции, должен сказать, что в программировании, сущности стоящие за этими определениями довольно сильно отличаются от математических.

Переменная в программировании - это просто область памяти у которой есть имя. К ней можно обратиться по этому имени, получить находящееся там значение или заменить его на новое. Такая именованная коробка, в которую можно что-то положить, а затем вынуть :) . Вернёмся к самой первой программе, которая рисовала посередине экрана зелёный круг и слегка её перепишем.

Надеюсь, всё, что я здесь сделал - вполне понятно. Присваиваем переменным значения, рисуем круг, меняем некоторые из значений, рисуем ещё один.

Затруднения у тех, кто прилежно учил математику и увидел в программе знакомые обозначения может вызвать строчка x = x + radius * 2 . Выглядит как бессмысленное равенство. На самом деле это не равенство, а присваивание. То, что здесь происходит - это последовательность действий. 1) возьми то, что лежит в x (120) 2) возьми то, что лежит в radius (30) и умножь на 2 (60) (порядок операций здесь такой же, как в арифметике, умножение выполняем перед сложением) 3) сложи эти два числа (180) 4) положи в x результат

В большинстве языков программирования, в том числе в Луа (я уже упоминал, что мы сейчас пишем на Луа?) присваивание и равенство в его математическом понимании обозначаются по-разному. В Луа (и в большинстве современных языков программирования), присваивание обозначается одним знаком равенства, а равенство двумя: a=a+1 - увеличь значение переменной a на единицу 2*2==4 - дважды два - четыре

Теперь о функциях. Функция - это просто последовательность действий, у которой есть имя. Функция может получать (а может не получать) какие-то параметры, так же она может возращать (а может не возвращать) какое-то значение. Сейчас мы со всем этим разберёмся. Ну, во-первых, несмотря на то, что мы только начали писать код, функциями и их вызовом мы уже вовсю попользовались. Всё что мы делали до сих пор, всё это рисование - это просто вызов функций с параметрами. Разумеется, встроенных функций на все случаи жизни хватать не может и не будет, поэтому программистам приходится писать свои (в основном, примерно этим они и занимаются). Ну вот к примеру... среди графических примитивов есть рисование круга, прямоугольника, треугольника и нет ни одного, который рисует голову совы с заданными координатами и радиусом! Срочно исправляем! ​​

Как видим, параметры передаются функции снаружи, при её вызове (точно так же мы передавали параметры графическим примитивам на прошлом уроке). Внутри функции параметры используются так же как любые другие переменные.

А вообще, пусть цвет глаз тоже будет параметром.

Выше я упоминал о том, что функции ещё могут возвращать значения. В старых языках программирования было чёткое разделение на функции и процедуры - функции возвращают значение, процедуры просто выполняют какую-то последовательность действий. Все графические примитивы и голова совы, которую мы написали выше в старых языках являлись бы процедурами. В большинстве современных языков это разделение исчезло. А что такое "настоящие" функции? Как правило - какие-то вычисления, возвращающие результат. Напишем не особо полезную функцию, вычисляющую квадрат заданного числа и вызовем её.

Получим число 25, напечатанное по центру экрана. Более практические примеры функций, что-то вычисляющих, будут позже.

Наверняка вы заметили, что TIC - это тоже функция. И возможно даже решили, что это такая специальная функция, которая автоматически запускается при запуске всей программы. Это почти так. Но она не просто запускается. Она запускается 60 раз в секунду! Что из этого следует, расскажу на следующем уроке.

А, ну да... Домашнее задание... Продолжайте рисовать, но теперь вы можете сделать функции для всяких сложных элементов, которые многократно повторяются (вроде сов выше).

Related Posts

bottom of page