IDE برای Lua :
خیلی ها هنگام شروع با یه زبان برنامه نویس جدید تاکید دارند که از نرم افزار های ساده ای مثل++ Notpade استفاده بشه ولی من به شخصه اصلاَ از تایپ دستور در این چنین محیط های لذت نمی برم البته این نظر شخصی منه و همه دوستان هم اذعان دارند که من آدم طنبلیم :)
به همین دلیل من خودم فعلا از ZeroBrane استفاده می کنم البته توجیهی که برای این کار دارم همون داستان قدیمیه که از انیشتین پرسیدن که یارد چند متر است و اون جواب داده که حاظر نیستم مغزم رو با اطلاعاتی که تو هر دانش نامه ای پیدا میشه پر کنم :)
اتوکامپلت و دیباگر و کد هایلایت شده نعمتیه برا خودش :)
دستورات
سنتکس Lua من رو گاهی یاد بیسیک خودمون میندازه .شما مجبور به استفاده از ; در انتهای دستورات نیستید و فضای خالی انتهای دستور را نشان خواهد داد همچنین اکثر دستورات دارای کلمه end برای خاتمه دادن به بلاک جاری هستند مثل دستور if
مثال :
--this is comment
source="www.Arvant.blog.ir"
if source=="www.Arvant.blog.ir" then
print("Thank you to insert Link !");
else
print("you copy it from www.Arvant.blog.ir")
end
انواع داده
Lua دارای نوع داده عددی (صحیح و اعشاری تفاوتی ندارد) رشته ای و جدول است نوع nil جهت اشاره به مقداری تعریف نشده استفاده می شود .نوع داده boolean برای مشخص کردن وضعیت درست یا اشتباه .نیازی به تعریف داده در ابتدا نیست ،داده ها به صورت داینامیک مقدار دهی می شوند .متغیر را مقدار دهی کن و از اون استفاده کن.
x = 5
function dostuff()
x = x + 1 -- changes global x
local y
y = 5 -- y is only visible in this scope
end
تمامی پارامتر ها به صورت اتوماتیک از نوع سراسری تعریف خواهند شد جهت تعریف به صورت محلی اعلام local ضروری است.
از عملگر های *,/,%,-,+,^ روی داده عددی می توان استفاده کرد.
مقایسه مانند اغلب زبان های برناه نویسی مرسوم می باشد.
تابع
در Lua تابع با کلمه کلیدی Function شروع و با کلمه End پایان می پذیرد
function dosomething(x,y,z)
print("X is "..x.." and y is "..y.." and z is "..z)
end
توابع می توانند چندین مقدار را بازگردانند.
function foo(a, b, c)
local sum = a + b
return sum, c --A function can return multi values.
end |
جدول ها
یکی از نکات قدرت lua در نوع داده جدول در این زبان است که می توان به شکل های مختلف از امکانات آن بهره برد
جدول ساختاردادهای شبیه آرایه است، اما میتوان از هر تایپی (عدد، رشته، ...) برای اندیسگذاری در آن استفاده کرد. مثلاً در کد زیر:
t = {}
t["mohsen"] = 1
t["ali"]=2
x = t["mohsen"] + t["ali"]
print(x) -- prints 3
با جای اندیسهای عددی از اندیس "mohsen" و "ali" استفاده شده است. قبل از اینکه بتوان از عملگر [] استفاده کرد باید متغیر مربوطه را مقدار دهی اولیه به مقداری جدولی کرد. سادهترین مقداردهی اولیه مقدار به {} دادن است. میتوان از عبارات زیر هم استفاده کرد:
t = {mohsen = 1, ali = 2}
در کد بالا t مانند مثال قبلی مقداردهی میشود.
دادهساختار جدول (از دید برنامهنویس) شبیه جدولی است که دو ستون دارد: در ستون اول تعدادی صفت مشخص شده است (مثلاً رنگ، اندازه، ...). در ستون دوم جلوی هر سطر مقدار متناظر آن صفت آمده است. مثلاً روبروی سطر رنگ آمده است آبی. برنامهنویس میتواند یک سطر به جدول اضافه کند، یک سطر را حذف کند یا مقدار ستون دوم یک سطر را تغییر دهد. همهٔ این اعمال با این نحو انجام میشود:
t[x] = a
که در آن t یک جدول است و x نام ستون است. اگر x مقداری بوده که قبلاً هم در جدول بوده (در ستون اول)، آنگاه مقدار روبروی آن x میشود. در حالت خاصی که a برابر nil باشد آن ستون حذف میشود. اگر x قبلاً در جدول نبوده آنگاه یک سطر جدید اضافه میشود که در ستون اول آن x و در ستون دوم a آمده است. پس یک جدول یک رشته را به یک مقدار متناظر میکند.
از جدول برای پیادهسازی مفاهیم مختلفی استفاده میشود: آرایه، شی و فضای نام
جدول به عنوان آرایه
در مثال زیر:
colors1 = {"blue", "green"}
colors2[1] = "blue"
colors2[2] = "green"
مقداردهی colors1 از نوع جدیدی است که با مقداردهی colors2 معادل است. به این ترتیب یک جدول که اندیسهایش اعداد صچحیح ۱ تا n هستند میتواند بیانگر مفهوم یک آرایه یاشد.
جدول به عنوان داده ساختار شی
هر شی را میتوان با یک جدول نمایش داده. مثلاً اگر میخواهیم اتاقی را توصیف کنیم، میتوان از کد زیر استفاده کرد:
room = {color="blue",x=10,y=20}
در این مثال صفت هایی که برای توصیف به کار رفتهاند، عبارتند از طول و عرض اتاق (x و y) و رنگ (color).
کلاسها در لوا تعریف نمیشوند، فقط نمونهها از اشیا تعریف میشوند. در تعریف هرنمونه باید تمامی صفات را معین کرد. وفتی روی هر نمونهای عملیات انجام میشود، درجا امکان انجام عملیات بررسی میشود. اگر این امکان نباشد خطای زمان اجرا پیش میآید (البته میتوان با فراجدولها بعضی از این خطاها را مهار کرد) پس در صورتی که نمونهای خصوصیات کافی داشته باشد، از نظر مفهومی به عنوان یک نمونه از یک کلاس خاص محسوب میشود.
برای سادگی لوا یک نحو ویژه برای اینگونه استفاده از جدول ایجاد کرده است. با نوشتن room.x در مثال بالا به مقدار x دست مییابیم، دقیقاً مانند اینکه نوشته باشیم room["x"]. این نمایش مفهوم شیء را میرساند و به کسانی که با نحو object.attribute عادت دارند هم کمک میکنند.
منبع :arvant