پرش به محتوا

ویکی‌پدیا:لوآ

از ویکی‌پدیا، دانشنامهٔ آزاد
 ویکی‌پدیا:لوآ
پروژه
 بحث ویکی‌پدیا:لوآ
بحث پروژه
 راهنما بایدها منابع
انگلیسی: متا مدیاویکی
 
فضاهای نام موضوع فضاهای نام بحث
0 مقاله بحث 1
2 کاربر بحث کاربر 3
4 ویکی‌پدیا بحث ویکی‌پدیا 5
6 پرونده بحث پرونده 7
8 مدیاویکی بحث مدیاویکی 9
10 الگو بحث الگو 11
12 راهنما بحث راهنما 13
14 رده بحث رده 15
100 درگاه بحث درگاه 101
118 پیش‌نویس بحث پیش‌نویس 119
446 برنامه آموزشی Education Program talk 447
828 پودمان بحث پودمان 829
2300 [[ویکی‌پدیا:ویکی‌پروژه ابزارها|]] 2301
2302 [[ویکی‌پدیا:ویکی‌پروژه ابزارها|]] 2303
2600 مبحث
-1 صفحه‌های ویژه
-2 مدیا

لوآ یک زبان برنامه‌نویسی است که در مدیاویکی، افزونه اسکریبونتو امکان استفاده از کدهای نوشته شده به آن را فراهم می‌کند. این امکان در ویکی‌پدیای فارسی نیز در دسترس است. کد لوآ را می‌توان داخل الگوهای ویکی با قابلیت اسکریبونتو بدین شکل «{{#invoke:}}» جاسازی کرد. این افزونه از لوآ ۵٫۱ تا تاریخ ژوئیه ۲۰۱۵ پشتیبانی می‌کند.

کد منبع لوآ درون صفحاتی که به آنها پودمان می‌گوییم (مانند پودمان:Bananas) ذخیره می‌شود. این پودمان‌های منحصربه‌فرد سپس با کد {{#invoke:}} در صفحات الگو فراخوانی می‌شوند (مانند پودمان:Bananas/توضیحات از کد {{#invoke:Bananas|hello}} برای چاپ متن «سلام، دنیا!» استفاده می‌کند).

اجرای پودمان

[ویرایش]

پودمان‌ها روی صفحه‌های عادی ویکی با تابع تجزیه‌کننده #invoke اجرا می‌شوند. سینتکس #invoke مشابه سینتکس الگو است، اما تفاوت‌هایی هم دارد. مهم‌ترین تفاوت این است که شما باید اسم یک تابع را مشخص کنید. تابع مجموعه‌ای از دستورالعمل‌ها و فرمان‌ها است که مقادیر ورودی می‌پذیرد، آنها را پردازش می‌کند و یک مقدار خروجی برمی‌گرداند.[۱] درست مثل یک الگو: شما آرگومان می‌دهید، الگو آنها را پردازش می‌کند و یک نتیجه به شما برمی‌گرداند. البته شما می‌توانید چندین تابع در یک پودمان لوآ تعریف کنید درحالی که فقط یک الگو در یک صفحه تعریف می‌شود.

علاوه بر این، شما نمی‌توانید پودمان لوآ را مستقیماً اجرا کنید - فقط می‌توانید یکی از توابع پودمان را اجرا کنید. پودمان فقط نگهدارنده توابع است و کار خاصی انجام نمی‌دهد. پس دو دلیل هست که باید نام یک تابع را وارد کنیم: نمی‌توانیم خود پودمان را اجرا کنیم و دوم اینکه بدون مشخص کردن نام یک تابع، لوآ نخواهد فهمید کدام تابع را باید اجرا کند.

ساده‌ترین راه اجرای پودمان از صفحهٔ ویکی این شکلی است:

{{#invoke:نام پودمان|نام تابع}}

برای مثال، پودمان:Bananas را می‌توانیم به این شکل اجرا کنیم، که یک تابع به اسم «hello» دارد.

  • {{#invoke:Bananas|hello}} → سلام، دنیا!

استفاده از آرگومان‌ها

[ویرایش]

آرگومان همان‌طور که به الگوها ارسال می‌شود به پودمان نیز فرستاده می‌شود. توجه کنید که تنها تفاوت در این است که اولین آرگومان بعد از اولین کاراکتر | نام تابع است.

{{#invoke:نام پودمان|نام تابع|اولین آرگومان|دومین آرگومان|آرگومان نام‌دار = مقدار}}

برای مثال، در پودمان:BananasArgs، تابع «hello» به افراد گوناگون بسته به اولین آرگومان سلام می‌کند. این پودمان اینطوری کار می‌کند:

  • {{#invoke:BananasArgs|hello|علیرضا}} ← سلام، علیرضا!
  • {{#invoke:BananasArgs|hello|آتنا}} ← سلام، آتنا!

BananasArgs همچنین تابعی به اسم «count_fruit» دارد که از آرگومان‌های نام‌دار bananas و apples برای شمارش مقدار موزها و سیب‌هایی که داریم استفاده می‌کند. این پودمان اینطوری کار می‌کند:

  • {{#invoke:BananasArgs|count_fruit|apples=3|bananas=4}} ← من ۴ موز و ۳ سیب دارم
  • {{#invoke:BananasArgs|count_fruit|bananas=5|apples=2}} ← من ۵ موز و ۲ سیب دارم

بیشتر پودمان‌ها صفحهٔ مستنداتی دارند که آرگومان‌هایی که می‌توان استفاده کرد و تأثیر و استفاده‌شان را توضیح می‌دهد.

نمونه پودمان‌ها

[ویرایش]
  • پودمان:Bananas: ساده‌ترین اسکریپت ممکن، یک تابع بدون آرگومان را ارائه می‌کند.
  • پودمان:BananasArgs: نشان می‌دهد چطور به پارامترها دسترسی و از آنها استفاده کنیم.

درخواست اسکریپت

[ویرایش]

از ویکی‌پدیا:لوآ درخواست‌ها برای درخواست کمک در نوشتن یک اسکریپت لوآ تا اجرای وظیفه‌ای مشخص در ویکی‌پدیا یا دیگر پروژه بنیاد ویکی‌مدیا دیدن کنید.

تاریخچه

[ویرایش]

اول از الگوی qif شروع شد، بعد توابع تجزیه‌گر (ParserFunctions) به ویکی افزوده شدند و پس از آن افزونهٔ Lua، بعد بر روی اینکه زبان اسکریپتی ویکی جاوااسکریپت باشد یا لوآ مناقشه پیش آمد، بعد افزونهٔ WikiScripts ایجاد شد، و درنهایت Tim Starling افزونهٔ Scribunto را با پشتیبانی اولیه از زبان لوآ ساخت. بعد از سال‌ها بحث، لوآ در سال ۲۰۱۲ برای آزمایش در test2.wikipedia.org نصب شد، و از کاربران برای آزمایش آن از طریق ساخت پودمان‌های لوآ دعوت شد. بعد از آزمایش در mediawiki.org و دیگر ویکی‌های آزمایش ویکی‌مدیا، لوآ در فوریهٔ ۲۰۱۳ در همهٔ ویکی‌پدیاها فعال شد.

دربارهٔ لوآ

[ویرایش]
همچنین ببینید ارائه کوتاه براد جرش از نمونهٔ ساده چگونگی تبدیل الگوی ویکی‌متن به پودمان لوآ (پی‌دی‌اف، انگلیسی)

لوآ یک زبان اسکریپتی است که در آن می‌توان توابع یا برنامه‌نویسی شیءگرا را برای تحلیل داده‌ها، محاسبات، و قالب‌بندی نتایج به کار برد.

یکی از مهم‌ترین عبارت‌هایی که باعث کندتر عمل کردن الگوهای ویکی‌پدیا می‌شود دستور {{#switch:}} است که در هر صفحه‌ای معمولاً چندین بار فراخوانی می‌شود. با استفاده از جداول لوآ می‌توان به شدت بر کارایی این جستجوها افزود و تقریباً به درجهٔ پیچیدگی ‎O(1)‎ دست یافت، این داده‌ها — حتی اگر چندین بار پودمان لوآ فراخوانی شده باشد — تنها یک بار فراخوانی می‌شوند. در یک آزمایش تبدیل یک دستور switch با ۱۵۰ آرگومان به یک پودمان لوآ باعث شد حدود ۵۰٪ در زمان تجزیهٔ صفحه صرفه‌جویی شود.[۲]

آزمایش واحد

[ویرایش]

چارچوب آزمایش واحد برای اسکریپت‌های لوآ در ویکی‌پدیا با پودمان:UnitTests دردسترس است. این پودمان کمک می‌کند اسکریپت را با مجموعه‌ای از مقادیر ورودی اجرا کنیم و نهایتاً اعتبارسنجی کنیم که خروجی همان مقادیر مورد نظرمان باشد. آزمایش‌های واحد بیشتر برای تشخیص پسرفت‌ها کاربرد کارد، و پسرفت‌ها همان تغییراتی هستند که به یک اسکریپت می‌دهیم و باعث مشکلات جدید یا قدیمی می‌شود.

بر اساس قرارداد، آزمایش‌های واحد برای پودمانی مثل پودمان:Bananas در زیرصفحهٔ پودمان:Bananas/testcases قرار می‌گیرند و در بحث پودمان:Bananas/testcases با چیزی مثل {{#invoke: Bananas/testcases | run_tests}} اجرا می‌شود. متدهای آزمایش با «test «شروع می‌شوند. نمونهٔ ساده از پودمان:Bananas/testcases در زیر آورده شده است.

-- Unit tests for [[پودمان:Bananas]]. Click talk page to run tests.
local p = require('Module:UnitTests')

function p:test_hello()
    self:preprocess_equals('{{#invoke:Bananas | hello}}', 'سلام، دنیا!')
end

return p

برای مشاهدهٔ فهرستی از پودمان‌هایی که از آزمایش واحد بهره می‌برند، ویژه:پیوند به این صفحه/پودمان:UnitTests را ببینید.

یک چارچوب آزمایش واحد دیگری هم است به اسم پودمان:ScribuntoUnit که از ویکی‌پدیای مجارستان سرچشمه گرفته است. این چارچوب خیلی شبیه به پودمان:UnitTests است، اما شکل کدنویسی متفاوتی دارد و خطاهای واقعی که به‌واسطهٔ فراخوانی‌های حفاظت‌شده به دام افتاده‌اند را برمی‌گرداند. این چارچوب همچنین تابعی برای مقایسهٔ ممیزهای شناور با دقت تعیین‌شده دارد.

بومی‌سازی پودمان

[ویرایش]

بومی‌سازی ارقام

[ویرایش]

پودمان:Numeral converter برای استفاده در پودمان کاربرد دارد. بیشترین کاربرد این پودمان برای بومی‌سازی ارقام و علائم نگارشی است، اما کاربردهای دیگر هم دارد. به زبان ساده، اگر در خروجی ارقام انگلیسی مشاهده کردید، این پودمان آنها را به فارسی برمی‌گرداند. استفاده از این پودمان بسیار راحت است و نمونه‌ای ساده از آن را در پودمان:BananasArgs در عمل می‌بینید و در ادامه نمونه ساده‌تری آماده شده است.

local p = {}
local converter = require("Module:Numeral converter")

function p.hello_world()
return "سلام " .. converter.convert("fa", 2) .. " دنیا!"
end

return p

ترجمه و بومی‌سازی رشته‌ها

[ویرایش]

صحبت خاصی برای ترجمه و بومی‌سازی رشته‌ها وجود ندارد. فقط تجربه لازم است و ذکر چند نکته حیاتی. حتماً به‌دقت رشته‌ها را به فارسی برگردانید و ترجمه دقیقی داشته باشید. ممکن است بعضی رشته‌ها ظاهری مانند متنی نیازمند ترجمه داشته باشند اما کاربردی غیر از آن دارند که لازم است حواستان را جمع کنید و بهتر است در صفحهٔ تمرین پودمان اینکار را کنید و اگر همه‌چیز درست کار می‌کرد به پودمان منتقل کنید.

ویژگی‌های مختص ویکی‌پدیا

[ویرایش]

Overall: Lua can only get input as text strings passed to the {{#invoke:}} and what can be fetched via mw.title.new(...):getContent() and frame:expandTemplate(). Lua output will not be preprocessed unless frame:preprocess() is explicitly called, meaning that template calls, parser functions, etc. in the output will not work correctly. Also, all Lua in the page is limited to 10 seconds CPU time (you can look in the source code of a rendered page to see how long a template or module took to parse). And relative to standard Lua, Scribunto's Lua lacks all sorts of functions (see mw:Extension:Scribunto/Lua reference manual § Differences from standard Lua).

محدودیت‌های ورودی لوآ

[ویرایش]

Lua code in Scribunto is only run when the page is being parsed. Therefore, the only user input that Lua can receive is by page editing - it cannot create a box that calculates the square root of a number you type in, or recalculate a piece of the Mandelbrot set depending on which part of the parent set you click on. The input Lua can receive includes any transcludeable text page on Wikipedia. This does not include graphics files (not even .SVG files, although they are actually text, unless you cut and paste it onto a Wiki text page), the list of pages listed in a راهنما:رده، nor the contents of ویکی‌پدیا:تراگنجانش راهنما:صفحات ویژه.

ویکی‌متن

[ویرایش]

Transcluded Wikipedia headers frequently contain a hidden code such as "UNIQ5ae8f2aa414ff233-h-3--QINU" which may need to be stripped out in order for them to be parsed effectively.

Wikilinks of the type [[راهنما:فهرست]] won't work if returned as output - they need to be written explicitly as [[راهنما:فهرست]]. Other pre-save transforms, such as replacing ~~~~ with signatures, will also fail to be processed. Template transclusions, parser function calls, and variable substitutions (i.e. anything with a {{...}}) will not be processed, nor will tags such as <ref> or <nowiki>.

برچسب‌زدن الگوهای تبدیل‌شده

[ویرایش]

در صفحهٔ بحث الگوهایی که از پودمان‌های لوآ استفاده می‌کنند الگوی {{بحث لوآ}} را بیفزایید.

جستارهای وابسته

[ویرایش]
منابع مختص ویکی‌پدیای فارسی
مستندات لوآ در مدیاویکی

پانویس

[ویرایش]
  1. شما همچنین می‌توانید چندین مقدار خروجی داشته باشید، اما توابعی که اینکار را می‌کنند به‌طور عادی در صفحه‌های ویکی استفاده نمی‌شوند.
  2. Lua (2012-03-14). "Lua templating/Converting Wikitext templates". Wikia Developers Wiki (به انگلیسی). Retrieved 2014-10-26.{{cite web}}: نگهداری یادکرد:تاریخ و سال (link)