Функције у Луа

Преглед садржаја
Функције су главни механизам за апстраховање декларација и израза у Луа, могу извршавати одређене задатке, који се на другим језицима углавном називају поступцима или потпрограмима.
Функције су најчешће написане са заградама и списком аргумената који ће јој омогућити да изврши одређену радњу, где се може догодити да овим функцијама нису потребни аргументи, међутим заграде морају бити наведене, да видимо пример функција које користимо као унутрашње изразе Луа:

Као што видимо, могли бисмо користити функције на оба описана начина, али постоји посебан случај да функција има један аргумент и тај аргумент је стринг литерал или конструктор за табелу или низ, у овом случају заграде су опционалне, да видимо:
 принт "Хелло Ворлд" принт ("Хелло Ворлд") дофиле 'филе.луа' дофиле ('филе.луа') принт [[порука са више редова]] принт ([[порука са више редова]]) ф { вар1 = 17, вар2 = 30} ф ({вар1 = 17, вар2 = 30}) тип {} тип ({})
Према примеру, могли смо да напишемо функције на оба начина, при чему су оне подједнако важеће.
Програм у Луа Можете користити функције дефинисане и у Ц и у самом језику, на пример, све стандардне функције у библиотеци Луа су написани у Ц., што није релевантно за програмере, јер позивање оба нема никакве разлике.
Знајући ово, дефиниција се не разликује од других језика, конвенционална синтакса функције се управља именом функције, листом параметара и телом функције, што је листа декларација, хајде да видимо пример за илуструјте шта је објашњено:
 функција операције (вар) локални збир = 0 збир = вар + 6 повратак суме краја
Већ имамо своју функцију, међутим на тај начин није баш корисна, јер је потребно позвати слањем параметра који јој је потребан, за то можемо додати још један ред у наш код да бисмо га позвали:
 функција операција (вар) локална сума = 0 сума = вар + 6 повратак суме завршни испис (операција (57))
Ако покренемо наш пример у нашем терминалу, можемо видети како наш програм прима параметар и према операцијама дефинисаним у нашој функцији враћа вредност:

ЕНЛАРГЕ

Нешто што можемо истакнути из функција у Луа, је да параметри раде као локалне варијабле, будући да су иницијализирани са вриједностима које примају у позиву функције. Осим тога, можемо позвати функцију са различитим бројем аргумената дефинисаних у функцији, Луа прилагођава се овоме на начин на који то чини са вишеструким додељивањем, темом коју смо обрадили у прошлом водичу, где се додатни аргументи одбацују, а додатни параметри добијају тип вредности нула, на пример, замислимо да имамо следећу функцију:
 функција вишеструка_функција (а, б) враћа а или б крај
Да видимо како у следећем делу кода позивамо функцију са различитим параметрима, а на десној страни како се додељивање извршава:
 ф (8) а = 8, б = н ф (8, 15) а = 8, б = 15 ф (8, 15, 4) а = 8, б = 15 (Вредност 4 се одбацује)
Иако ово понашање може довести до грешака у програмирању, оно је такође корисно, посебно за подразумеване аргументе.
Неконвенционална, али прилично корисна карактеристика Луа, је могућност враћања више резултата, чак и унапред дефинисане језичке функције то могу учинити. Пример за то је функција стринг.нађи, који тражи образац појављивања у датом низу, ова функција враћа два индекса, први је индекс где овај образац почиње, а други је место где се завршава, да видимо практичан пример коришћења ове функције који можемо учините савршено у нашој интерактивној конзоли:

Функције у које пишемо Луа могу се и вратити више резултата, за ово их морамо само навести након нашег повратка, да видимо пример где стварамо функцију да лоцирамо највећи од листе елемената у низу и његову позицију у њему:
 максимална вредност функције (а) локални минимум = 1 локални м = а [минимум] за и, вал у ипаирима (а) учинити ако је вал> м онда је минимум = и; м = поврат на крају краја м, минимални испис на крају (максимална вредност ({8,10,23,12,5}))
Као што видимо, наша функција је прилично једноставна и у повратку враћа две вредности, које би у овом случају према ономе што шаљемо требало да вратимо 23 као највећи број и 3 као позицију, да видимо:

ЕНЛАРГЕ

Поред функционалности враћања више резултата, Луа можете добити и а променљив број аргумената, на пример током целог водича користили смо ову функцију принт са једним, два и до три аргумента, то јест, може да прими променљив број аргумената, али како се то ради, могу и функције које развијамо у Луа, Погледајмо пример овога:
 фунцтион екампле_фунцтион (…) лоцал с = 0 за и, в у ипаирима {…} до с = с + в енд ретурн с енд принт (екампле_фунцтион (8, 19, 30, 14, 10))
Ако смо посматрачи у дефиницији наше функције, имамо три бода (…) унутар заграда ово означава да наша функција прихвата променљив број аргумената, а када се функција позове, сви послани аргументи се прикупљају интерно и затим обрађују са функцијом ипаирсПогледајмо излаз наше функције која је задужена за додавање свих аргумената који су јој послати:

ЕНЛАРГЕ

Као што видимо ову карактеристику Луа Прилично је корисно јер нам омогућава да дефинишемо своју функцију без знања о томе колико ћемо јој аргумената пренијети, чак можемо рећи да је ова функционалност помало слична оној која се ради са припремљене изјаве за руковање операцијама са базом података на језицима попут ПХП или Јава.
Слање аргумената у Луа он је позициониран, то јест, када позовемо функцију, ови аргументи одговарају параметрима према њиховим позицијама, први аргумент одговара првом параметру и тако даље, иако понекад не би шкодило навести аргументе по имену.
Ова функционалност је слична променљивим аргументима, међутим, приликом дефинисања назива за наше аргументе, њихово руковање је много једноставније, где само помоћу табеле или распореда можемо извршити ову функцију, што је врло корисно ако наша функција користи неке од ових параметара опционо, да видимо следећи позив функцији која прима одређену количину параметара за израду прозора:
 цреате_виндов {к = 0, и = 0, видтх = 0, хеигхт = 200, титле = 'Луа Виндов', бацкгроунд = "блуе", бордер = труе}
На овај начин функција цреате_виндов Можете слободно да проверите ове аргументе по имену ако желите, да видимо како примамо ове аргументе у нашој функцији и шта можемо учинити са њима:
 функција цреате_виндов (оптионс) - проверите обавезне опције ако је типе (оптионс.титле) ~ = "стринг" па грешка ("без наслова") елсеиф типе (оптионс.видтх) ~ = "нумбер" онда грешка ("нема мере ширине" ) елсеиф типе (оптионс.хеигхт) ~ = "нумбер" онда грешка ("но хеигхт хеигхт") енд - примењујемо опције цреате_виндов (оптионс.титле, оптионс.к или 0, оптионс.и или 0, оптионс .видтх, оптионс.хеигхт, оптионс.бацкгроунд или "вхите", оптионс.едгес) Енд
Као што видимо, могућности у нашим програмима су много веће с овом функционалношћу, и иако је овај примјер илустративан, омогућава нам да видимо како можемо примијенити именоване аргументе унутар наших функција.
Овако завршавамо овај водич, где смо научили како да рукујемо функцијама Луа, прелазећи од конвенционалне синтаксе коју можемо пронаћи у другим језицима до карактеристика језика као што су вишеструки резултати, променљиви аргументи и могућност именовања аргумената које шаљемо нашим функцијама. На овај начин додајући много више снаге нашим програмима укључивањем ових врста функција и одржавајући њихову једноставност Луа навикли смо.Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave