آموزش LUA

آنچه در این صفحه می خوانید:

معرفی زبان برنامه نویسی LUA

Lua زبان برنامه نویسی سبک وزن، سطح بالا و چند پارادایم است که در اصل برای استفاده جاسازی شده در برنامه ها طراحی شده است. Lua کراس پلتفرم است از آنجا که مفسر کد کامپایل شده در ANSI C نوشته شده است و Lua یک API C نسبتاً ساده برای جاسازی آن در برنامه ها دارد.

Lua در ابتدا در سال 1993 به عنوان زبانی برای گسترش برنامه های نرم افزاری طراحی شد تا تقاضای فزاینده برای شخصی سازی را در آن زمان برآورده کند. این برنامه امکانات اصلی اکثر زبان های برنامه نویسی رویه ای را ارائه می داد، اما شامل ویژگی های پیچیده تر یا خاص مربوط به حوزه نمی شدند. در عوض، شامل مکانیزم هایی برای گسترش زبان است، و به برنامه نویسان امکان می دهد چنین ویژگی هایی را اجرا کنند. از آنجایی که قرار بود Lua زبان فرمت جاسازی شده باشد، طراحان شرکت Lua بر بهبود سرعت، قابلیت حمل، قابلیت توسعه و سهولت استفاده در توسعه تمرکز کردند.

Lua مانند سی (C) نیست بلکه در بخش هایی که C عملکرد آن ضعیف بود کاربرد داشت مانند: فاصله از سخت افزار، ساختارهای دینامیکی، سهولت تست و اشکالزدایی. از این رو، Lua دارای محیط امن، مدیریت حافظه اتوماتیک و امکانات مناسب برای مدیریت رشته ها و دیگر انواع داده ها با اندازه پویا است.

تاریخچه زبان برنامه نویسی LUA

لوآ در سال 1993 توسط Roberto Ierusalimschy، Luiz Henrique de Figueiredo و Waldemar Celes، اعضای گروه فناوری گرافیک رایانه (Tecgraf) در دانشگاه Pontifical Catholic ریو، در برزیل ایجاد شد. از سال 1977 تا سال 1992، برزیل سیاست سخت موانع تجاری برای سخت افزار و نرم افزار رایانه ای داشت. در آن زمان، مشتریان Tecgraf نتوانستند، چه از نظر سیاسی و چه از نظر مالی، بتوانند نرم افزارهای سفارشی شده را از خارج خریداری کنند. این دلایل باعث شد Tecgraf ابزارهای اساسی مورد نیاز خود را از ابتدا به اجرا درآورد.

Lua 1.0 به گونه ای طراحی شده است که سازندگان شیء آن، با کمی تفاوت با سبک و انعطاف پذیری فعلی، ترکیب سینتکس توصیف داده SOL را در بر بگیرند. سینتکس Lua برای ساختارهای کنترل بیشتر از ماژول وام گرفته شده بود، اما همچنین از CLU و سی پلاس پلاس نیز تأثیر گرفته بود. نسخه های Lua قبل از نسخه 5.0 تحت مجوز مشابه با مجوز BSD منتشر شد. از نسخه 5.0 به بعد، Lua تحت مجوز MIT مجاز است. هر دو مجوز نرم افزار رایگان مجاز هستند و تقریباً یکسان هستند.

ویژگی های زبان برنامه نویسی LUA

معمولاً لوآ به عنوان زبان "چند پارادایم" توصیف می شود، مجموعه ای از ویژگی های عمومی را ارائه می دهد که می تواند متناسب با انواع مختلف مشکلات ارائه شود. Lua شامل پشتیبانی صریح وراثت نمی باشد، اما اجازه می دهد تا آن را با ابعاد قابل پیاده سازی اجرا کنید. به طور مشابه، Lua به برنامه نویسان اجازه می دهد تا مکان های نام، کلاس ها و سایر ویژگی های مرتبط را با استفاده از اجرای جدول جداگانه خود پیاده سازی کنند. توابع درجه یک امکان استفاده از تکنیک های زیادی را از برنامه نویسی کاربردی فراهم می کند، و جستجوی کامل واژگان اجازه می دهد تا اطلاعات ریز دانه پنهان شده برای اجرای اصل کمترین امتیاز استفاده شود.

به طور کلی، لوآ تلاش می کند به جای تهیه مجموعه ویژگی خاص برای الگوی برنامه نویسی، متا ویژگی های ساده و قابل انعطاف را ارائه دهد که در صورت لزوم قابل گسترش باشد. در نتیجه، زبان پایه سبک وزن است و مفسر کامل مرجع تنها در حدود 247 کیلوبایت ساخته شده است و به راحتی با طیف گسترده ای از برنامه ها سازگار است.

