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

من می توانم دلایل زیر را برای لوا به شما ارائه دهم:

  • - برنامه ها به راحتی بین ویندوز و لینوکس قابل حمل خواهند بود (این واقعیت نیست که کد بدون تغییر کار می کند، اما اگر از کتابخانه های مخصوص پلتفرم استفاده نشود انتقال بدون دردسر خواهد بود)
  • - سربار کوچک برنامه های ایجاد شده
  • - سرعت بالاکار کنید و اپلیکیشن ها را دانلود کنید
  • - امکان "چسب کردن" سریع هر کتابخانه C به برنامه شما - "چسب" بهتری برای کتابخانه ها پیدا نخواهید کرد.
  • - نحو مینیمالیستی زیبا از زبان، با قابلیت پیاده سازی پارادایم های برنامه نویسی مدرن بر روی آن
  • - استقرار برنامه های Lua بسیار آسان است
  • - مصرف کم حافظه

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

به عنوان یک جعبه ابزار گرافیکی، ما از iup استفاده خواهیم کرد - یک کتابخانه چند پلتفرمی، که در اصل با انتظار استفاده از Lua ایجاد شده است.

در حال نصب Lua SDK
به عنوان بخشی از ایده استفاده از Lua به عنوان یک زبان برنامه نویسی مستقل، اسمبلی Lua برای ویندوز ایجاد شد که شامل کتابخانه های لازم برای کارهای روزمره است که هنگام برنامه نویسی برای سیستم عامل مشخص شده ایجاد می شود: کار با پایگاه داده، رابط کاربری گرافیکی، تجزیه XML. ، و غیره. از اینکه نسخه Lua در اسمبلی 5.1 است و نه 5.2 خجالت نکشید - در مورد ما تفاوت زیادی بین آنها وجود ندارد.

بیلد را دانلود و نصب کنید.

شرح مختصری از مفهوم iup
من مدت زیادی فکر می کردم که چگونه می توان روند ایجاد یک برنامه را بدون پرداختن به جزئیات در مورد دستگاه iup توصیف کرد. و تصمیم گرفتم به طور خلاصه اصول اصلی آن را شرح دهم:
  • - iup.dialog عنصر ریشه رابط برنامه است - همه عناصر در این ظرف قرار می گیرند
  • - مکان یابی عناصر در یک ظرف با استفاده از طرح بندی انجام می شود: تنظیم قوانین برای قرار دادن یک عنصر در یک ظرف. Iup خود عنصر را طبق قوانین قرار داده و ترسیم می کند. ظروف اصلی قاب، سایز عمودی، اندازه افقی هستند.
  • - کنترل کننده های رویداد به عنوان توابع متصل به ویجت تنظیم می شوند
  • - پس از ایجاد گفتگو، حلقه رویداد شروع می شود
اگر قبلاً با Tk، WxWidgets یا WinAPI برای رابط کاربری گرافیکی نوشته‌اید، همه اینها آشنا به نظر می‌رسد. در غیر این صورت، برنامه با جزئیاتی همراه با نظرات پوشش داده می شود.
کد برنامه

اتصال کتابخانه‌ها iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") -- کتابخانه برای کار با Canvas برای ذخیره نمودار در یک فایل require("cdlua") require("iupluacd") need(" رشته ") -- متغیرهای سراسری برای ویجت ها و تنظیمات برنامه -- حداکثر تعداد نمودار plots_number = 5 -- ویجت های برگه ای که ویجت های ورودی داده برای هر نمودار در آن قرار می گیرند برگه ها = () -- ظروف ویجت vboxes = () -- چک باکس ها برای انتخاب اینکه کدام نمودارها باید چک باکس ایجاد شوند = () -- در اینجا ویجت ها را با متن داده های مربوط به نقاط همخوان ذخیره می کنیم = () -- ویجت های برچسب برای هر نمودار افسانه = () -- ویجت هایی برای تعیین محورهای مختصات global_legend = () -- با کمال تاسف، هیچ رشته تابع تقسیم استاندارد Lua وجود ندارد: split(sep) local sep، fields = sep یا ":"، () local pattern = string.format("([^%s]+)" , sep) self:gsub (الگو، تابع(c) فیلدها[#fields+1] = c end) فیلدهای برگشتی پایان -- تابع یک نمودار روی پلاتر در تابع نقاط مشخص شده رسم می کند یون draw_plot(pwidget، pnum، داده) x = data.value:split(") y = data.value:split(") if checkboxes.value == "(!LANG:OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "ساختن"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "خط ساده", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "صرفه جویی" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости !} پسوند مورد نظر pic = fs_dlg.value اگر نه (string.sub(pic, string.len(pic)-3) == ".emf") سپس pic = pic .. پایان ".emf" -- یک بوم شبه مرتبط با فایل ایجاد کنید tmp_cv = cd.CreateCanvas(cd.EMF, pic .. "400x300") -- رسم بر روی بوم iup.PPlotPaintTo(plot,tmp_cv) -- ذخیره داده ها در فایل cd.KillCanvas(tmp_cv) end end -- نمایش گفتگوی plot_dg: showxy(iup.CENTER, iup.CENTER) -- حلقه رویداد را برای گفتگو اجرا کنید اگر (iup.MainLoopLevel()==0) سپس iup.MainLoop() end end -- در حلقه برگه هایی ایجاد کنید که در آن قرار می دهیم ویجت -- برای جمع آوری داده برای i=1, plots_number do -- ویجت های متنی ایجاد کنید که مختصات نقاط در آن وارد شود coords[i] = () برای j = 1,2 do coords[i][j] = iup .text ( expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 ) end -- ویجت برای ویرایش افسانه های شرح نمودار[i] = iup.text( expand = "HORIZONTAL" ) -- محفظه برگه ایجاد کنید و عناصر آن را vboxها پر کنید [i] = iup.vbox (i up.hbox ( iup.label ( عنوان = "(!LANG: Graph label:" }, legends[i] }, iup.hbox { iup.label { title="ایکس:", }, coords[i] }, iup.hbox { iup.label { title="Y:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "برنامه" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "برنامه" .. i, value = "بر" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для !} تنظیمات عمومی graphics frame = iup.frame ( iup.vbox ( iup.label( title="(!LANG:Use data:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "امضاها"}, iup.hbox { iup.label{ title = "محور X"}, global_legend }, iup.hbox { iup.label{ title = "محور Y"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="ساختن نمودار", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}

چند کلمه در مورد استقرار
اسکریپت را می توان با دستور زیر اجرا کرد:

Luaplotter.exe

در این حالت، کتابخانه ها از زیر شاخه clibs/ که در فهرستی که Lua for Windows در آن نصب شده است، قرار می گیرد. برای بسته بندی اسکریپت و کتابخانه ها تا حد امکان فشرده برای انتقال به ماشین دیگر، کافی است فایل های زیر را در یک پوشه کپی کنید (که با مسیرهای نسبی از دایرکتوری نصب Lua مشخص شده است):

Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs51d. clibs/iuplua_pplot51.dll clibs/iupluacontrols51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

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

متأسفانه، فایل‌های cd.dll، cdluad51.dll و iupcd.dll ممکن است در این نسخه از Lua برای ویندوز به درستی کار نکنند، بنابراین توصیه می‌کنم با استفاده از پیوند زیر، آنها را از آرشیو بردارید.

نتایج
بایگانی با نسخه کارآمد، لانچر app.bat برای راحتی کار اضافه شده است.

اسکرین شات ها:

در نتیجه، ابزاری هرچند دست و پا چلفتی دریافت کردیم که همان عملکردی را دارد که گویی در یک زبان برنامه نویسی «جدی» نوشته شده است. در عین حال، استقرار آن آسان و با وزن کلی کمتر از 2 مگابایت است. مصرف حافظه - حدود 7 مگابایت. کد منبع قابل ویرایش است، Lua خود به صورت تعاملی قابل درک است، که توسعه چنین نرم افزاری را در این زمینه ساده می کند.

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

برچسب ها: اضافه کردن برچسب

پلاگین LUA - برای برخی از مدهایی که در آن نوشته شده اند لازم است قلاب اسکریپت V برای GTA 5.

Lua یک زبان برنامه نویسی اسکریپت است که توسط بخش Tecgraf (گروه فناوری گرافیک کامپیوتری) دانشگاه کاتولیک ریودوژانیرو (برزیل) توسعه یافته است. مفسر زبان آزادانه و منبع باز در زبان C توزیع می شود.

از نظر ویژگی‌ها، ایدئولوژی و پیاده‌سازی، زبان به جاوا اسکریپت نزدیک‌تر است، اما Lua ساختارهای قدرتمندتر و بسیار انعطاف‌پذیرتری دارد. اگرچه Lua به صراحت مفاهیم کلاس و شی را شامل نمی شود، مکانیسم های برنامه نویسی شی گرا، از جمله وراثت چندگانه، به راحتی با استفاده از جدول های متا، که مسئول بارگذاری بیش از حد اپراتور و غیره نیز هستند، پیاده سازی می شوند. مدل برنامه نویسی شی گرا پیاده سازی شده، نمونه اولیه است (مانند در جاوا اسکریپت).

پلاگین LUA برای اسکریپت Hook V

این زبان به طور گسترده برای ایجاد یک تکرار استفاده می شود نرم افزار(مثلاً می گوید رابط کاربری گرافیکی پکیج Adobeلایت روم). همچنین به عنوان یک زبان برنامه نویسی برای سطوح و برنامه های افزودنی در بسیاری از بازی ها (از جمله World of Warcraft) به دلیل سهولت در جاسازی، سرعت اجرای کد و سهولت یادگیری محبوبیت به دست آورد.

روش نصب

  1. شما نیاز به نصب دارید
  2. سپس فقط تمام فایل ها را از بایگانی (از جمله پوشه ها) در آن کپی کنید پوشه ریشه GTA 5.
  3. در آینده، اسکریپت ها در LUA در پوشه "/scripts/addins" بارگذاری می شوند.

Lua برای ویندوز (LfW) یک زبان برنامه نویسی تفسیر شده است که توسط بخش تکگراف گروه فناوری گرافیک کامپیوتری دانشگاه کاتولیک پاپی ریودوژانیرو در برزیل توسعه یافته است. مفسر توسعه‌یافته با متون متن‌باز به زبان C آزادانه توزیع می‌شود.

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

این زبان به طور گسترده ای برای ایجاد نرم افزارهای تکراری استفاده می شود - به ویژه، رابط گرافیکی بسته روی آن نوشته شده است. فتوشاپلایت روم. همچنین به دلیل سهولت در جاسازی، سرعت اجرای کد و سهولت یادگیری، به عنوان یک زبان برنامه نویسی برای سطوح و افزونه ها در بسیاری از بازی ها (مانند World of Warcraft) شهرت پیدا کرده است.

Lua معمولاً به عنوان یک زبان چند پارادایم شناخته می شود. این مجموعه کوچکی از مکانیسم‌های اساسی را ارائه می‌کند که می‌توانند برای حل مشکلات مختلف گسترش یابند، به جای مجموعه‌ای از مشخصات سخت و پیچیده که برنامه‌نویسی را در یک پارادایم واحد تضمین می‌کند.

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

- پسوند (فرمت) کاراکترهای انتهای فایل بعد از آخرین نقطه است.
- کامپیوتر دقیقاً با پسوند نوع فایل را تعیین می کند.
- توسط پیش فرض ویندوزپسوند نام فایل را نشان نمی دهد.
- برخی از کاراکترها را نمی توان در نام و پسوند فایل استفاده کرد.
- همه فرمت ها به یک برنامه مرتبط نیستند.
- در زیر تمام برنامه هایی که می توانید با آنها فایل LUA را باز کنید آورده شده است.

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

Notepad2 یک نرم افزار ساده است که به شما امکان تایپ و ویرایش متن را می دهد. این به ایجاد صفحات HTML، برنامه نویسی به زبان های مختلف (CSS، جاوا، جاوا اسکریپت، پایتون، SQL، Perl، PHP) کمک می کند زیرا قادر به برجسته کردن کد است. این برنامه بر اساس اصل یک دفترچه یادداشت ساده ساخته شده است، سبک و جمع و جور است. این ویرایشگر متن تمام براکت ها را برای جفت بررسی می کند، از تورفتگی خودکار پشتیبانی می کند. Notepad2 نه تنها از رمزگذاری های ASCII و UTF-8 پشتیبانی می کند، بلکه می داند چگونه آنها را تبدیل کند. به شما امکان می دهد عملیات های ناخواسته را چندین سطح به عقب برگردانید. پشتیبانی از انتخاب بلوک عناصر متنی و دارای خطوط شماره گذاری شده...

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

برنامه های زیادی در اینترنت وجود دارد که به شما امکان ویرایش را می دهد منبعبرنامه، فایل و غیره دیگر. با این حال، اکثر این برنامه ها فقط هستند ویرایشگر متنمثل یک دفترچه یادداشت تفاوت آنها با ویرایشگر فوق فقط در این است که برجسته سازی نحوی دارند. با این حال، در برخی موارد، این قابلیت برنامه کافی نیست. ممکن است یک برنامه نویس نیاز به یافتن سریع بخش های مختلف یک سند داشته باشد. و اکنون بالاخره برنامه ای ظاهر شده است که به شما امکان می دهد این مشکل را حل کنید. این برنامه SynWrite نام دارد. او ویژگی متمایز کننده– وجود نوار ناوبری با درختی که ...

اسکریپت های لوا

یک اسکریپت نوشته شده به زبان Lua عملکرد خاصی ندارد که اجرای آن از آن آغاز شود. یک اسکریپت را می توان به سادگی به عنوان مجموعه ای از دستورات (دستورالعمل ها) مشاهده کرد که از اولین دستورالعمل اجرا می شوند.

اسکریپت می تواند بسیار ساده باشد، فقط از یک دستور تشکیل شده باشد، یا بسیار پیچیده، حاوی ده ها، صدها یا حتی هزاران دستورالعمل باشد. دستورالعمل های زیر ممکن است با یک نقطه ویرگول (;) از هم جدا شوند. با این حال، این الزام اجباری نیست، بنابراین همه کدهای زیر از نظر نحو صحیح هستند:

کار با متغیرها در Lua

از متغیرها برای ذخیره مقادیر در حین اجرای اسکریپت استفاده می شود.

نام متغیرها در Lua

نام متغیرها (شناسه ها) در Lua می تواند هر دنباله ای از حروف، اعداد و زیرخط هایی باشد که با یک عدد شروع نمی شوند.

توجه داشته باشید

زبان Lua به حروف بزرگ و کوچک حساس است، بنابراین abc، Abc، ABC نام‌های متفاوتی هستند.

جدول زیر کلماتی را که توسط زبان Lua رزرو شده اند و نمی توانند در نام متغیرها استفاده شوند فهرست می کند:

و شکستن do otherif

پایان false برای تابع if

در محلی صفر نیست یا

تکرار بازگشت سپس true تا زمانی که

علاوه بر این، تمام نام هایی که با یک خط زیر شروع می شوند و بعد از آن شروع می شوند حروف بزرگ(به عنوان مثال _VERSION) نیز رزرو شده است.

متغیرهای Lua چیست؟

متغیرها در Lua می توانند سراسری یا محلی باشند. اگر متغیری به صراحت محلی اعلام نشود، جهانی در نظر گرفته می شود.

متغیرهای جهانی Lua

یک متغیر سراسری در لحظه ای که اولین مقدارش به آن اختصاص داده می شود ظاهر می شود. قبل از تخصیص اولین مقدار، دسترسی به یک متغیر سراسری صفر به دست می دهد.

MsgBox(tostring(g)) --> صفر

MsgBox(tostring(g)) --> 1

متغیر سراسری تا زمانی وجود دارد که محیط اجرای اسکریپت وجود دارد و برای هر کد Lua که در این محیط اجرا می شود در دسترس است.

در صورت لزوم، می توانید یک متغیر سراسری را به سادگی با تنظیم آن روی صفر، به صراحت حذف کنید.

g = 1 - یک متغیر جهانی g با مقدار 1 ایجاد کنید

g = صفر - متغیر جهانی g را حذف کنید

MsgBox(tostring(g)) --> صفر

همه متغیرهای سراسری فیلدهایی در یک جدول منظم به نام محیط جهانی هستند. این جدول از طریق متغیر جهانی _G در دسترس است. از آنجایی که فیلدهای محیط جهانی همه متغیرهای جهانی هستند (از جمله خود _G)، پس _G._G == _G.

متغیرهای محلی Lua

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

محلی a - متغیر محلی a را اعلام کنید

local b = 1 - متغیر محلی b را اعلام کنید، مقدار 1 را به آن اختصاص دهید

محلی c، d = 2، 3 - متغیرهای محلی c و d را اعلام کنید، مقادیر 2 و 3 را به آنها اختصاص دهید.

دامنه یک متغیر محلی پس از اعلان شروع می شود و تا پایان بلوک ادامه می یابد.

توجه داشته باشید

محدوده یک متغیر بخشی از کد برنامه است که در آن می توانید به مقدار ذخیره شده در این متغیر دسترسی داشته باشید.

بلاک یعنی:

بدنه ساختار کنترلی (اگر-پس،دیگر، برای، در حالی که، تکرار)؛

بدن عملکرد؛

یک قطعه کد محصور در کلمات کلیدی do...end.

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

local i = 1 - متغیر i در داخل اسکریپت محلی است

در حالی که من<= a do - цикл от 1 до 5

local a = i^2 - متغیر a محلی در داخل حلقه while است

MsgBox(a) --> 1، 4، 9، 16، 25

MsgBox(a) -->

اگر من > 5 پس

local a - متغیر a در داخل محلی است

MsgBox(a) --> 10

MsgBox(a) --> 5 (در اینجا به a جهانی اشاره دارد)

local a = 20 - متغیر a محلی در داخل do-end است

MsgBox(a) --> 20

MsgBox(a) --> 5 (در اینجا به a جهانی اشاره دارد)

توجه داشته باشید

در صورت امکان، توصیه می شود از متغیرهای محلی به جای متغیرهای جهانی استفاده کنید. این کار از آلودگی فضای نام جهانی جلوگیری می کند و عملکرد بهتری را ارائه می دهد (زیرا دسترسی به متغیرهای محلی در Lua کمی سریعتر از دسترسی به متغیرهای جهانی است).

انواع داده های لوا

زبان Lua از چه نوع داده ای پشتیبانی می کند؟

Lua از انواع داده های زیر پشتیبانی می کند:

1. صفر (هیچ چیز). مربوط به عدم وجود متغیر ارزش. این نوع با یک مقدار، صفر نشان داده می شود.

2. بولی (منطقی). به این نوعمقادیر عبارتند از false (نادرست) و true (true).

هنگام انجام عملیات منطقی، مقدار nil به عنوان نادرست در نظر گرفته می شود. تمام مقادیر دیگر، از جمله عدد 0 و رشته خالی، درست در نظر گرفته می شوند.

3. عدد (عددی). برای نمایش مقادیر عددی استفاده می شود.

ثابت های عددی می توانند اختیاری باشند قسمت کسریو یک توان اعشاری اختیاری که با کاراکترهای "e" یا "E" مشخص شده است. ثابت های عددی صحیح را می توان با استفاده از پیشوند 0x به صورت هگزادسیمال مشخص کرد.

نمونه هایی از ثابت های عددی معتبر: 3، 3.0، 3.1415926، 314.16e-2، 0xff.

4. رشته (رشته). برای نمایش رشته ها استفاده می شود.

مقادیر رشته ها به عنوان دنباله ای از کاراکترهای محصور شده در گیومه های تک یا دوتایی مشخص می شوند:

a = "این یک رشته است"

b = "این خط دوم است"

رشته‌های محصور شده در گیومه‌های دوبل می‌توانند دنباله‌های فرار شبیه به C را که با کاراکتر «\» شروع می‌شوند، تفسیر کنند.

\b (فضا)،

\n (فید خط)،

\r (بازگشت حمل و نقل)؛

\t (برگه افقی)،

\\ (اسلش معکوس)؛

\"" (نقل قول دوگانه);

\" (یک نقل قول).

توجه داشته باشید

یک کاراکتر در یک رشته را می توان با کد آن با استفاده از دنباله فرار نشان داد:

که در آن ddd دنباله ای است که بیش از سه رقم نباشد.

علاوه بر علامت نقل قول، از دو براکت نیز می توان برای تعریف رشته استفاده کرد:

تعریف رشته با دو براکت مربع به شما این امکان را می دهد که تمام دنباله های فرار را نادیده بگیرید، یعنی رشته به طور کامل همانطور که توضیح داده شد ایجاد می شود:

محلی a = [] در لوا]=]

یک اصطلاح وجود خواهد داشت: "تعریف رشته[] در Lua"

5. تابع (عملکرد). توابع در Lua را می توان روی متغیرها نوشت، به عنوان پارامتر به توابع دیگر ارسال کرد و به عنوان نتیجه اجرای توابع برگرداند.

6. جدول (جدول). جدول مجموعه ای از جفت های "کلید" - "مقدار" است که به آنها فیلدها یا عناصر یک جدول می گویند. هم کلیدها و هم مقادیر فیلد جدول می توانند از هر نوع باشند به جز صفر. جدول ها اندازه ثابتی ندارند: در هر زمان می توانید تعداد دلخواه عنصر را به آنها اضافه کنید.

ادامه مطلب را در مقاله ایجاد جداول در لوا بخوانید.

7. داده های کاربر (اطلاعات کاربر). این یک نوع داده خاص است. مقادیر از این نوع را نمی توان مستقیماً در یک اسکریپت Lua ایجاد یا تغییر داد.

Userdata برای نمایش انواع جدید ایجاد شده در فراخوان اسکریپت یا در کتابخانه های نوشته شده به زبان C استفاده می شود. به عنوان مثال، کتابخانه های الحاقی Lua برای "CronosPRO" از این نوع برای نمایش اشیایی مانند:

بانک های داده (کلاس بانک)؛

پایگاه های داده (کلاس پایه)؛

سوابق (رکورد کلاس) و غیره

8. نخ (نخ). با جریان اجرا مطابقت دارد. این جریان ها به هیچ وجه مرتبط نیستند سیستم عاملو منحصراً توسط خود Lua پشتیبانی می شوند.

چگونه نوع متغیر را در Lua تنظیم کنیم؟

Lua به صراحت نوع یک متغیر را مشخص نمی کند. نوع متغیر در زمانی تنظیم می شود که به متغیر مقداری اختصاص داده شود. به هر متغیری می‌توان مقداری از هر نوع نسبت داد (بدون توجه به اینکه قبلاً چه نوع متغیری داشته است).

a = 123 - متغیر a دارای شماره نوع است

a = "123" - اکنون متغیر a از نوع رشته است

a = true - متغیر a اکنون از نوع بولی است

a = () - اکنون متغیر a از نوع جدول است

توجه داشته باشید

متغیرهای نوع جدول، تابع، رشته و داده کاربر شامل خود داده نیستند، اما ارجاعاتی را به اشیاء مربوطه ذخیره می کنند. هنگام تخصیص، انتقال به یک تابع به عنوان آرگومان و بازگشت از یک تابع در نتیجه، اشیا کپی نمی شوند، فقط ارجاعات به آنها کپی می شوند.

a = () - یک جدول ایجاد کنید. ارجاع به جدول در متغیر a قرار می گیرد

b = a - متغیر b به همان جدول a اشاره دارد

a = 10 - به عنصر جدول با شاخص 1 مقدار 10 اختصاص داده شده است

MsgBox(b) --> "10"

MsgBox(a) --> "20"

بقیه داده ها مقادیر فوری هستند.

MsgBox(a) --> "20"

MsgBox(b) --> "10"

چگونه نوع متغیر را در Lua بدست آوریم؟

نوع مقدار ذخیره شده در یک متغیر را می توان با استفاده از نوع تابع استاندارد پیدا کرد. این تابع یک رشته حاوی نام نوع ("nil"، "number"، "string"، "boolean"، "table"، "function"، "thread"، "userdata") را برمی گرداند.

t = نوع ("این یک رشته است") - t برابر است با "رشته"

t = نوع (123) - t "عدد" است

t = نوع (نوع) - t برابر است با "تابع"

t = نوع (درست) - t "بولی" است

t = نوع (nil) - t "nil" است

t = type(CroApp.GetBank()) - t برابر است با "userdata"

چگونه نوع یک متغیر را در Lua تبدیل کنیم؟

Lua به طور خودکار اعداد را به رشته تبدیل می کند و در صورت لزوم بالعکس. به عنوان مثال، اگر یک مقدار رشته یک عملوند در یک عملیات حسابی باشد، به عدد تبدیل می شود. به همین ترتیب، یک مقدار عددی که در جایی که یک رشته مورد انتظار است، به یک رشته تبدیل می شود.

a = "10" + 2 - a برابر با 12 است

a = "10" + 2 - a برابر است با "10 + 2"

a = "-5.3e-10"*"2" - a برابر است با -1.06e-09

a = "string" + 2 - خطا! نمی توان "رشته" را به عدد تبدیل کرد

یک مقدار از هر نوع را می توان با استفاده از تابع tostring استاندارد به صراحت به یک رشته تبدیل کرد.

a = tostring (10) - a "10" است

a = tostring (true) - a برابر است با "true"

a = tostring (nil) - a برابر است با "nil"

a = tostring (( = "این فیلد 1 است")) - a برابر است با "جدول: 06DB1058"

از مثال قبلی می بینید که محتویات جداول توسط تابع tostring تبدیل نمی شوند. این تبدیل را می توان با استفاده از تابع render انجام داد.

a = render(10) - a "10" است

a = render(true) - a برابر است با "true"

a = render(nil) - a "nil" است

a = render (( = "این فیلد 1 است")) - a است "( = "این فیلد 1 است")"

برای تبدیل صریح یک مقدار به عدد، می توانید از تابع شماره استاندارد استفاده کنید. اگر مقدار رشته‌ای باشد که می‌توان آن را به عدد تبدیل کرد (یا قبلاً یک عدد است)، تابع نتیجه تبدیل را برمی‌گرداند، در غیر این صورت صفر را برمی‌گرداند.

a = tonumber("10") - a برابر است با "10"

a = tonumber ("10"..5") - a برابر با 10.5 است

a = tonnumber (true) - a برابر است با "nil"

a = عدد (nil) - a برابر است با "nil"

ترتیب نظرات در Lua

یک نظر در Lua با دو علامت منفی (--) شروع می شود و تا انتهای خط ادامه می یابد.

محلی a = 1 - نظر تک خطی

اگر دو کروشه باز ([[) بلافاصله از کاراکترهای "--" پیروی کنند، نظر چند خطی است و تا دو براکت بسته شدن (]] ادامه می یابد.

محلی a = 1 - [[ چند خطی

اظهار نظر ]]

دو براکت در نظرات می تواند تو در تو باشد. برای اینکه آنها را اشتباه نگیرید، علامت مساوی (=) بین پرانتزها درج می شود:

محلی a = [[شرکت کرونوس]] - [=[

محلی a = [[شرکت کرونوس]]

تعداد کاراکترهای "=" تودرتو را تعیین می کند:

محلی a = [=[تعریف برخی از رشته ها [] در Lua]=] --[==[

محلی a = [=[تعریف چند رشته [] در Lua]=]

عملیات مورد استفاده در Lua

در عبارات نوشته شده در Lua، انواع عملیات زیر را می توان استفاده کرد:

1. عملیات حسابی.

لوا از موارد زیر پشتیبانی می کند عملیات حسابی:

+ (اضافه)؛

- (منها کردن)؛

* (ضرب)؛

/ (تقسیم)؛

^ (توانایی)؛

% (باقی مانده تقسیم).

توجه داشته باشید

عملیات حسابی هم برای اعداد و هم برای رشته ها قابل استفاده است که در این حالت به اعداد تبدیل می شوند.

2. عملیات مقایسه.

عملیات مقایسه مقادیر زیر در Lua مجاز است:

== (برابر با)؛

~= (برابر نیست);

< (меньше);

> (بزرگتر)؛

<= (меньше или равно);

>= (بزرگتر یا مساوی).

توجه داشته باشید

عملیات مقایسه همیشه برمی گردد بولیدرست یا غلط.

قوانین تبدیل اعداد به رشته (و بالعکس) در طول مقایسه کار نمی کنند، یعنی عبارت "0" == 0 منجر به نادرست می شود.

3. عملیات منطقی.

به عملیات منطقیمربوط بودن:

و (AND منطقی).

عملگر and در صورت ارزیابی false یا nil اولین عملوند خود را برمی گرداند. در غیر این صورت، عملیات عملوند دوم را برمی گرداند (و این عملوند می تواند از هر نوع باشد).

a = (nil و 5) - a برابر با صفر است

a == (نادرست و 5) - a نادرست است

a == (4 و 5) - a برابر با 5 است

یا (OR منطقی).

عملگر یا عملوند اول را در صورتی که نه نادرست و نه صفر باشد برمی گرداند، در غیر این صورت عملوند دوم را برمی گرداند.

a == (4 یا 5) - a برابر با 4 است

a == (نادرست یا 5) - a برابر با 5 است

توجه داشته باشید

بازی فکری عملیات وو یا می تواند مقادیری از هر نوع را برگرداند.

عملیات منطقی و یا ارزش عملوند دوم را فقط در صورتی ارزیابی می کند که نیاز به برگرداندن داشته باشد. اگر مورد نیاز نباشد، عملوند دوم ارزیابی نمی شود. مثلا:

a == (4 یا f()) - تابع f() فراخوانی نخواهد شد

نه (منطقی نیست).

عملگر not همیشه true یا false را برمی گرداند.

4. عملیات الحاق.

برای به هم پیوستن (ترکیب) رشته ها از عملیات ... (دو نقطه) استفاده کنید.

a = "Kronos".."-".."Inform" - متغیر a مقدار "Kronos-Inform" را دریافت می کند.

توجه داشته باشید

اگر یک یا هر دو عملوند عدد باشند، به رشته تبدیل می شوند.

a = 0..1 - متغیر a مقدار "01" را دریافت می کند.

5. عملیات بدست آوردن طول.

Lua عملگر طول # را تعریف می کند که می توان از آن برای بدست آوردن طول یک رشته استفاده کرد.

a = "رشته"

len = #a - len برابر با 6 است

len = #"یک خط دیگر" - len 10 است

توجه داشته باشید

همچنین می توانید از عملگر # برای یافتن حداکثر شاخص (یا اندازه) یک آرایه استفاده کنید. برای جزئیات بیشتر به مقاله "کار با آرایه ها در Lua" مراجعه کنید.

اولویت اپراتور در Lua

در Lua، عملیات بر اساس اولویت زیر (به ترتیب نزولی) انجام می شود:

2. نه # - (یکی)

6. < > <= >= ~= ==

فراخوانی اسکریپت ها از فرم ها

هر فرم (شامل فرم‌های تودرتو) دارای یک اسکریپت جداگانه است که معمولاً شامل توابعی است که رویدادهای فرم و عناصر آن را مدیریت می‌کند.

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

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

محلی a = _G.var

بلوک های بیانیه (دستورالعمل ها)

اپراتورهای اصلی Lua عبارتند از:

وظیفه؛

عملگر مشروط؛

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

گروهی از دستورات را می توان با استفاده از ساختار do...end در یک بلوک (گزاره مرکب) ترکیب کرد.

انجام - ابتدای بلوک

<оператор1>- بدنه را مسدود کنید

<оператор2>

<операторN>

پایان - انتهای بلوک

بلوک یک محدوده جدید را باز می کند که در آن می توانید متغیرهای محلی را تعریف کنید.

a = 5 - متغیر جهانی a

local a = 20 - متغیر محلی a در داخل do-end تعریف شده است

MsgBox(a) --> 20

MsgBox(a) --> 5 (در اینجا مرجع قبلاً به a جهانی است)

اپراتور واگذاری در لوا

یک انتساب مقدار یک متغیر یا فیلد جدول را تغییر می دهد. در ساده ترین شکل، یک تکلیف ممکن است به این صورت باشد:

a = 1 - به متغیر a مقدار 1 اختصاص داده می شود

a = b + c - به متغیر a مجموع مقادیر متغیرهای b و c اختصاص داده می شود.

a = f(x) - به متغیر a مقدار بازگشتی توسط تابع f(x) اختصاص داده می شود.

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

a، b = 1، 5*c - a برابر با 1 است. b برابر با 5*c است

اگر تعداد متغیرها بیشتر از مقادیر باشد، متغیرهای "اضافی" به صفر اختصاص داده می شوند.

a، b، c = 1، 2 - a برابر با 1 است. b برابر 2 است. c برابر با صفر است

اگر مقادیر بیشتر از متغیرها باشد، مقادیر "اضافی" نادیده گرفته می شوند.

a، b = 1، 2، 3 - a برابر با 1 است. b برابر 2 است. مقدار 3 استفاده نشده است

تخصیص چندگانه می تواند برای تبادل مقادیر بین متغیرها استفاده شود:

a = 10; b = 20 - a 10 است، b برابر 20 است

a، b = b، a - اکنون a 20 است، b 10 است

بیانیه شرطی (اگر) در لوا

اگر بیانیه حقیقت را بررسی کند شرط داده شده. اگر شرط درست باشد، بخشی از کد زیر اجرا می شود. کلمه کلیدیسپس (بخش سپس). در غیر این صورت کد زیر کلمه کلیدی else (بخش دیگر) اجرا می شود.

اگر a > b پس

بازگشت a - اگر a بزرگتر از b باشد، برگردان a

بازگشت ب - در غیر این صورت، بازگشت ب

بخش else اختیاری است.

اگر یک< 0 then

a = 0 - اگر a کمتر از 0 است، a را روی 0 قرار دهید

می توانید از ساختار elseif به جای دستورات if تو در تو استفاده کنید. برای مثال کد زیر:

اگر آن را با موارد زیر جایگزین کنید خواندن آن آسان تر خواهد بود:

"ایوان" را برگردانید - اگر a برابر با 1 باشد

elseif a == 2 سپس

"پیتر" را برگردانید - اگر a 2 باشد

elseif a == 3 سپس

"Sergey" را برگردانید - اگر a برابر با 3 باشد

"هیچ بازیکنی وجود ندارد" را برگردانید - اگر a هیچ یک از لیست‌ها نباشد

حلقه با پیش شرط (در حالی که) در Lua

دستور while برای سازماندهی چرخه ها با پیش شرط طراحی شده است و به شکل زیر است:

در حالی که انجام دادن

... - بدنه حلقه

قبل از هر تکرار حلقه، شرایط بررسی می شود :

اگر شرط نادرست باشد، حلقه خاتمه می یابد و کنترل به اولین دستور بعد از دستور while منتقل می شود.

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

در حالی که i > 0 do - از 10 به 1 حلقه بزنید

t[i] = "فیلد"..i

a = (3، 5، 8، -6، 5)

در حالی که i > 0 do - به دنبال یک مقدار منفی در آرایه باشید

اگر a[i]< 0 then break end - если найдено, прерываем цикл

i = i - 1 - در غیر این صورت به عنصر بعدی بروید

اگر من > 0 پس

MsgBox("شاخص ارزش منفی: "..i)

MsgBox ("آرایه حاوی مقادیر منفی نیست")

توجه داشته باشید

حلقه با شرط پست (تکرار) در Lua

عملگر تکرار برای سازماندهی چرخه ها با یک شرط پست طراحی شده است و به شکل زیر است:

... - بدنه حلقه

تا زمان

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

مقادیر آرایه a را جمع کنید تا مجموع از 10 تجاوز کند

a = (3، 2، 5، 7، 9)

مجموع = جمع + a[i]

تا مجموع > 10

MsgBox(«اقلام ..i.» اضافه شد. مجموع برابر است با «..جمع»)

می توانید از دستور break برای خارج شدن از یک حلقه قبل از پایان استفاده کنید.

توجه داشته باشید

برای کسب اطلاعات بیشتر در مورد ویژگی‌های استفاده از دستور break، به مقاله “عبارت‌های Break and return” مراجعه کنید.

حلقه‌ها با عبارت for در Lua

دستور for برای سازماندهی حلقه ها در نظر گرفته شده است و به دو شکل نوشتن اجازه می دهد:

ساده (عددی برای)؛

تمدید شده (جهانی برای).

شکل ساده عبارت for

شکل ساده عبارت for به صورت زیر است:

برای var = exp1، exp2، exp3 انجام دهید

... - بدنه حلقه

بدنه حلقه برای هر مقدار اجرا می شود متغیر حلقه(counter) var در محدوده exp1 تا exp2، با مرحله exp3.

توجه داشته باشید

ممکن است مرحله مشخص نشده باشد. در این حالت برابر با 1 در نظر گرفته می شود.

برای i = 1، 10 do - حلقه از 1 تا 10 با مرحله 1

MsgBox("i برابر است با"..i)

برای i = 10، 1، -1 انجام - حلقه از 10 به 1 با مرحله -1

MsgBox("i برابر است با"..i)

توجه داشته باشید

عبارات exp1، exp2 و exp3 فقط یک بار، قبل از شروع حلقه ارزیابی می شوند. بنابراین، در مثال زیر، تابع f(x) برای محاسبه حد بالایی حلقه تنها یک بار فراخوانی می شود:

برای i = 1، f(x) do - حلقه از 1 به مقدار بازگردانده شده توسط f()

MsgBox("i برابر است با"..i)

متغیر حلقه محلی برای عبارت حلقه است و در انتهای حلقه تعریف نشده است.

برای i = 1، 10 do - حلقه از 1 به مقدار بازگردانده شده توسط f()

MsgBox("i برابر است با"..i)

MsgBox("پس از خروج از حلقه، i "..i" است) - اشتباه است! من برابر است با صفر

توجه داشته باشید

مقدار یک متغیر حلقه را نمی توان در داخل حلقه تغییر داد: پیامدهای چنین تغییری غیرقابل پیش بینی است.

دستور break برای خروج از حلقه قبل از تکمیل استفاده می شود.

a = (3، 5، 8، -6، 5)

برای i = 1,#a do - به دنبال مقدار منفی در آرایه باشید

اگر a[i]< 0 then - если найдено...

index = i - اندیس مقدار پیدا شده را ذخیره کنید...

شکستن - و شکستن حلقه

MsgBox("شاخص ارزش منفی: "..index)

توجه داشته باشید

برای اطلاعات بیشتر در مورد ویژگی‌های استفاده از دستور break، به مقاله «دستورالعمل‌های شکست و بازگشت» مراجعه کنید.)