Function (Lua): различия между версиями
Перейти к навигации
Перейти к поиску
Yodich (обсуждение | вклад) (Новая страница: «Функции») |
Yodich (обсуждение | вклад) |
||
| (не показано 5 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | Функции | + | == Описание == |
| + | |||
| + | '''Function''' — это основной механизм абстракции операторов и выражений в Lua. Функции могут как выполнять конкретную задачу, так и вычислять и возвращать значения. | ||
| + | |||
| + | Эффективность использование функций | ||
| + | |||
| + | * Функции полезны, если мы можем их назвать. | ||
| + | |||
| + | * Инструкции, которые появляются в программе более одного раза, обычно должны быть преобразованы в функцию. Например, если мы читаем пользовательские входные данные несколько раз одним и тем же способом, это отличный кандидат на роль функции. Если мы выводим что-то одним и тем же способом несколько раз, это тоже отличный кандидат на роль функции. | ||
| + | |||
| + | * Код с четко определенным набором входных и выходных данных является хорошим кандидатом на роль функции, особенно если он сложен. Например, если у нас есть список элементов, которые мы хотим отсортировать, код для сортировки будет отличной функцией, даже если это будет сделано только один раз. Входными данными является несортированный список, а выходными данными – отсортированный список. | ||
| + | |||
| + | * Функция обычно должна выполнять одну (и только одну) задачу. | ||
| + | |||
| + | * Когда функция становится слишком длинной, сложной или трудной для понимания, ее можно разделить на несколько подфункций. Это называется рефакторингом. | ||
| + | |||
| + | * Чтение входных данных от пользователя; | ||
| + | |||
| + | * Расчет значения на основе входных данных; | ||
| + | |||
| + | * Печать рассчитанного значения. | ||
| + | |||
| + | == Синтаксис == | ||
| + | Привязка к окну: нет. | ||
| + | <br>Работа со свернутым окном: да. | ||
| + | |||
| + | == Примеры == | ||
| + | |||
| + | --lua | ||
| + | -- Пример 1 | ||
| + | function add(a, b) -- создали функцию сложения | ||
| + | return a + b -- вернули значение | ||
| + | end | ||
| + | |||
| + | local sum = add (6, 7) -- вызов функции add | ||
| + | log (sum) | ||
| + | |||
| + | --lua | ||
| + | -- Пример 2 | ||
| + | function print ( ... ) --> функция print | ||
| + | return log ( ... ) --> троеточние - принимает все аргументы в функцию | ||
| + | end | ||
| + | print ("Hello World") --> вывести в лог "Hello World" | ||
| + | |||
| + | --lua | ||
| + | -- Также возможно, чтобы функция возвращала несколько значений | ||
| + | -- Пример 3 | ||
| + | function doOperations(a, b) | ||
| + | return a+b, a-b, a*b --> вернули несколько значений | ||
| + | end | ||
| + | added, subbed, multiplied = doOperations(6,3) | ||
| + | log (added, subbed, multiplied) | ||
| + | |||
| + | --lua | ||
| + | -- Пример 4 | ||
| + | function go(x) | ||
| + | return x, x, x | ||
| + | end | ||
| + | local a, b, c = go(12) | ||
| + | log (a, b, c) | ||
| + | local a, _, c = go(34) -- Также можно игнорировать возвращаемые значения | ||
| + | log (a, b, c) -- проигнорирует b = nil | ||
| + | |||
| + | --lua | ||
| + | -- Функции также могут быть объявлены локальными | ||
| + | -- Пример 5 | ||
| + | do | ||
| + | local function add(a, b) return a+b end | ||
| + | log(add(1,2)) --> вывод - 3 | ||
| + | end | ||
| + | log( add(2, 2) ) --> завершается с ошибкой, поскольку 'add' здесь не определен | ||
| + | |||
| + | --lua | ||
| + | -- Они также могут быть сохранены в таблицах | ||
| + | -- Пример 6 | ||
| + | local tab = { | ||
| + | function (a, b) | ||
| + | return a + b | ||
| + | end | ||
| + | } | ||
| + | log ( tab[1](1, 2) ) --> вернет 3 | ||
| + | |||
| + | --lua | ||
| + | -- Переменные также принимаются в параметрах функции. | ||
| + | -- Пример 7 | ||
| + | local a = 10 | ||
| + | local b = 60 | ||
| + | function add(a, b) --> создали функцию сложения | ||
| + | return a + b --> вернули значение | ||
| + | end | ||
| + | local c = add(a, b) | ||
| + | log(c) | ||
| + | |||
| + | --lua | ||
| + | -- Параметры по умолчанию | ||
| + | -- Пример 8 | ||
| + | function sayHello(name) | ||
| + | name = name or "Jack" -- Jack устанвлено именем по умолчанию, | ||
| + | -- если задано имя параметра name | ||
| + | -- будет использовано имя переданного параметра | ||
| + | log ("Hello, " .. name .. "!") | ||
| + | end | ||
| + | sayHello() --> "Hello, Jack!" | ||
| + | sayHello("UoPilot") --> "Hello, UoPilot!" | ||
| + | |||
| + | == Смотрите также == | ||
| + | |||
| + | [[While (Lua)]] | ||
| + | <br>[[For (Lua)]] | ||
| + | <br>[[If (Lua)]] | ||
Текущая версия на 17:37, 27 августа 2023
Содержание
Описание
Function — это основной механизм абстракции операторов и выражений в Lua. Функции могут как выполнять конкретную задачу, так и вычислять и возвращать значения.
Эффективность использование функций
- Функции полезны, если мы можем их назвать.
- Инструкции, которые появляются в программе более одного раза, обычно должны быть преобразованы в функцию. Например, если мы читаем пользовательские входные данные несколько раз одним и тем же способом, это отличный кандидат на роль функции. Если мы выводим что-то одним и тем же способом несколько раз, это тоже отличный кандидат на роль функции.
- Код с четко определенным набором входных и выходных данных является хорошим кандидатом на роль функции, особенно если он сложен. Например, если у нас есть список элементов, которые мы хотим отсортировать, код для сортировки будет отличной функцией, даже если это будет сделано только один раз. Входными данными является несортированный список, а выходными данными – отсортированный список.
- Функция обычно должна выполнять одну (и только одну) задачу.
- Когда функция становится слишком длинной, сложной или трудной для понимания, ее можно разделить на несколько подфункций. Это называется рефакторингом.
- Чтение входных данных от пользователя;
- Расчет значения на основе входных данных;
- Печать рассчитанного значения.
Синтаксис
Привязка к окну: нет.
Работа со свернутым окном: да.
Примеры
--lua -- Пример 1 function add(a, b) -- создали функцию сложения return a + b -- вернули значение end local sum = add (6, 7) -- вызов функции add log (sum)
--lua
-- Пример 2
function print ( ... ) --> функция print
return log ( ... ) --> троеточние - принимает все аргументы в функцию
end
print ("Hello World") --> вывести в лог "Hello World"
--lua -- Также возможно, чтобы функция возвращала несколько значений -- Пример 3 function doOperations(a, b) return a+b, a-b, a*b --> вернули несколько значений end added, subbed, multiplied = doOperations(6,3) log (added, subbed, multiplied)
--lua -- Пример 4 function go(x) return x, x, x end local a, b, c = go(12) log (a, b, c) local a, _, c = go(34) -- Также можно игнорировать возвращаемые значения log (a, b, c) -- проигнорирует b = nil
--lua -- Функции также могут быть объявлены локальными -- Пример 5 do local function add(a, b) return a+b end log(add(1,2)) --> вывод - 3 end log( add(2, 2) ) --> завершается с ошибкой, поскольку 'add' здесь не определен
--lua
-- Они также могут быть сохранены в таблицах
-- Пример 6
local tab = {
function (a, b)
return a + b
end
}
log ( tab[1](1, 2) ) --> вернет 3
--lua -- Переменные также принимаются в параметрах функции. -- Пример 7 local a = 10 local b = 60 function add(a, b) --> создали функцию сложения return a + b --> вернули значение end local c = add(a, b) log(c)
--lua
-- Параметры по умолчанию
-- Пример 8
function sayHello(name)
name = name or "Jack" -- Jack устанвлено именем по умолчанию,
-- если задано имя параметра name
-- будет использовано имя переданного параметра
log ("Hello, " .. name .. "!")
end
sayHello() --> "Hello, Jack!"
sayHello("UoPilot") --> "Hello, UoPilot!"