Функции
Иии вот наконец мы подобрались к юбилейному 10 уроку. Благодарю всех тех, кто на протяжении этого времени следил за моими статьями. Это был долгий путь, учитывая тот факт, что я - студент и время у меня хоть и есть, но как и у любого другого нормального студента - его всегда не хватает ;3, даже на написание статей. И так - сегодня я вам поведую про такую замечательнейшую вещь, как функции - это отчасти одна из самых важных кусков любого объектно ориентированного кода, позволяющая эффективно сгруппировать участки кода для последующего их возможно неоднократного вызова.
Как же это работает?
Функция всегда объявляется ключевым словом function после которого идет придуманное вами имя функции, а после в круглых скобках - параметры,идущие через запятую, которые эта функция получает на вход при её вызове. Однако - стоит отметить, что функция может вообще ничего на вход не получать, и тогда круглые скобки - останутся пустыми. Далее идет тело функции - т.е. её содержимое - код, который будет выполняться по ходу работы функции. Сами функции стоит помещать строго вверху кода исходя из такой иерархии - каждая новая функция должна стоять выше предыдущей, если из предыдущей вами предусмотрен вызов новой и наоборот.
Рассмотрим пример функции печатающей на экран переданное ей слово, для этого мы должны указать в её параметрах переменную в которую будет поставляться это слово, а так же пускай и координаты по которым мы это слово будем выводить.
Код:
function print(word,x,y)
screen:print(x,y,word,Color.new(255,255,255))
end
Для того, чтобы вызвать эту функцию с параметрами необходимо прописать её имя и в круглых скобках в строгом порядке следования переменных внести все свои данные - это могут быть как переменные, так и текстовые или числовые константы, естественно, что можно передавать и массивы и прочее аналогичным образом. Такие примеры вам давно знакомы из функций screen:clear() - безаргументной, или функции с параметрами screen:blit(x,t,img).
function main()
local y=10
while true do
screen:clear()
local word="Hello World"
print(word,20,y)
screen:flip()
end
end
end
main()
После вызова функции все управление процессора передается на эту функцию, а после её завершения управление возвращается в ту точку кода, откуда функция была вызвана - это позволяет избавить вас от загрузки сторонних скриптов с помощью dofile() который к тому же не сносоустойчив.
Однако наша функция по ходу своей работы ничего нам не вернула - давайте же заставим её это сделать. Для этого в конце тела функции пишется ключевое слово return и переменная, которая будет возвращена после выполнения функции. Ну скажем return zx Тогда вызов функции будет немого отличаться от предыдущего появлением переменной ожидающей своего значения от вызванной функции
Код:
function print(word,x,y)
local zx=0--объявляем локальную переменную zx
screen:print(x,y,word,Color.new(255,255,255))
return zx
end
Приписка local позволяет создавать локальные переменные, то есть переменные к которым мы можем обращаться находясь только в вызванной функции
function main()
local y=2
while true do
screen:clear()
local word="Hello World"
local px=print(word,20,y)--а примем мы значение, возвращаемое из нашей функции print в переменную px
if px==0 then if y<270 then y=y+1 end end
screen:flip()
end
end
main()
end
main()
Таким образом вы научитесь грамотно компановать повторяющиеся куски кода в функции, вызывать эти функции и получать от них значения. Желаю успехов)