Funkce v Lua

Obsah
Funkce jsou hlavním mechanismem pro abstrakci deklarací a výrazů v Lua, mohou provádět konkrétní úkoly, kterým se v jiných jazycích většinou říká procedury nebo podprogramy.
Funkce jsou většinou psány se závorkami a seznamem argumentů, které mu umožní provést konkrétní akci, kde může nastat situace, že tyto funkce nepotřebují argumenty, nicméně závorky musí být zadány, podívejme se na příklad funkcí, které uvnitř používáme jako výrazy Lua:

Jak vidíme, mohli bychom používat funkce oběma popsanými způsoby, ale existuje zvláštní případ, kdy funkce má jediný argument a tento argument je doslovný řetězec nebo konstruktor pro tabulku nebo pole, v tomto případě jsou závorky volitelné, podívejme se:
 tisk "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[víceřádkové pole msg]] tisk ([[víceřádkové pole msg]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) typ {} typ ({})
Podle příkladu jsme byli schopni zapsat funkce oběma způsoby, které jsou stejně platné.
Program v Lua Můžete použít funkce definované jak v C, tak v samotném jazyce, například všechny standardní funkce v knihovně Lua jsou zapsány v C, což není pro vývojáře relevantní, protože vyvolání obou nemá žádný rozdíl.
Když to víme, definice se neliší od ostatních jazyků, konvenční syntaxe funkce se řídí názvem funkce, seznamem parametrů a tělem funkce, což je seznam deklarací, podívejme se na příklad ilustrujte, co bylo vysvětleno:
 funkce operace (var) místní součet = 0 součet = var + 6 návrat součtu konec
Svou funkci již máme, nicméně ta cesta není příliš užitečná, protože je třeba ji vyvolat odesláním parametru, který potřebuje, proto můžeme do našeho kódu přidat ještě jeden řádek pro její vyvolání:
 funkce operace (var) místní součet = 0 součet = var + 6 návrat součtu konec tisku (operace (57))
Pokud spustíme náš příklad na našem terminálu, uvidíme, jak náš program parametr přijme a podle operací definovaných v rámci naší funkce vrátí hodnotu:

ZVĚTŠIT

Něco, co můžeme zvýraznit z funkcí v Lua, je, že parametry fungují jako lokální proměnné, protože jsou inicializovány s hodnotami, které obdrží ve volání funkce. Kromě toho můžeme vyvolat funkci s různým počtem argumentů definovaných ve funkci, Lua přizpůsobuje se tomu způsobem, který dělá s vícenásobným přiřazením, což je téma, kterému jsme se věnovali v minulém kurzu, kde jsou další argumenty zahozeny a další parametry získají typ hodnoty nulaPředstavme si například, že máme následující funkci:
 function multiple_function (a, b) return a or b end
Podívejme se, jak v následující části kódu voláme funkci s různými parametry a na pravé straně, jak se provádí přiřazení:
 f (8) a = 8, b = nula f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (hodnota 4 je vyřazena)
Ačkoli toto chování může vést k programovacím chybám, je také užitečné, zejména pro výchozí argumenty.
Netradiční, ale docela užitečná funkce Lua, je schopnost vrátit více výsledků, dokonce i předdefinované jazykové funkce to dokážou. Příkladem toho je funkce string.find, která hledá vzorec výskytu v daném řetězci, tato funkce vrací dva indexy, první je index, kde tento vzor začíná a druhý je tam, kde končí, podívejme se na praktický příklad použití této funkce, který můžeme perfektně v naší interaktivní konzoli:

Funkce, do kterých píšeme Lua mohou se také vrátit více výsledků, za tímto účelem je musíme uvést pouze po návratu, podívejme se na příklad, kde vytvoříme funkci, která vyhledá největší ze seznamu prvků v poli a jeho pozici v něm:
 funkce maximální hodnota (a) lokální minimum = 1 lokální m = a [minimum] pro i, val v ipairech (a) proveďte pokud val> m, pak minimum = i; m = návratnost konce konce m, minimální konec tisku (maximální hodnota ({8,10,23,12,5}))