Lua زبان پویا است که برای استفاده به عنوان برنامه افزودنی یا اسکریپتی در نظر گرفته شده است و به اندازه کافی فشرده است تا در انواع سیستم عامل میزبان قرار بگیرد. این فقط تعداد کمی از ساختارهای داده اتمی مانند مقادیر بولی، اعداد (به طور پیش فرض شناورهای دقیق و عدد 64 بیتی) و رشته ها را پشتیبانی می کند. ساختار داده های معمولی مانند آرایه ها، مجموعه ها، لیست ها و سوابق را می توان با استفاده از تک ساختار داده های نیتیو لوآ، جدول، که در اصل آرایه انجمنی ناهمگن است، نشان داد.

لوآ مجموعه کوچکی از ویژگی های پیشرفته مانند توابع کلاس اول، جمع آوری زباله، بستار، Tail call مناسب، coercion (تبدیل خودکار بین رشته ها و مقادیر تعداد در ران تایم)، کوروتین (Coroutine) و بارگذاری ماژول پویا را پیاده سازی می کند.

کاربرد زبان برنامه نویسی LUA

در ساخت بازی های ویدیویی، Lua به طور گسترده به دلیل آسان بودن برای جاسازی، اجرای سریع و منحنی یادگیری کوتاه، به عنوان زبان برنامه نویسی توسط برنامه نویسان مورد استفاده قرار می گیرد. در سال 2003، نظرسنجی انجام شده توسط GameDev.net نشان داد که Lua محبوبترین زبان برنامه نویسی برای برنامه نویسی بازی ها بود. در 12 ژانویه 2012، لووا به عنوان برنده جایزه Front Line Award 2011 از مجله Game Developer در دسته ابزارهای برنامه نویسی معرفی شد.

از طریق برنامه افزودنی Scribunto، Lua به عنوان زبان اسکریپت در نرم افزار MediaWiki موجود است که ویکی پدیا و ویکی های دیگر را قدرت می دهد. از جمله کاربردهای آن، امکان ادغام داده ها از Wikidata در مقالات، و تأمین انرژی خودکار سیستم تاکسباکس است.

از دیگر موارد کاربرد LUA می توان به موارد زیر اشاره نمود:

  • اسکریپت نویسی در برنامه های مستقل
  • اسکریپت نویسی در وب
  • افزونه ها و افزونه هایی برای پایگاه های داده مانند MySQL Proxy و MySQL WorkBench
  • سیستم های امنیتی مانند سیستم تشخیص نفوذ

برای اطلاعات بیشتر و یادگیری کامل LUA می توانید به صفحه آموزش کامل LUA مراجعه کنید.

مثال زبان برنامه نویسی LUA

مثال تابع

رفتار توابع Lua به عنوان مقادیر درجه یک در مثال زیر، جایی که رفتار عملکرد چاپ اصلاح شده نشان داده شده است:

do
  local oldprint = print
  -- Store current print function as oldprint
  function print(s)
    --[[ Redefine print function. The usual print function can still be used
      through oldprint. The new one has only one argument.]]
    oldprint(s == "foo" and "bar" or s)
  end
end

هرگونه فراخوانی بعدی برای print، اکنون از طریق تابع جدید هدایت می شود، و به دلیل محدوده واژگانی لوا، عملکرد چاپ قدیمی تنها با چاپ جدید و اصلاح شده قابل دسترسی خواهد بود.

مثال بستار

Lua همچنین از بستار، همانطور که در زیر نشان داده شده است، پشتیبانی می کند:

function addto(x)
  -- Return a new function that adds x to the argument
  return function(y)
    --[=[ When we refer to the variable x, which is outside the current
      scope and whose lifetime would be shorter than that of this anonymous
      function, Lua creates a closure.]=]
    return x + y
  end
end
fourplus = addto(4)
print(fourplus(3))  -- Prints 7

--This can also be achieved by calling the function in the following way:
print(addto(4)(3))
--[[ This is because we are calling the returned function from 'addto(4)' with the argument '3' directly.
  This also helps to reduce data cost and up performance if being called iteratively.
]]

بستار جدیدی برای متغیر x در هر addto ایجاد می شود، به طوری که هر تابع ناشناس جدید برگشت داده شده همیشه به پارامتر x خود دسترسی پیدا می کند. بستار این کار توسط جمع آوری زباله های لوا، درست مانند هر شی دیگر انجام می شود.

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود