Ուիքիփետիա:Lua
Lua թեթեւ սկրիպտային լեզու մըն է, որ Scribunto ընդլայնումին միջոցով կրնայ ներդրուիլ կաղապարներու մէջ՝ ուիքիի վրայ սկրիպտներ ստեղծելու համար։ Lua-ի ծածկագիրը կը գործածուի {{#invoke:}} վերլուծիչ գործառոյթին միջոցով։ Scribunto կ'աջակցի Lua 5.1 տարբերակին։
Ուիքիփետիայի վրայ Lua-ի սկզբնական ծածկագիրը կը պահուի «մոդուլ» կոչուող էջերու վրայ, մոդուլի անուանատարածքին մէջ։ Օրինակ՝ «Example» անունով մոդուլի ծածկագիրը կը գտնուի Մոդուլ:Example էջին վրայ։ Առանձին մոդուլները կը կանչուին հետեւեալ շարահիւսութեամբ՝ {{#invoke:մոդուլի անուն|գործառոյթի անուն|ընտրովի պարամետր 1|պարամետր 2...}}։ Օրինակ՝
| Ուիքիտեքստ | Արդիւնք |
|---|---|
{{#invoke:Example|hello}} |
Բարեւ, աշխարհ։ |
Մոդուլ մը գործարկել
[Խմբագրել աղբիւրը]Մոդուլները կը գործարկուին սովորական ուիքի էջերու վրայ՝ {{#invoke:}} վերլուծիչ գործառոյթին միջոցով։ Անոր շարահիւսութիւնը նման է կաղապարներու շարահիւսութեան, բայց կան քանի մը տարբերութիւններ։ Ամենակարեւորը այն է, որ պարտաւոր էք նշել գործառոյթի անուն մը։ Գործառոյթը հրահանգներու շարք մըն է, որ կը ստանայ մուտքային արժէքներ, կը մշակէ զանոնք եւ կը վերադարձնէ ելքային արժէք մը։[1] Ասիկա շատ նման է կաղապարի մը ըրածին. կու տաք անոր պարամետրեր, ան կը մշակէ զանոնք եւ դուք կը ստանաք արդիւնք մը։ Սակայն մէկ Lua մոդուլի մէջ կրնաք սահմանել բազմաթիւ գործառոյթներ, մինչ մէկ էջի վրայ կրնաք սահմանել միայն մէկ կաղապար։
Ասկէ զատ, չէք կրնար ուղղակիօրէն գործարկել Lua մոդուլ մը. կրնաք գործարկել միայն մոդուլին գործառոյթներէն մէկը։ Մոդուլը գործառոյթներու պարունակիչ մըն է եւ ինքնիրմէ ոչինչ կ'ընէ։ Ուստի գործառոյթի անուն նշելու երկու պատճառ կայ. մոդուլը ինքնիրմէ գործարկելի չէ, եւ առանց գործառոյթի անուան Lua պիտի չգիտնայ թէ ո՛ր գործառոյթը կ'ուզենք գործարկել։
Մոդուլ մը ուիքի էջէ գործարկելու ամենապարզ ձեւը հետեւեալն է՝
{{#invoke:մոդուլի անուն|գործառոյթի անուն}}
Օրինակ՝ այս ձեւով կրնանք գործարկել Մոդուլ:Example-ը, որ ունի «hello» անունով գործառոյթ մը։
{{#invoke:Example|hello}}→ Բարեւ, աշխարհ։
Արգումենտներու գործածութիւնը
[Խմբագրել աղբիւրը]Արգումենտները, որոնք նաեւ պարամետր կը կոչուին, մոդուլներուն կը փոխանցուին նոյն ձեւով, ինչպէս կաղապարներուն։ Նկատի առէք սակայն, որ առաջին ուղղահայեաց գիծէն (|) ետք եկող տեքստը միշտ գործառոյթին անունն է. առաջին դիրքային արգումենտը երկրորդ գիծէն ետք եկող տեքստն է։
{{#invoke:մոդուլի անուն|գործառոյթի անուն|առաջին դիրքային արգումենտ|երկրորդ դիրքային արգումենտ|անուանեալ արգումենտ = արժէք}}
Մոդուլ:Example-ի մէջ hello_to գործառոյթը կը բարեւէ տարբեր անձեր՝ ըստ առաջին դիրքային արգումենտին։ Կ'աշխատի այսպէս՝
{{#invoke:Example|hello_to|Կատէ}}→ Բարեւ, Կատէ։{{#invoke:Example|hello_to|Ֆրետ}}→ Բարեւ, Ֆրետ։
Մոդուլ:Example-ի երրորդ գործառոյթը՝ count_fruit, կը գործածէ bananas եւ apples անուանեալ արգումենտները՝ պանանի եւ խնձորի քանակը հաշուելու համար։ Կրնայ գործարկուիլ այսպէս՝
{{#invoke:Example|count_fruit|apples=3|bananas=4}}→ Ես ունիմ 4 պանան եւ 3 խնձոր։{{#invoke:Example|count_fruit|bananas=5|apples=2}}→ Ես ունիմ 5 պանան եւ 2 խնձոր։
Մոդուլներուն մեծ մասը ունի փաստաթղթաւորման էջ մը, որ կը բացատրէ թէ ի՛նչ արգումենտներ կրնան գործածուիլ եւ ի՛նչ ազդեցութիւն կ'ունենան։
Տեսողական Խմբագրիչի մէջ
[Խմբագրել աղբիւրը]Ներկայիս Տեսողական Խմբագրիչը չի թոյլատրեր մոդուլներ կանչել իր միջերեսէն, թէեւ կրնայ խմբագրել արդէն գոյութիւն ունեցող կանչերը։ Հնարաւոր շրջանցում մըն է գործածել {{invoke}} կաղապարը։ Անոր շարահիւսութիւնը շատ նման է #invoke-ի. առաջին անանուն արգումենտը մոդուլին անունն է, երկրորդը՝ գործառոյթին անունը, իսկ միւս բոլոր արգումենտները կը նշուին սովորական կաղապարներու պէս։ Ասիկա պիտի չաշխատի այն մոդուլներուն համար, որոնք տուեալ կը կարդան զիրենք կանչող կաղապարէն, որովհետեւ կանչող կաղապարը այս պարագային {{invoke}}-ն է եւ ոչ թէ զայն գործածող էջը։ Ասիկա սակայն բացառիկ պարագայ մըն է, եւ մոդուլներուն մեծամասնութիւնը երկու ձեւով ալ նոյնպէս կ'աշխատի։
Սկրիպտ խնդրել
[Խմբագրել աղբիւրը]Այցելեցէք Ուիքիփետիա քննարկում:Lua էջը՝ որոշ գործողութիւն մը կատարող Lua սկրիպտ մը գրելու օգնութիւն խնդրելու համար։
Պատմութիւն
[Խմբագրել աղբիւրը]Ուիքիի սկրիպտային լեզուի հարցը տարիներ շարունակ քննարկուեցաւ։ Նախապէս կաղապարներու տրամաբանութիւնը կը կառուցուէր ParserFunctions-ի միջոցով, որ արագ դարձաւ դժուարընթեռնելի։ JavaScript-ի եւ Lua-ի միջեւ ընտրութենէն ետք, Թիմ Սթարլինկ գրեց Scribunto ընդլայնումը՝ Lua-ի նախնական աջակցութեամբ։ Scribunto տեղադրուեցաւ 2012-ին փորձարկումի համար, իսկ 2013-ի Փետրուարին՝ Անգլերէն Ուիքիփետիայի վրայ։ Այնուհետեւ ան հասանելի է Ուիքիմետիայի բոլոր նախագիծերուն, ներառեալ Արեւմտահայերէն Ուիքիփետիան։
Lua-ի մասին
[Խմբագրել աղբիւրը]Lua սկրիպտային լեզու մըն է, որ կրնայ գործածուիլ տուեալներ վերլուծելու, արտայայտութիւններ հաշուելու եւ արդիւնքները ձեւաւորելու համար՝ գործառոյթներու կամ առարկայակողմնորոշ ծրագրաւորումի միջոցով։ Թէեւ որոշ Lua սկրիպտներ կրնան պարզ մնալ դիւրըմբռնելիութեան համար, Lua կը թոյլատրէ բարդ կառոյցներ՝ ներառեալ աղիւսակներ, դինամիք գործառոյթներ եւ զուգորդական զանգուածներ, ուր ցուցիչները կրնան ըլլալ բառեր, ոչ միայն թիւեր։ Lua կ'աջակցի նաեւ գործառոյթներու ռեկուրսիային, ուստի պէտք է զգուշանալ աւելորդ բարդութենէ, որ ուրիշ գործածողներու համար մոդուլին սպասարկումը դժուար կը դարձնէ։
Ստորեւ վերի օրինակներուն մէջ գործածուած մոդուլին ծածկագիրն է՝
local p = {}
function p.hello(frame)
return "Բարեւ, աշխարհ։"
end
function p.hello_to(frame)
local name = frame.args[1]
return "Բարեւ, " .. name .. "։"
end
function p.count_fruit(frame)
local bananas = tonumber(frame.args.bananas) or 0
local apples = tonumber(frame.args.apples) or 0
return "Ես ունիմ " .. bananas .. " պանան եւ " .. apples .. " խնձոր։"
end
return p
Lua-ի ծածկագիրը էջի մը վրայ ընթեռնելի ձեւով ցուցադրելու համար կը գործածուի <syntaxhighlight lang="lua"> պիտակը։
MediaWiki-ի (եւ հետեւաբար Ուիքիփետիայի) մէջ Lua գործածելու հրահանգներուն համար տե՛ս Scribunto-ի Lua-ի ձեռնարկը։
Միաւորային փորձարկում
[Խմբագրել աղբիւրը]Ուիքիփետիայի Lua սկրիպտներուն համար կան միաւորային փորձարկումի քանի մը շրջանակներ։ Ասոնք խմբագրողին կը թոյլատրեն գործարկել մոդուլը որոշ մուտքային արժէքներով եւ ստուգել թէ սպասուած ելքերը կ'արտադրուին։ Օգտակար են ծրագրային յետընթացներ արագ յայտնաբերելու համար, այսինքն այն պարագաներուն, երբ սկրիպտի փոփոխութիւն մը նոր խնդիրներ կը ստեղծէ կամ հիններ կը բացայայտէ։
Ընդունուած է, որ Մոդուլ:Example-ի նման մոդուլի մը փորձարկումները կը զետեղուին Մոդուլ:Example/testcases էջին վրայ եւ կը գործարկուին Մոդուլ քննարկում:Example/testcases էջին վրայ։
Module:UnitTests այն նախալրացուած ծածկագիրն է, որ կը գործածուի testcases էջ ստեղծելու ատեն։ Փորձարկումները կը գործարկէք՝ {{#invoke:Example/testcases|run_tests}} զետեղելով քննարկումի էջին վրայ։ Module:ScribuntoUnit ուրիշ լայնօրէն գործածուող շրջանակ մըն է։
MediaWiki-ի յատուկ յատկութիւնները
[Խմբագրել աղբիւրը]Ընդհանրապէս Lua կրնայ մուտք ստանալ միայն {{#invoke:}}-ին փոխանցուած տեքստային տողերը, ինչպէս նաեւ այն ինչ որ կը բերուի mw.title.new(...):getContent()-ի եւ frame:expandTemplate()-ի միջոցով։ Lua-ի ելքը նախապէս չի մշակուիր, բացի եթէ frame:preprocess() յստակօրէն կանչուի. ասիկա կը նշանակէ, որ ելքին մէջ եղող կաղապարներու կանչերը եւ վերլուծիչ գործառոյթները ճիշդ պիտի չաշխատին։ Բացի ասկէ, էջի մը վրայ եղող ամբողջ Lua-ն սահմանափակուած է պրոցեսորի 10 երկվայրկեան ժամանակով։ Ստանտարտ Lua-ի համեմատ, Scribunto-ի Lua-ն կը զրկուի բազմաթիւ գործառոյթներէ։
Lua-ի մուտքային սահմանափակումները
[Խմբագրել աղբիւրը]Scribunto-ի մէջ Lua-ի ծածկագիրը կը գործարկուի միայն էջին վերլուծութեան պահուն։ Հետեւաբար Lua-ի ստացած միակ մուտքը էջի խմբագրումն է։ Ան չի կրնար, օրինակ, ստեղծել տուփ մը, որ կը հաշուէ ձեր մուտքագրած թիւին քառակուսի արմատը։ Lua-ի ստացած մուտքը կրնայ ներառել Ուիքիփետիայի որեւէ ներառելի տեքստային էջ։ Ասիկա չի ներառեր պատկերային նիշքեր (նոյնիսկ .SVG նիշքերը, թէեւ անոնք իրականութեան մէջ տեքստ են), ստորոգութեան մը մէջ ցանկագրուած էջերու ցանկը, ոչ ալ չներառելի սպասարկու էջերու պարունակութիւնը։
Ուիքիտեքստ
[Խմբագրել աղբիւրը]Ներառուած խորագիրները յաճախ կը պարունակեն թաքուն ծածկագիր, ինչպէս «UNIQ5ae8f2aa414ff233-h-3--QINU», որ կրնայ հարկ ըլլալ հեռացնել՝ որպէսզի անոնք ճիշդ վերլուծուին։
Ուիքիյղումները, որոնք կը գործածեն ուղղահայեաց գիծի հնարքը՝ [[Ուիքիփետիա:Օգնութիւն| ]], պիտի չաշխատին եթէ վերադարձուին որպէս ելք։ Անոնք պէտք է յստակօրէն գրուին՝ [[Ուիքիփետիա:Օգնութիւն|Օգնութիւն]]։ Պահպանումէն առաջ կատարուող միւս փոխակերպումները, ինչպէս ստորագրութիւններու փոխարինումը, նոյնպէս պիտի չմշակուին։ Կաղապարներու ներառումները, վերլուծիչ գործառոյթներու կանչերը եւ փոփոխականներու փոխարինումները, այսինքն {{...}} պարունակող ամէն ինչ, պիտի չմշակուին, ոչ ալ <ref> կամ <nowiki> պիտակները։ Ելքին մէջ նման պիտակներ աւելցնելու համար գործածեցէք frame:extensionTag-ը։
Փոխարկուած կաղապարներու նշումը
[Խմբագրել աղբիւրը]Հաճեցէք զետեղել {{Lua}} կաղապարը Lua գործածող բոլոր կաղապարներու փաստաթղթաւորման ենթաէջին վրայ։ Ասիկա պիտի օգնէ աւելի լաւ հաղորդելու Lua-ի գործածութիւնը եւ կաղապարներու փոխարկումը։
Տե՛ս նաեւ
[Խմբագրել աղբիւրը]- Special:PrefixIndex/Մոդուլ: – Lua մոդուլներու հետեւում
- mw:Extension:Scribunto/Lua reference manual – Scribunto-ի Lua-ի ձեռնարկը
- mw:Manual:Coding conventions/Lua – ծածկագրման ընդունուած չափանիշներ
Ծանօթագրութիւններ
[Խմբագրել աղբիւրը]- ↑ Կարելի է նաեւ ունենալ բազմաթիւ ելքային արժէքներ, բայց այդպիսի գործառոյթներ սովորաբար նախատեսուած չեն ուիքի էջերէ կանչուելու համար։