Lua/Функции: различия между версиями

Содержимое удалено Содержимое добавлено
Новая страница: «{{Автоматическая навигация|Предыдущая глава=Конструкции языка|Следующая глава=}} В этой...»
 
Строка 18:
 
== Функция в Lua ==
В Lua функция задается таким образом:<syntaxhighlight lang="lua">
function func(a)
a = a + 1
return a
end
</syntaxhighlight>
То есть, функция (здесь ее зовут func) задается ключевым словом function и в нее передается аргумент а (та самая пшеница), после чего в функции ее значение увеличивается на 1 и из функции возвращается новая a. Тот код, который находится в функции, называется телом.
 
Как же нам понять, что вернет функция? Вызвать ее! Вы уже знакомы с функцией print() и вы прекрасно знаете, что она принимает в качестве аргументов и что делает. Попробуем воспользоваться прошлой функцией:<syntaxhighlight lang="lua">
print(func(1)) --> 2
</syntaxhighlight>
Она прибавит к нашему аргументу (равному 1) еще единицу и получит двойку. А мы хотим тройку:<syntaxhighlight lang="lua">
print(func(func(1))) --> 3
</syntaxhighlight>
Да, логично было бы предположить, что в функцию можно что-то вложить: сначала мы получили двойку из единицы при помощи первой func, а потом сделали аналогичную операцию еще раз и получили тройку.
 
Функции могут возвращать несколько значений. Например:<syntaxhighlight lang="lua">
{{Нижняя автоматическая навигация|Предыдущая глава=Конструкции языка|Следующая глава=}}
function func (a,b)
a,b=b,a
return a,b
end
print(func(15,5)) --> 5,15
 
 
</syntaxhighlight>Конечно же, эти значения можно присвоить переменным:<syntaxhighlight lang="lua">
a,b = func (15,5) --> a = 5, b = 15
print(a,b) --> 5,15
</syntaxhighlight>
 
=== Интересные особенности ===
В Lua функции не нужны скобки, для аргументов, то есть, можно использовать функции в таком виде:
 
* print("15") как и print "15". Заметим, что нельзя аналогичным способом использовать 15(тут это число)
* type({}) как и print {}
 
Также, для функции неважно какое количество аргументов вы передаете функции: если вы передадите меньше аргументов чем нужно, то она этой перменной в функции задаст значение nil, а если избыточно - то эти переменные просто не будут нигде использованы.<syntaxhighlight lang="lua">
function func(a,b)
print(a,b)
end
func(1) --> 1 nil (то есть, а = 1, b = nil)
func(1,2,3) --> 1,2 (то есть 3 мы не использовали)
</syntaxhighlight>
Аналогично работает и с возвращением значения функцией.
 
Тем не менее, мы не рекомендуем использовать эти особенности - они ухудшат читаемость кода и могут вас запутать. В свое время, первая особенность была убрана из Python(была в Python 2, но в Python 3 стали использовать скобки).
 
Функции могут заполнять списки значениями. Например:<syntaxhighlight lang="lua">
function func ()
a = 5
b = 6
return a,b
end
 
a = {func()}
print (a[1]) --> 5
</syntaxhighlight>{{Нижняя автоматическая навигация|Предыдущая глава=Конструкции языка|Следующая глава=}}