Function (Lua): различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: «Функции»)
 
 
(не показано 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!"

Смотрите также

While (Lua)
For (Lua)
If (Lua)