[h=1]رنامه نویسی به زبان Vala – قسمت اول[/h]زبانهای برنامهنویسی زیادی مبتنی بر سیستمعاملها و بسترهای آزاد/متنباز طراحی شده و گسترش یافتهاند. یکی از زبانهای برنامه نویسی Cross-Platform (چند سکویی) و Object-Oriented (شیء گرا) که از سال ۲۰۰۶ شروع به انتشار کرد، زبان Vala است که توسط Jürg Billeter و Raffaele Sandrini تحت حمایت بنیاد GNOME و با حق امتیاز LGPL شروع به فعالیت کرد. Vala یک زبان برنامهنویسی در حال توسعه است و جای پیشرفت بسیاری دارد که میتوان از تغییرات متعددی که در هر نسخه ارائه میشود به این موضوع پی برد. مقالهای که در حال مطالعه آن هستید یک آموزش کلی بر برنامهنویسی به زبان Vala خواهد بود که در آن بصورت کلی تکنیکهای استفاده از این زبان را توضیح خواهیم داد. این آموزش بر اساس راهنمای رسمی بنیاد گنوم با مقداری تغییر و اقتباس ارائه خواهد شد و همزمان بر روی ویکی پروژههای لینوکس ریویو به آدرس wiki.linuxreview.ir قرار خواهد گرفت. Vala چیست؟ Vala یک زبان برنامهنویسی جدید است که میتوان به وسیلهی آن برنامههایی نوشت که بر روی کتابخانههای GNOME Run-time ( عموما Glib و GObject) کار کند. این پلتفرم بستر وسیع و نسبتا کاملی برای خصوصیاتی مانند Dynamic Type System (منظور متغیرهای پویا) و Management Assisted Memory (منظور مدیریت اختصاص حافظه) است. قبل از Vala تنها راه برای برنامه، استفاده از API های C بود، که بصورت پیشفرض در ماشین وجود داشتند (منظور وجود APIهایی به زبان C است که بصورت Native در کامپیوتر وجود دارند)؛ که اکثرا دارای اطلاعات اضافی زیادی بودند. همچنین زبانهای سطح بالایی مانند پایتون یا Mono C# نیز از طریق ساخت یک Virtual Machine این کار را انجام میدادند. اما شیوهی Vala از تمامی این تکنیکها جداست! خروجی Vala به زبان C است، که میتواند بدون هیچگونه اطلاعات و کتابخانه اضافی بر روی محیط GNOME اجرا شود. اما چند نکته: کارایی برنامههایی که به زبان Vala نوشته شدهاند از بسیاری جهات مشابه برنامههای نوشته شده بر روی زبان C میباشد اما بسیار راحتتر و سریعتر نوشته و نگهداری میشوند. Vala امکانات و ابزارهای زیادی نسبت به C دارد که نوشتن هر کدام از آنها در C، سخت و زمانبر است. این مقاله برای چه کسانی نوشته شده است؟ این مقاله یک توضیح کلی دربارهی برنامهنویسی به زبان Vala است و توضیحات زیادی درباره مبانی برنامهنویسی ارائه نمیکند؛ اما سعی میکنیم در ادامه کمی به OOP و مفاهیم آن نیز بپردازیم. برای درک مفاهیم و مبانی پایهای برنامه نویسی این لینک میتواند شروع خوبی باشد. اجازه دهید به سراغ اولین برنامه به زبان Vala برویم… Hello world ! مطمئنا قابل پیشبینی بود! class Demo.HelloWorld : GLib.Object { public static int main(string[] args) { stdout.printf(“Hello, World\n”); return 0; } } بهتر است کمی به سبک کتابهای Deitel & Deitel توضیحات خود را پیش ببریم… خط اول: این خط class Demo.HelloWorld : GLib.Object همانطور که پیداست طرز تعریف یک کلاس در Vala را نمایش میدهد. تعریف کلاس در Vala بسیار شبیه به مفاهیم تعریف کلاس در دیگر زبانهاست. یک کلاس بطور پایهای سازندهی یک شیء در برنامه خواهد بود. پیادهسازی کلاس در زبان Vala از طریق کتابخانهی gobjectصورت میپذیرد اما دانستن اطلاعات دقیق دربارهی چگونگی این امر برای انجام اکثر کارها مهم نیست. نکتهای که اینجا مهم هست این است که این کلاس به عنوان یک Subclass از کلاس Glib.Objectایجاد شده است. در حقیقت در Vala برای انجام بسیاری از کارها نیاز دارید کلاس Glib.Object را بعنوان Superclass برای کلاس خود در نظر بگیرید. public static int main(string[] args) { [TABLE="class: crayon-table"] [TR="class: crayon-row"] [TD="class: crayon-nums"]1 [/TD] [TD="class: crayon-code"] [/TD] [/TR] [/TABLE] [TABLE="class: crayon-table"] [TR="class: crayon-row"] [TD="class: crayon-nums"]1 [/TD] [TD="class: crayon-code"] [/TD] [/TR] [/TABLE] این قست از کد نشان دهندهی قاعدهی کلی تعریف متدها در Vala است. متد نوعی تابع است که از طریق یک شیء قابلیت اجرا مییابد. متد ایستا یعنی اشارهگر مرتبط با شیء وجود ندارد و پشته فقط شامل آرگومانها است. در حقیقت در Vala مانند C متد main آغازگاه برنامه است. متد main نباید در یک کلاس تعریف بشود؛ در این صورت باید حتما کلاس مورد نظر از نوع static باشد (public بودن یا private بودن مهم نیست). نوع متغیر بازگشتی میتواند از نوع int یا void باشد. برنامه هنگام خروج در صورت void بودن، با دستور exit 0 بسته میشود. stdout.printf(“Hello, World\n”); stdout یک شیء در داخل Glib است. این خط، Vala رو موظف میکند که متد printf (از آبجکت stdout) را با ورود رشته (منظور Hello, World) فراخوانی کند. در Vala این سیاقِ نحوی (Syntax) معمولا سبک فراخوانی یک متد از یک شیء است. n/ هم ادامهی برنامه رو در خط بعدی چاپ می کند. return 0; return یعنی برگرداندن یک متغیر به فراخوان و اتمام اجرای برنامهی main. مقدار خروجی متد main به عنوان کد خروجی برنامه محسوب میشود. خط آخر هم نشان دهندهی اتمام کلاس است. کامپایل و اجرا Vala را با دستور زیر (در اوبونتو) دانلود و نصب کنید: sudo apt-get install valac بعد از نصب، برای کامپایل و اجرای برنامهی نوشته شده به زبان Vala میتوانید از دستورات زیر استفاده کنید. valac hello.vala ./hello Valac یک کامپایلر زبان Vala است که کد شما را به خروجی باینری تبدیل میکند. خروجی برنامه دقیقا هم اسم با برنامه و در کنار برنامه تولید میشود. مفاهیم پایه ای سورس فایلها و کامپایل کردن تمام سورس فایلهایهای Vala از طریق دستور valacو flagهای ورودیاجرا میشوند. این دستور شبیه دستور کامپایل Java است، برای مثال: valac compiler.vala –pkg libvala که یک باینری به اسم compiler ایجاد میکند که به پکیج libvala لینک شده است. اگر نیاز دارید اسم باینری خروجی برنامهی شما با اسم سورس فایل شما تفاوت داشته باشد و یا اگر برای ساخت باینری نیاز به کامپایل چند سورس فایل دارید میتوانید از سوییچ -o استفاده کنید.: valac source1.vala source2.vala -o myprogram ./myprogram اگر نیاز دارید کد Vala را به C تبدیل کنید نیز میتوانید از طریق اضافه کردن سوییچ c- به دستور کامپایل، خروجی ++C داشته باشید؛ این بدان معناست که شما میتوانید با valac یک کد متوسط C از Vala استخراج کنید. valac هر فایل vala. را به یک فایل جداگانه (در اینجا فایلهای source1.vala و source2.vala) به زبان C (با نام source1.c و source2.c) تبدیل میکند. همچنین نگاهی به ساختار تعریف کلاس در فایل خروجی از Vala نشان میدهد که تعریف یک کلاس در Vala مانند تعریف آن در C میباشد (البته با کمی اختصار). اگر نیاز دارید یک فایل Header داشته باشید میتوانید از سوییچ -H استفاده کنید: valac hello.vala -C -H hello.h امیدواریم از بخش اول استفاده لازم را برده باشید و در ادامه ما را همراهی کنید. در قسمت بعد، به بررسی قواعد برنامه نویسی، رشتهها، آرایهها و ارجاعها در برنامهنویسی Vala خواهیم پرداخت.