Jak vidíme, naše funkce je docela jednoduchá a v našem návratu vrací dvě hodnoty, které v tomto případě podle toho, co posíláme, bychom měli vrátit 23 jako největší číslo a 3 jako pozici, podívejme se:

ZVĚTŠIT

Kromě funkce vracení více výsledků, Lua můžete také obdržet a proměnný počet argumentů, například v tutoriálech jsme tuto funkci použili vytisknout s jedním, dvěma a až třemi argumenty, to znamená, že může přijímat různý počet argumentů, ale jak to dělá, tak i funkce, které vyvíjíme v Lua, Podívejme se na příklad tohoto:
 funkce example_function (…) local s = 0 for i, v in ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))
Pokud jsme pozorovateli v definici naší funkce, máme tři body (…) uvnitř závorek to znamená, že naše funkce přijímá proměnný počet argumentů, a když je funkce volána, všechny odeslané argumenty jsou shromažďovány interně a poté zpracovány pomocí funkce dvojicePodívejme se na výstup naší funkce, která má na starosti přidání všech do ní zaslaných argumentů:

ZVĚTŠIT

Jak vidíme tuto charakteristiku Lua Je to docela užitečné, protože nám to umožňuje definovat naši funkci, aniž bychom věděli, kolik argumentů jí předáme, můžeme dokonce říci, že tato funkce je trochu podobná tomu, co se dělá s připravená prohlášení zvládnout operace s databází v jazycích jako PHP nebo Jáva.
Odesílání argumentů v Lua je poziční, to znamená, že když vyvoláme funkci, tyto argumenty odpovídají parametrům podle jejich pozic, první argument odpovídá prvnímu parametru a tak dále, i když někdy by nebylo na škodu specifikovat argumenty jménem.
Tato funkce je podobná proměnným argumentům, ale při definování názvů pro naše argumenty je manipulace s nimi mnohem jednodušší, kde pouhou pomocí tabulky nebo uspořádání můžeme tuto funkci provést, což je velmi užitečné, pokud naše funkce používá některé z těchto parametrů volitelně se podívejme na následující volání funkce, která obdrží určité množství parametrů pro vytvoření okna:
 create_window {x = 0, y = 0, width = 0, height = 200, title = 'Lua Window', background = "blue", border = true}
Tímto způsobem funkce create_window Pokud si přejete, můžete tyto argumenty zkontrolovat podle jména, podívejme se, jak tyto argumenty v naší funkci přijímáme a co s tím můžeme dělat:
 funkce create_window (možnosti) - zaškrtněte povinné možnosti, pokud typ (options.title) ~ = "řetězec" pak chyba ("žádný název") elseif typ (možnosti.šířka) ~ = "číslo" pak chyba ("žádná míra šířky" ) elseif typ (options.height) ~ = "number" then error ("no height measurement") end - použijeme možnosti create_window (options.title, options.x or 0, options.y or 0, options .width, options.height, options.background or "white", options.edges) Konec
Jak vidíme, možnosti v našich programech jsou s touto funkcí mnohem větší, a přestože je tento příklad ilustrativní, umožňuje nám vidět, jak můžeme pojmenované argumenty použít v rámci našich funkcí.
Tímto ukončíme tento tutoriál, kde jsme se naučili zacházet s funkcemi Lua, od konvenční syntaxe, kterou můžeme najít v jiných jazycích, k charakteristikám jazyka, jako jsou vícenásobné výsledky, proměnné argumenty a možnost pojmenování argumentů, které posíláme našim funkcím. Tímto způsobem přidáme do našich programů mnohem více energie zahrnutím těchto typů funkcí a zachováním jejich jednoduchosti Lua jsme na to zvyklí.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave