Sunday, December 03, 2006

Ruby(1)

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

Ruby یک زبان اسکریپتی هست (یعنی کامپایلر ندارد یا به عبارت دیگر مفسری هست) به همین جهت از انعطاف پذیری بسیار بالاتری نسبت به زبان های کامپایلری برخوردار است. ولی ruby بر خلاف بسیاری از زبان های اسکریپتی دیگر یک زبان کاملا شیئ گرا هست و هیچ کم و کسری از زبان های کامپایلری متداول ندارد.

برنامه های Ruby معمولا تعداد خطوط بسیار کمتری نسبت به زبان های دیگر دارند و گزارش هایی وجود دارد که بسیاری از پروژه های انجام شده با Ruby در مدت زمان بسیار کمتری نسبت به پروژه های مشابه انجام شده به زبان های دیگر به پایان رسیده. در هر حال نکته ای که توجه بسیاری را از دنیای جاوا و دات نت به خود جلب کرده این نیست که Ruby ویژگی هایی دارد که جاوا و سی شارپ ندارند بلکه این نکته است که Ruby ویژگی هایی دارد که جاوا و سی شارپ به عنوان زبان هایی کامپایلری نمی توانند داشته باشند یا افزودن آنها به زبان مشکلات فراوانی دارد. حتی می توان گفت بسیاری از ابزارها، تکنیک ها و کتابخانه های متداول موجود (مانند aspect oriented programming و Object relational mapping) در ruby کاربردی ندارند و راه حل های معادل بسیار ساده تری برای آنها وجود دارد(در این مورد بعدا بیشتر می نویسم).

Ruby آنقدر جذاب بوده که بسیاری از توسعه دهندگان Java EE را به سمت خود جذب کرده. در طول یکی دو سال گذشته کتابهایی نیز در رابطه با توجیه یا نقد این موضوع نوشته شده است( مثلا کتابهای Beyond Java و From Java to Ruby).

در هر حال سعی می کنم در چند بخش ویژگی های Ruby را بطور مختصر شرح دهم و مثالهای کوتاهی نیز بیاورم. بیشتر سعی می کنم در مورد محاسن ویژگی ها صحبت کنم تا در مورد معایب آنها ولی حتما سعی می کنم در یک قسمت به بررسی معایب Ruby نیز بپردازم.

زبانی کاملا شیئ گرا:

Ruby زبانی کاملا شیئ گرا هست، حتی انواع توکار و اعداد نیز شیئ هستند(بر خلاف جاوا). این موضوع در بسیاری از موارد نیاز به نوشتن کد اضافی را از بین می برد. در Ruby اعداد صحیح از کلاس Fixnum و اعداد اعشاری از کلاس Float ساخته می شود. حتی nil ( که همان null در جاوا و سی شارپ است) هم یک شیئ هست.

انواع:

در مبحث انواع داده ای در زبان ها، Ruby جایگاه جالبی دارد. از آنجا که Ruby یک زبان اسکریپتی هست نوع متغیر ها در آن در زمان اجرا چک می شود(چرا که اصلا چیزی به نام زمان کامپایل در ruby وجود ندارد). پس در مجموع می توان ruby را dynamically typed دانست. ولی نکته جالب اینجاست که پویا بودن انواع در ruby باعث تغییر نوع های بی مورد و اتوماتیک نمی شود(بر خلاف بسیاری از زبان های اسکریپتی مثل Perlو زبان های کامپایلری مانند C و C++). به عبارت دیگر ruby را می توان strongly typed دانست( در مقابل زبان های weakly typed). در ruby حتی اگر شما سعی کنید یک عدد را با یک رشته جمع بزنید(بدون تبدیل نوع صریح) با خطای زمان اجرا مواجه می شوید. این ویژگی باعث می شود از بسیاری از اشتباهات اتفاقی برنامه نویسی جلوگیری شود.

Regular Expression:

Ruby بصورت توکار از عبارات منظم پشتیبانی می کند( ساختارها خیلی شبیه زبان Perl هست). این امر باعث می شود پردازش متن ساده تر و با وضوح بیشتری انجام شود.

No comments: