آموزش رایگان روبی — راهنمای شروع به کار با Ruby
روبی (Ruby) یک زبان برنامه نویسی پویا، مفهومی، شیگرا و همهمنظوره است. افراد بسیاری در اولین گام از مسیر یادگیری مهارت برنامه نویسی با این مشکل مواجه میشوند که نمیدانند باید از کجا شروع کنند و چه چیزی را یاد بگیرند. اما اگر حداقل زبان برنامه نویسی مورد نظر خود را انتخاب کرده باشند و آن زبان روبی (Ruby) باشد، این مطلب میتواند راهنمای کاربردی و جامعی برای شروع یادگیری و معرفی این زبان برنامه نویسی محسوب شود. سعی شده است تا همه مباحث پیرامون آموزش روبی در این مطلب گنجانده شود تا بتوان از آن برای نقطه شروعی در فرآیند آموزش روبی استفاده کرد.
در ابتدای آموزش روبی و قبل از هر چیز، باید به این سوال اساسی پاسخ داده شود که روبی چیست؟ لذا، در ادامه به این مهم پرداخته شده است.
روبی چیست ؟
روبی (Ruby) یک زبان برنامه نویسی پویا و متنباز است که بر سادگی و بازدهی بالا تمرکز دارد. نحو زبان Ruby بسیار مناسب است، به طوری که خواندن و و یرایش مجدد کدها را آسان میکند. Ruby یک زبان برنامه نویسی اسکریپتنویسی به حساب میآید که توسط دانشمند رایانه و برنامهنویس اهل ژاپن، یوکیهیرو ماتسوموتو (Yukihiro Matsumoto) طراحی شده است.
زبان روبی روی بسترهای مختلفی مثل ویندوز، مک OS و لینوکس اجرا میشود. واژه Ruby در انگلیسی به معنی یاقوت سرخ است که طراحی لوگو روبی نیز به همین مفهوم اشاره دارد.
فریمورک Ruby on Rails به رشد و افزایش استفاده از این زبان در حوزه برنامه نویسی وب بسیار کمک کرده است. همچنین لازم به ذکر است که زبان برنامه نویسی روبی یک زبان کاملاً شیگرا محسوب میشود. برای مثال، حتی سادهترین انواع داده مثل نوع عدد صحیح (Integer) متدها و متغیرهای نمونه (Instance Variable) مخصوص به خود را دارد. اکنون که به سوال «روبی چیست» به میزان زیادی پاسخ داده شده است، میتوان دریافت که آموزش روبی امر مهمی به حساب میآید و یادگیری آن بسیار مفید است. در ادامه این مطلب، با هدف آشنایی بیشتر با این زبان و شروع آموزش روبی، اشارهای به تاریخچه این زبان برنامه نویسی شده است.
- برای دیدن فیلم آموزش زبان برنامه نویسی روبی + اینجا کلیک کنید.
تاریخچه روبی
در این بخش از مطلب آموزش روبی به شرح مختصری از تاریخچه روبی و ذکر نکات مهم در این زمینه پرداخته شده است. ابتدا بهتر است به معرفی خالق این زبان برنامه نویسی پرداخته شود.
خالق روبی کیست؟
Ruby توسط یوکیهیرو ماتسوموتو (Yukihiro Matsumoto) در ژاپن و در اوایل دهه هفتاد شمسی ساخته شد. او در سال ۱۳۴۴ به دنیا آمده است. یوکیهیرو ماتسوموتو اغلب با نام مستعار «ماتس» (Matz) شناخته میشود. او یک دانشمند علوم کامپیوتر و برنامه نویس ژاپنی است. مهمترین دستاورد ماتسوموتو را میتوان همین خلق زبان Ruby و پیادهسازی مستندات آن دانست.
رفتار و منش ماتسوموتو باعث شده است که شعار معروفی درباره او در اجتماع Ruby شکل بگیرد:
ماتس انسان خوبی است، پس ما هم باید خوب باشیم.
معادل انگلیسی این شعار «Matz is nice and so we are nice» است که معمولاً به صورت خلاصه با سرنام «MINASWAN» به کار گرفته میشود. در ادامه، پیرامون هدف از ساخت روبی و این مسئله که ایده خلق روبی چطور در ذهن ماتس شکل گرفت، توضیحاتی ارائه شده است.
هدف از ساخت روبی چیست؟
خالق روبی آن را با هدف بهبود بهرهوری برنامهنویسان و با این ایده که برنامه نویسی باید برای افراد لذتبخش باشد، طراحی کرده است. یوکیهیرو ماتسوموتو در ساخت Ruby بر این مسئله تاکید داشته است که نرمافزار ابتدا باید توسط انسان قابل درک بوده و سپس به وسیله کامپیوترها قابل تفسیر باشد.
خالق Ruby، ماتسوموتو، بخشهایی از زبانهای برنامه نویسی مورد علاقه خود (Ada ،Eiffel ،Smalltalk ،Perl و Lisp) را با هم در آمیخته تا زبان جدیدی را خلق کند که تعادلی میان برنامه نویسی تابعگرا و برنامه نویسی دستوری به وجود بیاورد. ماتسوموتو اغلب بیان داشته است که:
سعی دارم Ruby را طبیعی جلوه دهم، نه ساده؛ به گونهای که منعکس کننده زندگی باشد.
در همین راستا او اضافه میکند:
روبی در ظاهر ساده، اما از درون بسیار پیچیده است، درست مثل بدن انسان.
در ادامه این بخش از مطلب آموزش روبی شرحی درباره نحوه رشد و افزایش محبوبیت زبان روبی بیان شده است.
روبی چطور رشد کرد؟
از زمان انتشار عمومی زبان Ruby، برنامهنویسان بسیاری در کل دنیا از آن استفاده میکنند. در سال 1385، استقبال گستردهای از Ruby به وجود آمد. اجتماعات کاربران فعال در کلانشهرهای دنیا شکل گرفت و همایشهای بسیاری در ارتباط با Ruby برگزار شد.
در همان سال، تعداد پیامهای ارسالی در «Ruby-Talk» که نخستین فهرست پستسپاری (Mailing List) برای بحث پیرامون زبان روبی به شمار میرود، به طور میانگین به ۲۰۰ عدد در روز میرسید. در سالهای اخیرا این میزان با کاهش مواجه شده است، چرا که، دامنه بحثها در اجتماعات روبی، از یک فهرست متمرکز به چندین گروه کوچکتر تقسیم شده است.
نسخه های منتشر شده روبی
یکی از موارد مهم در بیان تاریخچه یک محصول و زبان برنامه نویسی، ارائه پیشینهای از نسخههای منتشر شده است. آخرین نسخه زبان Ruby در دیماه ۱۳۹۹ منتشر شد که سومین نسخه این زبان برنامه نویسی با نام Ruby 3.0.0 به حساب میآید. هدف از ارائه این نسخه، عملکرد بهتر، همزمانی و بهبود کدنویسی بوده است.
به ویژه در بحث عملکرد، ماتس بیان میدارد که Ruby 3 تا سه برابر نسبت به Ruby 2 سرعت بیشتری دارد. آخرین نسخه پیش از انتشار نسخه سوم، Ruby 2.7.2 است که در مهرماه ۱۳۹۹ انتشار یافت. پیش از آغاز آموزش روبی، یکی از موارد مهم، دانستن کاربردهای این زبان برنامه نویسی است که در ادامه به این مسئله پرداخته شده است.
- برای دیدن فیلم آموزش رایگان آشنایی با زبان برنامه نویسی روبی + اینجا کلیک کنید.
روبی چه کاربردهایی دارد؟
روبی اکثراً برای ایجاد و ساخت اپلیکیشنها و کاربردهای تحت وب استفاده میشود. Ruby یک زبان همهمنظوره مشابه پایتون است. بنابراین کاربردهای متعدد دیگری نیز دارد. از جمله برخی از این کاربردها میتوان به تحلیل داده، نمونهسازی (Prototyping) و اثبات مفاهیم (Proof of Concepts) اشاره کرد.
در ادامه، برخی از سایر کاربردهای برجسته زبان روبی فهرست شده است:
- فریمورک Rails را میتوان بدیهیترین و اصلیترین پیادهسازی دانست که از زبان Ruby استفاده میکند.
- Homebrew یک ابزار بسیار محبوب برای نصب بستههای نرمافزاری روی macOS با زبان روبی نوشته شده است.
- Metasploit امکان آزمایش وبسایتها و اپلیکیشنها برای میزان سادگی نفوذ به آنها را فراهم میکند.
روبی در طول حیات خود در عرصه توسعه نرمافزار برای کاربران نهایی و شرکتها پیرامون حوزههای خدماتی مختلفی از جمله تجارت، بازرگانی، علم، مهندسی و فناوری به کار گرفته شده است. به بیان ساده، از زبان Ruby در پروژههای نیازمند به راهکارهای دیجیتالی با پیادهسازی سریع استفاده میشود.
پروژههای قابل اجرا با روبی
در ادامه، برخی از انواع پروژههایی که Ruby در پیادهسازی آنها نسبت به سایر زبانهای برنامه نویسی مشابه برتری دارد، معرفی شده است.
وباپلیکیشنها
به وسیله فریمورک Rails و کتابخانههای متعدد آن، روبی انتخاب مناسبی برای توسعه انواع اپلیکیشنهای تحت وب است. استفاده از Ruby بسیار ساده و کدنویسی با آن بسیار سریع است. روبی امکاناتی را ارائه میکند که قبلاً امتحان شدهاند و قابل اطمینان هستند. در صورتی که تعداد کاربران لحظهای یک سرویس وب میلیونی نباشد، مخصوصاً در مورد شرکتهای استارتاپی نوپا که سرمایه محدودی در اختیار دارند، Ruby انتخاب مناسبی به حساب میآید.
تجارت الکترونیک
روبی دارای کتابخانههای بسیاری است که به طور اختصاصی برای استفاده در توسعه کاربردهای تجارت الکترونیک مورد استفاده قرار میگیرند. یکی از برجستهترین کاربردها در حوزه تجارت الکترونیک که از Ruby استفاده میکند، اپلیکیشن Shopify است. در صورتی که هدف، ایجاد و راهاندازی یک فروشگاه آنلاین در کمترین زمان ممکن باشد، روبی از تمام امکانات لازم برای این کار برخوردار است. از جمله این امکانات میتوان به میز خدمترسانی، درگاههای پرداخت، پلتفرمهای کارزار ایمیل و سایر موارد اشاره کرد.
مدیریت محتوا
روبی در ایجاد وبسایتهای با محوریت محتوا نیز کاربرد دارد. به واسطه کتابخانههای فراوان Ruby، میتوان سایتی با امکانات آماده استفاده، نه تنها برای ایجاد محتوا، بلکه جهت به اشتراکگذاری و توزیع آن در میان مخاطبان ساخت. افزون بر این، امکانات بسیاری برای سئو در توسعه سایتهای محتوا محور با Ruby وجود دارد که میتوان از آنها برای ارتقا رتبهبندی در موتورهای جستجو استفاده کرد.
راهکارهای سفارشیسازی شده پایگاهداده
Ruby on Rails در زمینه راهکارهای پایگاهداده سفارشی نیز کاربرد دارد. این مسئله به این دلیل اتاق میافتد که این فریمورک از لایه مدل Active Record استفاده میکند. Active Record امکان مدیریت آسان بانک اطلاعاتی را بدون نیاز به SQL فراهم میکند. همچنین، Active Record قابل ادغام با سامانههایی است که امکان مدیریت پایگاهدادههای پیچیده را فراهم میسازند.
نمونهسازی اولیه
همانطور که قبلاً اشاره شد، Ruby در ایجاد نسخههای آزمایشی قبل از کار روی اپلیکیشن اصلی بسیار کاربردی است. با توجه به اینکه استفاده از Ruby آسان است، میتوان در کوتاهترین زمان ممکن یک ساختار ابتدایی برای بررسی قابل اجرا بودن مدل طراحی ایجاد کرد. همچنین، امکان کار روی یک طراحی اولیه (Sketch) وجود دارد که میتوان با نشان دادن آن به سایر اعضای گروه، آنها را از ظاهر محصول نهایی با خبر ساخت.
همه منظوره بودن روبی
تا اینجا برخی از کاربردهای شاخص و انواع پروژههایی را که میتوان با روبی توسعه داد، معرفی شدند. با توجه به اینکه Ruby یک زبان اسکریپتنویسی سمت سرور است، میتوان از آن در ساخت اپلیکیشنهای مختلفی کمک گرفت؛ حتی در صورتی که این اپلیکیشنها با زبانهای دیگری ایجاد شده باشند. به این ترتیب، توسعهدهندگان روبی از این زبان برای ایجاد اسکریپت برای قابلیتهای خط فرمان، دستیارها و واسط دروازه مشترک (CGI) استفاده میکنند.
در نهایت، شایان ذکر است که Ruby به عنوان یک زبان شیگرا با نحو اسکریپتی، برای ایجاد اسکریپتهای بکاند به اندازهای انعطافپذیر است که جهت کار با راهکارهای نوشته شده با هر زبانی سازگاری دارد. بر خلاف همه منتقدانی که عقیده دارند Ruby یک زبان مرده است، کاربردهای مختلف روبی، آن را به یک زبان بینقص برای استفاده در برخی پروژههای خاص تبدیل کرده است.
اپلیکیشنهای ساخته شده با روبی
برنامههای کاربردی بسیاری با ویژگیهای بصری برجسته توسط توسعهدهندگان Ruby به وسیله فریمورک Rails ساخته شده است. از جمله این اپلیکیشنها میتوان به سایت رزرو اسکان AirBnB و خدمات پخش تلویزیونی Hulu اشاره کرد. سایر اپلیکیشنهایی که در توسعه آنها از روبی استفاده شده، شامل Goodreads ،Github و اپلیکیشن پایش مصرف کالری MyFitnessPal است. یکی دیگر از موضوعات مهمی که در آموزش یک زبان برنامه نویسی مطرح میشود، ویژگیها آن زبان است. بنابراین، در ادامه مطلب آموزش روبی، به شرح مختصر و سادهای پیرامون ویژگیهای زبان روبی پرداخته شده است.
ویژگی های روبی
روبی همواره در اکثر رتبهبندیهای مرتبط با رشد و محبوبیت زبانهای برنامه نویسی (از جمله TIOBE index)، از جایگاه بالایی برخوردار بوده است. بیشتر این رشد با محبوبیت نرمافزارهای نوشته شده با Ruby، مخصوصاً فریمورک تحت وب Ruby on Rails در ارتباط است. همچنین، یکی دیگر از ویژگیهای مهم این زبان برنامه نویسی این است که، روبی کاملاً رایگان است.
روبی، بهترین دوست یک برنامه نویس
ویژگیهای زبان روبی به زبانهایی مانند Perl ،Smalltalk و پایتون شباهت دارد. Python ،Perl و Smalltalk نیز زبانهای اسکریپتنویسی به حساب میآیند. Smalltalk هم یک زبان مبتنی بر شیٔگرایی است. مشابه Smalltalk، زبان Ruby هم یک زبان شیٔگرای کامل و بینقص محسوب میشود. استفاده از سینتکس (نحو | Syntax) روبی نسبت به استفاده از سینتکس Smalltalk بسیار سادهتر است. در ادامه آموزش روبی به شرح هر یک از ویژگیهای این زبان اسکریپتنویسی پرداخته شده است.
روبی چه ویژگی هایی دارد؟
در ادامه و این بخش از آموزش روبی برخی از ویژگیها و خصوصیات کلیدی زبان Ruby فهرست شده است.
- روبی متنباز و به صورت رایگان در اینترنت در دسترس است.
- Ruby یک زبان برنامه نویسی همهمنظوره و تفسیر شده به حساب میآید.
- مشابه پایتون و PERL، روبی هم یک زبان اسکریپتنویسی سمت سرور محسوب میشود.
- میتوان از Ruby برای نوشتن اسکریپتهای رابط دروازه مشترک (Common Gateway Interface | CGI) استفاده کرد.
- میتوان روبی را درون کدهای زبان نشانهگذاری ابَرمتن (HTML) ادغام کرد.
- سینتکس شفاف و ساده آن، به یک توسعهدهنده تازهکار کمک میکند تا بتواند آموزش روبی را به سرعت و به راحتی فرا بگیرد.
- سینتکس روبی مشابه بسیاری از زبانهای برنامه نویسی از جمله C++ و Perl است.
- زبان روبی بسیار گسترشپذیر و مقیاسپذیر است و برنامههای بزرگی که با Ruby نوشته شدهاند، به راحتی قابل نگهداری (Maintainable) هستند.
- از روبی میتوان برای توسعه اپلیکیشنهای تحت اینترنت و اینترانت استفاده کرد.
- زبان Ruby در سیستم عامل ویندوز و محیطهای رابط قابل حمل سیستمعامل پازیکس (POSIX) قابل نصب است.
- روبی از بسیاری از ابزارهای GUI (رابط کاربری گرافیکی) مانند GTK ،Tcl/Tk و OpenGL پشتیبانی میکند.
- زبان روبی به راحتی میتواند به Oracle ،MySQL ،DB2 و Sybase متصل شود.
- روبی مجموعه توابع توکار ارزشمندی دارد که میتوان از آنها مستقیماً در داخل اسکریپتهای Ruby استفاده کرد.
مزایا و معایب روبی
Ruby نیز درست مانند سایر زبانهای برنامه نویسی نقاط قوت و ضعف مختلفی دارد که قبل از شروع آموزش روبی بهتر است به طور مختصر به آنها اشاره شود. در ادامه مطلب آموزش روبی به معرفی اجمالی مزایای این زبان برنامه نویسی پرداخته شده است.
مزایای روبی چه هستند؟
از زمان معرفی و پدید آمدن Ruby، این زبان برنامه نویسی دستخوش تغییرات و بهروزرسانیهای متعددی شده و در طول سالها به سطح قابل قبولی از پایداری رسیده است. در این بخش از آموزش روبی با هدف کسب شناخت بیشتر در مسیر یادگیری روبی، برخی از مزایا و نقاط قوت این زبان برنامه نویسی در ادامه فهرست میشود.
- استحکام: میتوان Ruby را نسبت به بسیاری از زبانهای برنامه نویسی از جمله Perl قدرتمندتر و باثباتتر دانست. سازندگان Ruby باور دارند که در خصوص قابلیتهای شیٔگرایی، این زبان میتواند رقیب سرسختی برای پایتون باشد.
- سادگی: وقتی صحبت از افراد مبتدی و اشخاصی که قصد شروع یادگیری برنامه نویسی را دارند به میان میآید، آموزش روبی توسط بسیاری از برنامهنویسان تازهکار نسبت به دیگر زبانها ترجیح داده میشود. چرا که، آموزش روبی بسیار ساده و روان است.
- امکان فرابرنامه نویسی: زبان روبی از فرابرنامه نویسی (Metaprogramming) پشتیبانی میکند. فرابرنامه نویسی روشی است که در آن برنامههای کامپیوتری میتوانند با سایر برنامههای نوشته شده به عنوان دادههای ورودی خود رفتار کنند. یعنی میتوان یک برنامه را برای خواندن، تولید یا تحلیل سایر برنامهها طراحی کرد.
- سرعت بالا: کدنویسی با Ruby به سرعت انجام میشود. علاوه بر اینکه Ruby در خصوص پردازش و اجرای درخواستها یکی از سریعترین زبانها به شمار میآید، همچنین این مزیت را برای توسعهدهندگان به وجود آورده است که بتوانند ۴۰ درصد زمان کمتری در کدنویسی و توسعه محصولات نرمافزاری صرف کنند.
- منابع غنی: در خصوص استفاده از یک زبان برنامه نویسی، در دسترس بودن منابع لازم بسیار حائز اهمیت است. علاوه بر مستندات رسمی وسیع، منابع متعدد دیگری هم برای توسعهدهندگان Ruby شامل کتابها، ویدئو، دورههای آنلاین، کلاسهای حضوری و سایر موارد در دسترس است.
زبان Ruby مزایای بسیاری دارد که برخی از آنها در این بخش از آموزش روبی معرفی شدند. در ادامه مطلب آموزش روبی به بیان برخی از معایب و نقاط ضعف این زبان اسکریپتنویسی، هر چند اندک، اشاره شده است.
معایب روبی
همانطور که قبلاً هم بیان شد، با بازگشت به زمان انتشار روبی، باید به این نکته اشاره کرد که یوکیهیرو ماتسوموتو از زبانهای برنامه نویسی پایتون، Perl و Smalltalk در خلق آن الهام گرفته است. همه این زبانها دارای نقاط قوت زیادی هستند که Ruby بسیاری از آنها را به ارث برده است. اما ممکن است برای افرادی که به دنبال آموزش روبی و یادگیری آن هستند، این سوال به وجود بیاید که این زبان چه معایب و نقاط ضعفی دارد؟ بنابراین، در ادامه این بخش از مطلب آموزش روبی، فهرستی از معایب این زبان برنامه نویسی ارائه شده است.
- سرعت زمان اجرا: میتوان گفت سرعت زمان اجرا در Ruby تا حدودی پایین است. اگرچه، در صورتی که مقیاس محصول تولیده شده با روبی آنقدر گسترده نباشد، خیلی جای نگرانی وجود ندارد.
- مستندات Ruby: مستندات و اجتماعات روبی چندان گسترده نیست و نسبت به زبانهای رایج و محبوب همچون پایتون تقریباً محدودتر است.
- کندی نسبی در پردازش: Ruby هم مثل بسیاری از زبانهای برنامه نویسی در امر پردازش تا حدودی محدودیت دارد.
- بهروزرسانی: ارائه بهروزرسانیها و امکانات جدید در Ruby نسبت به سایر زبانهای برنامه نویسی کندتر انجام میشود.
- سینتکس روبی: نحو زبان روبی اگرچه شباهتهای بسیاری با سایر زبانها دارد، اما در هر صورت Ruby در مقایسه با زبانی مثل C++ زبان جدیدی به حساب میآید و باید سینتکس و نحوه استفاده از آن را آموخت که این مسئله نیازمند صرف زمان است.
پس از بیان مزایا و معایب زبان برنامه نویسی روبی، در ادامه مسیر آموزش روبی به معرفی برخی از محبوبترین و بهترین فریمورکهای ساخته شده بر مبنای این زبان پرداخته شده است.
برترین فریمورکهای روبی چه هستند؟
زبان برنامه نویسی Ruby فریمورکهای کاربردی بسیاری دارد که در ساخت وباپلیکیشنها استفاده میشوند. اما، بدون شک میتوان گفت که فریمورک Ruby on Rails محبوتترین آنها به حساب میآید. همچنین، از جمله سایر فریمورکهای برتر Ruby میتوان به Hanami ،Padrino ،Sinatra و Cuba اشاره کرد.
یک فریمورک (Framework) یا چارچوب نرمافزاری، بستری برای توسعه برنامههای کاربردی است. فریمورک، زیربنایی را فراهم میسازد که توسعهدهندگان نرمافزار برپایه آن، برای سیستمعاملهای مختلف، برنامه نرمافزاری تولید میکنند. در این بخش از مطلب آموزش روبی با هدف آشنایی بیشتر با این زبان برنامه نویسی، شرح مختصری از هر کدام از فریمورکهای محبوب زبان روبی ارائه شده است.
RUBY ON RAILS
همانطور که بیان شد، Ruby on Rails برترین و محبوبترین فریمورک متنباز Ruby به حساب میآید. با استفاده از فریمورک Ruby on Rails میتوان با سرعت بالایی، اپلیکیشنهای تحت وب ایجاد کرد. Ruby on Rails با استفاده از مدل معماری MVC ساخته شده است. این فریمورک، به واسطه سادگی، سرعت و لذت کدنویسی با آن، نسبت به سایر فریمورکهای توسعه وب دارای برتری است. فریمورک Ruby on Rails از قوانین DRY و COC تبعیت میکند.
DRY که سرنامی برای «Don't Repeat Yourself» است، جهت جلوگیری از تکرار کدها در یک محل، مورد استفاده قرار میگیرد. این قانون بر سرعت کار توسعهدهنده تأثیرگذار است. برخلاف آن، قانون COC که سرنامی برای «Convention Over Configuration» است، مسئولیت کمینه کردن تنظیمات ضروری را به وسیله جایگزینی آنها با الگوهای پیشساخته و آماده بر عهده دارد.
چارچوب نرمافزاری Ruby on Rails دقیقاً همان چیزی است که یک توسعهدهنده برای ایجاد وباپلیکیشنها بهآن نیاز دارد. در صورت استفاده از Ruby on Rails، معمولاً زمان صرف شده روی پروژه نسبت به سایر زبانها و چارچوبهای نرمافزاری کوتاهتر خواهد بود. Ruby on Rails امکان استفاده از افزونهها (Plugin) را فراهم میکند. با کمک افزونهها میتوان به سادگی اپلیکیشن ساخته شده را به قابلیتهای جدید مجهز ساخت. فریمورک Ruby on Rails در زمینه توسعه نرمافزارهای تجارت الکترونیک بسیار محبوب است. Groupon ،AirBnB و Basecamp جزء شاخصترین شرکتهایی هستند که از Ruby on Rails برای توسعه نرمافزارها و وباپلیکیشنهای خود استفاده میکنند.
SINATRA
از Sinatra (سیناترا) میتوان به عنوان جایگزینی برای سایر فریمورکهای روبی به ویژه Ruby on Rails استفاده کرد. Sinatra بیشتر برای ایجاد وباپلیکیشن به کار میرود. این فریمورک بر خلاف Ruby on Rails از مدل معماری MVC استفاده نمیکند. سیناترا با حفظ تلاش حداقلی، بر پایه اصل کلی توسعه چابک بنا نهاده شده است.
توسعهدهندگان میتوانند از این فریمورک به عنوان یک کتابخانه باز کاربردهای وب استفاده کنند. سیناترا برای توسعه محصولاتی در نامهای تجاری از جمله LinkedIn ،BBC ،Apple و GitHub به کار رفته است.
HANAMI
فریمورک hanami (هانامی) از کتابخانههای کوچک Ruby تشکیل شده است. برتری اصلی این فریمورک، سادهسازی ساخت وباپلیکیشنها به حساب میآید. این کار به وسیله تحمیل یک ساختار کدنویسی متناسب و استفاده از کتابخانههای آماده محقق میشود.
هدف پدید آورندگان Hanami، توسعه چارچوبی برای ایجاد وباپلیکیشنهایی است که از حافظه کمتری نسبت به وباپلیکیشنهای ساخته شده با دیگر فریمورکهای Ruby استفاده میکنند. hanami بر اساس اصل جدایی در ساختار فایل میان بکاند و فرانتاند بنا نهاده شده است.
CUBA
Cuba یک ریزفریمورک Ruby برای توسعه وب است. این فریمورک سبک، کوچک و سریع به حساب میآید. همانند سایر فریمورکها، امکان سرعت بخشیدن به ساخت اپلیکیشنهای سفارشی را فراهم میسازد. میتوان Cuba را به وسیله ادغام قالبها و کتابخانههای مختص آزمایش نرمافزار وسعت بخشید.
در واقع، با استفاده از Tilt، فریمورک Cuba میتواند قالبهای بسیاری را با هم ترکیب کند و همچنین، با بهره بردن این فریمورک از Cutest و Capybara، امکان آزمایش و تست نرمافزار فراهم میشود.
آموزش روبی
پس از ارائه نکات و مباحث مقدماتی پیرامون زبان برنامه نویسی روبی، و کسب شناخت کافی از این زبان، در این بخش از مطلب آموزش روبی وارد بحث اصلی شده و موضوعات مهم در خصوص آموزش آن مورد بررسی قرار گرفته است. در این بخش، مطالب آموزشی برای شروع کار با Ruby به طور کامل پوشش داده خواهد شد.
نکته: فرآیند یادگیری و آموزش زمانی به طور کامل انجام میشود که مباحث آموزشی به صورت عملی توسط فرد انجام شود. بنابراین، توصیه میشود جهت یادگیری بهتر و درک کامل، فرآیند نصب به همراه این آموزش انجام شده و همچنین کدها و مثالهای ارائه شده در طول آموزش روبی به صورت عملی پیادهسازی شوند.
برای آموزش روبی باید از کجا شروع کرد؟
برای شروع آموزش روبی ابتدا باید مفاهیم پایه برنامه نویسی را آموخت. از جمله برخی از این مفاهیم میتوان به متغیرها، ساختارهای داده و عبارتهای شرطی اشاره کرد. افراد مبتدی در مسیر آموزش روبی با اصطلاحات زیادی مواجه خواهند شد که در طول فرآیند آموزش روبی آشنایی لازم را با این اصطلاحات جدید کسب خواهند کرد.
همچنین در خصوص آموزش روبی باید درکی از این مسئله وجود داشته باشد که Ruby و تقریباً تمام زبانهای برنامه نویسی یک زبان صوری (Formal Language) به حساب میآیند.
آیا یادگیری روبی سخت است؟
آموزش روبی و یادگیری روبی نیز همانند یادگیری هر مهارت جدیدی در ابتدا ممکن است کمی دشوار باشد. اما در صورت صرف زمان کافی، به مرور و با طی کردن مراحل ابتدایی آموزش روبی درک مفاهیم و یادگیری آن سادهتر خواهد شد. یکی از نکات کلیدی در یادگیری زبانهای برنامه نویسی «تکرار» است. باید آنقدر روی هر موضوع کار کرد تا درکی از چگونگی کارایی و کاربرد آن در سطح کلان ایجاد شود. در مطلب آموزش روبی بر یادگیری گامبهگام تمرکز شده است. باید در مطالعه مطالب آموزش روبی وقت کافی صرف شود و صبر و بردباری لازم وجود داشته باشد. پیش از آموزش نصب و راهاندازی روبی، ابتدا بهتر است به معرفی برخی مفاهیم مقدماتی و اصطلاحات به کار رفته در مطلب آموزش روبی پرداخته شود.
پیشنیازهای آموزش روبی
در این مطلب سعی شده است تا آموزش روبی در سطح کاملاً مقدماتی ارائه شود تا افرادی که قصد دارند یادگیری مهارت برنامه نویسی را با آموزش روبی آغاز کنند، امکان استفاده از محتوای این مقاله را داشته باشند. قبل از شروع آموزش روبی و انجام تمرینها و مثالهای مختلفی که در ادامه آموزش روبی ارائه خواهد شد، در این بخش، برخی مفاهیم اولیه و تعاریفی از اصطلاحات مورد نیاز با هدف درک کامل این نوشته ارائه شده است.
متن باز بودن به چه معناست؟
اصطلاح متنباز (منبع آزاد | منبع باز | Open Source) به نرمافزاری اطلاق میشود که افراد میتوانند آن را ویرایش کرده یا به اشتراک بگذارند؛ به این دلیل که طراحی و ساختار آن به صورت عمومی قابل دسترس است. نرمافزار متنباز، نرمافزاری است با کد منبعی که هرکسی میتواند آنرا بررسی یا ویرایش کند و بهبود دهد. کد منبع همان کدهایی است که برنامهنویسان کامپیوتر میتوانند با ویرایش آن، نحوه عملکرد یک نرمافزار را تغییر دهند.
برنامه نویسی شیٔگرا چیست؟
برنامه نویسی شیٔگرا (Object-oriented Programming | OOP) یک مدل برنامه نویسی کامپیوتر است که طراحی نرمافزار را به جای توابع و منطق، پیرامون دادهها یا اشیاء سازماندهی میکند. یک شیٔ میتواند به عنوان یک میدان (فیلد | Field) داده تعریف شود که دارای خاصیتها و رفتارهای مربوط به خود است. رویکرد برنامه نویسی شیٔگرا برای برنامههای بزرگ و پیچیدهای که دائماً در حال بهروزرسانی هستند مناسب است.
سینتکس یعنی چه؟
سینتکس (نحو | Syntax) یک زبان برنامه نویسی به قوانینی اطلاق میشود که ساختار یک زبان را تعیین میکنند. در برنامه نویسی کامپیوتر، سینتکس به معنای قوانینی است که ساختار نشانهها، علائم دستور زبان و کلمات یک زبان برنامه نویسی را مدیریت میکند. بدون سینتکس، درک مفهوم و معناشناسی یک زبان برنامه نویسی تقریباً غیرممکن است.
در ادامه فرآیند آموزش روبی در بخش بعدی نحوه نصب این زبان ارائه شده است.
چگونه روبی را نصب کنیم؟
با وجود ابزارهای مدیریت بسته یا شخص ثالث، انتخابهای بسیاری برای نصب و مدیریت Ruby در دسترس است.
برای بررسی این مسئله که آیا روبی قبلاً روی سیستمعامل نصب شده است یا خیر، میتوان دستور زیر را در خط فرمان (مثلاً Command Prompt در ویندوز یا Terminal در مک OS) وارد کرد:
1ruby -v
با وارد کردن این دستور، در صورت نصب بودن Ruby، اطلاعاتی در مورد نسخه روبی نصب شده مشابه تصویر زیر در خروجی نشان داده میشود.
انتخاب روش نصب روبی
روشهای بسیاری برای نصب روبی وجود دارد که در ادامه فهرست شدهاند:
- در یک سیستمعامل مبتنی بر یونیکس، استفاده از مدیر بسته سیستم برای نصب Ruby راه سادهتری است. اگرچه، نسخه یک بسته روبی ممکن است جدیدترین نسخه آن نباشد.
- برای نصب یک نسخه خاص یا چند نسخه، میتوان از Installerها (نصب کننده) استفاده کرد. همچنین، یک Installer برای ویندوز نیز موجود است.
- از Managerها میتوان برای جابهجایی میان چند نسخه نصب شده روبی روی سیستم استفاده کرد.
- میتوان Ruby را از منبع (Source) توسعه داد و ساخت.
همچنین، در ویندوز ۱۰ میتوان از «زیرسیستم ویندوز برای لینوکس» جهت نصب یکی از توزیعهای تحت پشتیبانی لینوکس استفاده کرده و هر کدام از روشهای نصب موجود Ruby در آن سیستم را به کار گرفت. در ادامه، به شرح نصب روبی در لینوکس و ویندوز پرداخته شده است.
سیستمهای مدیریت بسته
در صورتی که برنامهنویس نتواند کدهای تولید شده با Ruby را کامپایل کند و همچنین نخواهد از ابزارهای شخص ثالث برای اینکار استفاده کند، میتواند از مدیر بسته (Package Manager) سیستمعامل خود برای نصب روبی استفاده کند. از این روش نصب، در بسترهای مبتنی بر یونیکس استفاده میشود. برای مثال در سیستمعاملهای Debian و Ubuntu، از مدیر بسته «apt» استفاده میشود. برخی از اعضای جامعه Ruby این حس را دارند که باید از مدیر بسته برای نصب روبی اجتناب کرد و بهتر است به جای آن از ابزار اختصاصی (Dedicated Tools) استفاده کرد.
این امکان وجود دارد که Package Managerهای عمده، نسخههای قدیمیتر Ruby را به جای آخرین نسخه نصب کنند. برای استفاده از آخرین نسخه منتشر شده روبی، باید بررسی شود که نام بسته با شماره آخرین نسخه همخوانی داشته باشد. یا به جای این روش از روش نصبکننده اختصاصی استفاده شود. در ادامه، نحوه نصب روبی با استفاده از سیستمهای مدیریت بسته روی سیستمعامل لینوکس (Ubuntu و Debian) آموزش داده شده است.
نصب روبی در لینوکس (apt)
Debian GNU/Linux و Ubuntu از مدیر بسته apt برای نصب برنامهها استفاده میکنند. از apt میتوان با دستور زیر برای نصب روبی استفاده کرد:
1$ sudo apt-get install ruby-full
به همین ترتیب میتوان از مدیر بسته مخصوص برای نصب روبی روی هر یک از سیستمعاملهای مبتنی بر یونیکس استفاده کرد. در ادامه، نحوه نصب روبی با استفاده از نصبکننده آموزش داده شده است.
نصب روبی با Installer
در صورتی که نسخه Ruby ارائه شده به وسیله سیستم یا مدیر بسته بهروز نبوده و منسوخ شده باشد، نسخه جدیدتر را میتوان با استفاده از یک Installer شخص ثالث نصب کرد. برخی Installerها امکان نصب چند نسخه روی یک سیستم را فراهم میکنند. میتوان از Managerهای مرتبط برای جابهجایی میان نسخههای مختلف Ruby کمک گرفت.
نصب روبی روی ویندوز
در ویندوز، «RubyInstaller» تمام آنچه برای راهاندازی یک محیط کامل توسعه Ruby نیاز است را فراهم میکند. با دانلود و نصب آن [+] همه چیز آماده شروع آموزش روبی خواهد بود. حجم فایل کمتر از ۲۰۰ مگابایت است و دانلود آن به سرعت انجام میشود. در صفحه دانلود RubyInstaller برای ویندوز، نسخههای مختلفی فهرست شدهاند. در صورتی که فرد نداند که کدام نسخه را باید نصب کند و به تازگی آموزش روبی را آغاز کرده است، توصیه میشود که «نسخه پیشنهادی» دانلود و نصب شود.
همانطور که در تصویر بالا مشخص شده، نسخه پیشنهادی در فهرست سمت چپ تصویر، نسخه «Ruby+Devkit 2.7.X (x64)» است که با فونت درشت و یک علامت پیکان در سمت چپ آن، نسبت به سایر نسخهها متمایز شده است. همچنین، در توضیحات سمت راست تصویر، به نسخه پیشنهادی اشاره شده است. پس از دانلود، باید فایل Installer را اجرا و نصب کرد. در مراحل نصب مورد خاصی وجود ندارد و با انتخاب مسیر نصب و زدن دکمه Next در هر مرحله انجام میشود.
میتوان فرآیند نصب روبی در ویندوز را به ۵ مرحله تقسیم کرد که در ادامه فهرست شده است:
- گام اول مربوط به تایید توافقنامه مجوز است که با پذیرفتن آن میتوان به مرحله بعدی رفت.
- در گام دوم، مسیر نصب روبی تعیین میشود. با تیک زدن هر یک از سه گزینه در این مرحله، فایلهای اجرایی Ruby به مسیر سیستم اضافه میشوند، فایلهایی که پسوند «rb» و «rbw» دارند، با نسخه نصب شده Ruby مرتبط میشوند و از قالب «UTF-8» به عنوان کدگذاری خارجی پیشفرض استفاده خواهد شد.
- در گام سوم، میتوان اجزاء افزودهای را که به همراه Ruby قابل نصب هستند انتخاب کرد. این اجزاء شامل Ruby RI و HTML Docs است که مربوط به مستندات روبی هستند و همچنین توزیع MSYS2 قابل انتخاب برای نصب به همراه Ruby است. MSYS2 یک توزیع نرمافزاری و پلتفرم ساخت برای ویندوز است که یک محیط شبیه به یونیکس، یک واسط خط فرمان و یک مخزن نرمافزاری ایجاد میکند. در واقع، MSYS2 مجموعهای از ابزارها و کتابخانهها است که یک محیط با کاربری آسان جهت ساخت، نصب و اجرای نرمافزارهای ویندوزی را فراهم میکند.
- پس از عبور از گام سوم، نصب روبی انجام تکمیل میشود و با انتخاب گزینه Finish، فرآيند نصب پایان مییابد. البته، در صورتی که در مرحله سوم گزینه نصب MSYS2 تیک خورده باشد، پس از پایان نصب روبی در مرحله چهارم، فرآیند نصب MSYS2 آغاز میشود.
- مرحله آخر مربوط به نصب توزیع MSYS2 است. یک پنجره خط فرمان مطابق تصویر زیر باز میشود که با وارد کردن عدد یک و زدن کلید Enter نصب MSYS2 انجام شده و در پایان هم، مجدد با زدن کلید Enter پنجره خط فرمان بسته شده و نصب به اتمام میرسد.
حالا میتوان ملاحظه کرد که گزینه «Start Command Prompt with Ruby» در منوی استارت اضافه و نصب روبی روی سیستمعامل ویندوز با موفقیت انجام شده است. اکنون با تکمیل فرآیند نصب، نوبت به شروع آموزش روبی رسیده است.
شروع آموزش روبی
در این بخش، آموزش روبی به بیان ساده و سریع در سطح مقدماتی ارائه شده است. فرض بر این است که طبق آموزشهای ارائه شده در بخش قبلی، نصب روبی انجام شده باشد.
در ادامه، قابلیت Ruby تعاملی با توجه به اهمیت آن در آموزش روبی معرفی شده است.
قابلیت روبی تعاملی
کار با کدهای Ruby در بخش تعاملی روش بسیار خوبی برای یادگیری روبی است. برای این کار، باید «IRB» را اجرا و باز کرد. IRB سرنامی برای عبارت «Interactive Ruby» به معنی «روبی تعاملی» است.
- در صورتی که از macOS استفاده میشود، باید Terminal (خط فرمان) را باز و داخل آن عبارت «irb» را تایپ کرده و کلید اینتر را زد.
- در صورت استفاده از لینوکس، باید Shell (خط فرمان لینوکس) را باز کرده و باز هم عبارت «irb» را تایپ کرده و کلید اینتر را زد.
- در نهایت، در صورت استفاده از ویندوز، میتوان خط فرمان Ruby را از طریق منوی Start اجرا کرد. در صورت پیدا نکردن آن، میتوان عبارت Interactive Ruby را در منوی استارت جستجو کرد. با اجرای خط فرمان، برای ورود به بخش تعاملی، باید باز هم عبارت «irb» را تایپ کرده و کلید اینتر را زد. با انجام این کار، Prompt خط فرمان به صورت زیر تغییر میکند:
1irb(main):001:0>
اکنون، جهت آزمایش و به عنوان اولین دستور روبی، میتوان عبارت "Hello World" را در خط فرمان وارد کرده و کلید اینتر را زد:
1irb(main):001:0> "Hello World"
2=> "Hello World"
ملاحظه میشود که بلافاصله پس از زدن اینتر، عبارت "Hello World" در خط بعد ظاهر میشود. آیا عبارت "Hello World" چاپ شده در خط بعد، خروجی دستور بالا است؟ آیا اکنون کوتاهترین برنامه Hello World ممکن با Ruby نوشته شده است؟ خیر، اینطور نیست. خط دوم فقط روش روبی تعاملی برای اعلام این نکته است که نتیجه آخرین دستور ارزیابی شده است. اما برای چاپ عبارت Hello World در خروجی، باید کار بیشتری انجام شود. بنابراین، در ادامه آموزش روبی، به نحوه چاپ متن در خروجی پرداخته شده است.
دستور puts در روبی
در این بخش از آموزش روبی، دستور puts آموزش داده شده است. برای چاپ عبارت Hello World در خروجی، باید به صورت زیر عمل کرد:
1irb(main):002:0> puts "Hello World"
2Hello World
3=> nil
«puts» دستور سادهای برای چاپ کردن یک متن در Ruby است. اما آن قسمت «nil <=» در خط پایانی چیست؟ در ادامه آموزش روبی «نوع nil» تعریف و معرفی شده است.
nil در روبی چیست ؟
در پاسخ باید گفت که «nil <=» نتیجه و حاصل دستور puts است. دستور puts همواره nil را برمیگرداند. nil مقدار هیچ (Null) کاملاً مثبت در روبی است. به بیان دیگر، nil یک نوع داده مخصوص در روبی به معنای «هیچ» محسوب میشود. nil در روبی معادل null یا None در سایر زبانهای برنامه نویسی است.
عملیات حسابی در روبی
تا اینجا، آموزش روبی به میزانی پیش رفته است که میتوان عملیات حسابی را در روبی تعاملی به صورت زیر انجام داده و آزمایش کرد:
1irb(main):003:0> 3+2
2=> 5
در کدهای بالا، به سادگی یک عمل جمع در روبی انجام شده است. به همین صورت، میتوان عملیات ضرب را نیز انجام داد. لازم به ذکر است که با زدن کلید «پیکان بالا» در صفحه کلید، میتوان به دستورات قبلی تایپ شده در روبی دسترسی داشت. بنابراین، میتوان برای راحتی بیشتر، دستورات قبلی را ویرایش کرده و دستور جدید را وارد کرد. به عنوان مثال، برای وارد کردن دستور «3 * 2» با زدن کلید فلش بالا در صفحه کلید، دستور قبلی (2+3) نمایش داده میشود. حال با زدن کلید فلش چپ میتوان به محلی که عملگر «+» تایپ شده رفت و آن را حذف و عملگر ضرب (*) را جایگزین کرد. با زدن کلید اینتر، دستور «3 * 2» اجرا خواهد شد:
1irb(main):004:0> 3*2
2=> 6
توان و جذر در روبی
در روبی، برای به توان رساندن یک متغیر یا عدد از عملگر «**» استفاده میشود. همچنین، محاسبه جذر ریشه دوم، به صورت زیر انجام میشود:
1irb(main):006:0> Math.sqrt(9)
2=> 3.0
در کد بالا، ریشه دوم عدد ۹ محاسبه شده است. برای درک دستور بالا، نیاز به ارائه توضیحات بیشتری در خصوص Math وجود دارد. در ادامه آموزش روبی پیرامون اینکه Math چیست، توضیحاتی ارائه شده است.
کد گروه ماژول ها براساس موضوع
Math یک ماژول توکار (built-in) برای ریاضیات است. در روبی، ماژولها دو نقش بر عهده دارند. یکی از نقشهای ماژولها در روبی، گروهبندی کردن متُدهای (Method) مشابه، تحت یک نام شناخته شده است. همچنین، Math شامل متدهایی مانند sin() و tan() است. در دستور «Math.sqrt(9)» یک نقطه وجود دارد. این نقطه، نحوه شناسایی دریافت کننده پیام (ماژول Math) را مشخص میکند. اما پیام چیست؟ در این مورد، پیام «sqrt(9)» است که به معنای فراخوانی متد «sqrt» تلقی میشود.
نام متد sqrt خلاصه شده عبارت «Square Root» به معنی «ریشه دوم» است. همچنین، این متد یک پارامتر ورودی (در این مثال عدد ۹) دارد. حاصل فراخوانی متد sqrt مقدار «3.0» است. باید دقت شود که مقدار خروجی یک عدد صحیح (Integer) نیست. زیرا در اکثر موارد، ریشه دوم یا جذر یک عدد از نوع اعشاری خواهد بود. بنابراین، متد sqrt و بسیاری از سایر متدها، مقادیری از نوع ممیز شناور را بازمیگردانند. در ادامه، پیرامون استفاده از متغیرها در روبی بحث شده است.
استفاده از متغیرها در روبی
ممکن است قصد ذخیرهسازی نتایج یک عملیات خاص با هدف استفاده مجدد از آنها وجود داشته باشد. برای این کار میتوان این نتایج را در متغیرها (Variable) ذخیره کرد. نحوه تعریف و استفاده از متغیرها در روبی به صورت زیر است:
1irb(main):007:0> a = 3 ** 2
2=> 9
3irb(main):008:0> b = 4 ** 2
4=> 16
5irb(main):009:0> Math.sqrt(a+b)
6=> 5.0
در کدهای بالا، نتیجه محاسبات انجام شده در متغیرهایی با نامهای a و b ذخیره شده است و سپس، این متغیرها در محاسبات بعدی (محاسبه ریشه دوم جمع دو متغیر) مورد استفاده قرار گرفتهاند. در ادامه آموزش روبی نحوه تعریف و استفاده از توابع آموزش داده شده است.
متدها در روبی
متد یک قطعه کد سازماندهی شده و قابل استفاده مجدد است که برای اجرای یک عملیات خاص استفاده میشود. به عنوان مثال، اگر قصد تکرار چندین باره عبارت «Hello World» وجود داشته باشد، بدون اینکه نیاز باشد هر بار این عبارت تایپ شود، میتوان به صورت زیر یک متد تعریف کرده و هر بار آن متد را فراخوانی کرد.
1irb(main):010:0> def hi
2irb(main):011:1> puts "Hello World!"
3irb(main):012:1> end
4=> :hi
عبارت «def hi» آغازگر تعریف متد است. این عبارت به روبی میگوید که یک متد تعریف شده است و نام آن «hi» (به معنی سلام) است. در خط بعدی، بدنه متد نوشته شده است که معادل همان دستوری است که قبلاً و در ابتدای آموزش روبی بدون تعریف متد اجرا شد: «puts "Hello World"». در نهایت، خط آخر و کلمه «end» به روبی میگوید که تعریف متد تمام شده است. بازخورد و پاسخ روبی به صورت «hi: <=» است. این پاسخ، به برنامهنویس نشان میدهد که روبی از پایان یافتن تعریف متد اطلاع دارد. برای Ruby 2.0 و نسخههای قدیمیتر، این پاسخ میتواند به صورت nil باشد. حال میتوان از این متد برای چاپ عبارت «Hello World!» در خروجی به صورت زیر استفاده کرد:
1irb(main):013:0> hi
2Hello World!
3=> nil
4irb(main):014:0> hi()
5Hello World!
6=> nil
همانطور که در کدهای بالا مشخص است، اگر یک متد نیازی به دریافت پارامتر (متغیر ورودی) نداشته باشد، فراخوانی متد در روبی به سادگی نوشتن نام آن متد است. میتوان از پرانتز خالی هم در فراخوانی متد استفاده کرد، اما ضرورتی در انجام این کار وجود ندارد. اما اگر به جای سلام کردن به تمام دنیا، قصد سلام کردن به فرد خاصی وجود داشته باشد چطور؟ در ادامه آموزش روبی نحوه تعریف و فراخوانی یک متد به همراه پارامتر ورودی شرح داده شده است.
متد با پارامتر در روبی
در صورتی که قصد تعریف یک متد با دریافت پارامتر ورودی در روبی وجود داشته باشد، میتوان متد را به صورت زیر تعریف کرد:
1irb(main):015:0> def hi(name)
2irb(main):016:1> puts "Hello #{name}!"
3irb(main):017:1> end
4=> :hi
5irb(main):018:0> hi("Matz")
6Hello Matz!
7=> nil
در کدهای بالا، متد hi بازتعریف شده است. این بار، متد hi پارامتری به نام «name» را دریافت میکند. اما، عبارت «#{name}» چیست؟ در پاسخ باید گفت که روبی با این روش مقدار یک متغیر را در داخل یک رشته قرار میدهد. در واقع آن قسمتی که در داخل براکت قرار گرفته، به یک رشته تبدیل شده (البته اگر خودش از نوع رشته نباشد) و سپس در محل مربوطه در داخل رشته قرار میگیرد.
در فراخوانی تابع نیز رشتهای که قرار است به عنوان پارامتر به متد ارجاع شود، پس از نام متد در داخل پرانتز نوشته میشود و چون از نوع رشته است، باید در داخل نشان نقل قول (" ") قرار بگیرد. همچنین، میتوان رشته ورودی را با حروف بزرگ در خروجی چاپ کرد. این کار با استفاده از متد «capitalize» به صورت زیر انجام میشود:
1irb(main):019:0> def hi(name = "World")
2irb(main):020:1> puts "Hello #{name.capitalize}!"
3irb(main):021:1> end
4=> :hi
5irb(main):022:0> hi "chris"
6Hello Chris!
7=> nil
8irb(main):023:0> hi
9Hello World!
10=> nil
چند نکته در کدهای بالا وجود دارد که باید به آنها اشاره شود. اول اینکه، متد بدون پرانتز فراخوانی شده است. یعنی پارامتر ورودی "chris" در داخل پرانتز قرار داده نشده است. در روبی، اگر کار انجام شده مشخص و واضح باشد، نیازی به استفاده از پرانتز وجود ندارد. در خصوص نکته دیگر، باید به مقداردهی اولیه یا پیشفرض پارامتر یک متد اشاره کرد که در کدهای بالا با کلمه «World» انجام شده است. بنابراین، اگر هیچ پارامتری در فراخوانی متد پاس داده نشود، از مقداردهی پیشفرض به عنوان پارامتر ورودی استفاده خواهد شد. در ادامه مطلب آموزش روبی پیرامون اشیاء بحث شده است.
استفاده از شیٔ در روبی
در صورتی که از یک شیٔ برای همان عملیات قبلی (یعنی سلام کردن) استفاده شود، این شیٔ امکان به خاطر سپردن پارامترهای ورودی را خواهد داشت و با تعریف متدهای مختلف برای یک شیٔ، میتوان آن متدها را روی پارامترهای به خاطر سپرده شده اعمال کرد.
به عنوان مثال، کلاس Greeter به صورت زیر تعریف میشود:
1irb(main):024:0> class Greeter
2irb(main):025:1> def initialize(name = "World")
3irb(main):026:2> @name = name
4irb(main):027:2> end
5irb(main):028:1> def say_hi
6irb(main):029:2> puts "Hi #{@name}!"
7irb(main):030:2> end
8irb(main):031:1> def say_bye
9irb(main):032:2> puts "Bye #{@name}, come back soon."
10irb(main):033:2> end
11irb(main):034:1> end
12=> :say_bye
کلیدواژه جدید در این بخش از آموزش روبی «class» است. در کدهای بالا، با استفاده از کلیدواژه «class» یک کلاس جدید به نام Greeter ایجاد شده است. همچنین همانطور که پیداست، چند متد نیز برای کلاس Greeter در داخل آن تعریف شده است. همچنان باید به عبارت «@name» توجه شود. «@name» یک متغیر نمونه (Instance Variable) است. متغیر نمونه، برای همه متدهای یک کلاس قابل دسترسی است. ملاحظه میشود که در کدهای بالا، متغیر نمونه «@name» به وسیله متدهای «say_hi» و «say_bye» مورد استفاده قرار گرفته است. حالا چطور میتوان از کلاس Greeter استفاده کرد؟ در ادامه به نحوه فراخوانی و استفاده از کلاس پرداخته شده است.
ایجاد یک شیٔ در روبی
اکنون، پس از تعریف کلاس Greeter، میتوان یک شیٔ Greeter تعریف کرده و از آن به مانند زیر استفاده کرد:
1irb(main):035:0> greeter = Greeter.new("Pat")
2=> #<Greeter:0x16cac @name="Pat">
3irb(main):036:0> greeter.say_hi
4Hi Pat!
5=> nil
6irb(main):037:0> greeter.say_bye
7Bye Pat, come back soon.
8=> nil
با توجه به کدهای بالا، پس از ایجاد کلاس Greeter و فراخوانی پارامتر ورودی با محتوای "Pat"، این شیٔ به یاد خواهد داشت که مقدار ورودی "Pat" است و با فراخوانی متدهای Greeter، از ورودی "Pat" استفاده خواهد شد. اما، در صورتی که قصد رسیدن به نام "Pat" یا همان متغیر نمونه @name وجود داشته باشد چه اتفاقی خواهد افتاد؟
1irb(main):038:0> greeter.@name
2SyntaxError: (irb):38: syntax error, unexpected tIVAR, expecting '('
همانطور که در کدهای بالا پیداست، با سعی در دستیابی به نام شیٔ "Pat" خطای نحو (سینتکس) در خروجی چاپ میشود. متغیرهای نمونه در داخل شیٔ پنهان شدهاند. البته، در حدی پنهان نیستند که نتوان آنها را دید و با نگاه کردن به کدهای تعریف شیٔ، متغیرهای نمونه قابل ملاحظه هستند.
همچنین، راههای دیگری برای دسترسی به متغیرهای نمونه وجود دارد، اما روبی از یک رویکرد شیٔگرایانه مناسب به شکلی استفاده میکند که دادهها به نوعی دور از دسترس و مخفی نگاه داشته شوند. اما از طرف دیگر، میتوان به متدهای یک شیٔ به صورت زیر دسترسی پیدا کرد:
1irb(main):039:0> Greeter.instance_methods
2=> [:say_hi, :say_bye, :instance_of?, :public_send,
3 :instance_variable_get, :instance_variable_set,
4 :instance_variable_defined?, :remove_instance_variable,
5 :private_methods, :kind_of?, :instance_variables, :tap,
6 :is_a?, :extend, :define_singleton_method, :to_enum,
7 :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?,
8 :freeze, :inspect, :display, :send, :object_id, :to_s,
9 :method, :public_method, :singleton_method, :nil?, :hash,
10 :class, :singleton_class, :clone, :dup, :itself, :taint,
11 :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods,
12 :protected_methods, :frozen?, :public_methods, :singleton_methods,
13 :!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]
همانطور که در خروجی دستور «Greeter.instance_methods» در کدهای بالا ملاحظه میشود، تعداد متدهای فهرست شده بسیار بیشتر از متدهایی است که برای شیٔ Greeter تعریف شد. در واقع، تنها دو متد در هنگام ایجاد کلاس Greeter تعریف شد. پس چه اتفاقی افتاده است؟ در واقع، موارد فهرست شده در کدهای بالا، تمام متدهای قابل استفاده برای شیٔ Greeter هستند. یعنی یک فهرست کامل که شامل متدهای کلاسهای والد (Ancestor) نیز میشود. اگر تنها قصد فهرست کردن متدهای تعریف شده برای کلاس Greeter وجود داشته باشد که شامل متدهای والد نشود، میتوان پارامتر «false» را به «instance_methods» به صورت زیر ارجاع داد:
1irb(main):040:0> Greeter.instance_methods(false)
2=> [:say_hi, :say_bye]
در صورتی که قصد بررسی این مسئله وجود داشته باشد که شیٔ Greeter به چه متدهایی پاسخ میدهد، یعنی چه متدهایی برای شیٔ Greeter قابل استفاده هستند، میتوان به صورت زیر عمل کرد:
1irb(main):041:0> greeter.respond_to?("name")
2=> false
3irb(main):042:0> greeter.respond_to?("say_hi")
4=> true
5irb(main):043:0> greeter.respond_to?("to_s")
6=> true
در کدهای بالا، متدهای «say_hi» و «to_s» (این متد برای تبدیل چیزی به یک رشته استفاده میشود، متدی که به صورت پیشفرض برای همه اشیاء تعریف شده است) قابل شناسایی و استفاده هستند. اما متدی به نام «name» شناسایی نشده و قابل استفاده نخواهد بود.
ویرایش کلاسها در روبی
روبی یک روش ساده برای دسترسی به متغیرهای یک شیٔ فراهم کرده است. در روبی میتوان یک کلاس را مجدد باز و آن را ویرایش کرد.
امکان اعمال تغییرات در هر شیٔ جدیدی که ایجاد شود وجود خواهد داشت و حتی در اشیائی از آن کلاس که قبلاً ایجاد شده نیز امکانپذیر خواهد بود.
1irb(main):044:0> class Greeter
2irb(main):045:1> attr_accessor :name
3irb(main):046:1> end
4=> nil
در کدهای بالا، با استفاده از «attr_accessor» دو متد جدید برای کلاس Greeter با نامهای «name» و «name=» تعریف میشود که اولی برای دریافت مقدار و دومی برای اعمال مقدار مربوطه استفاده میشود.
1irb(main):047:0> greeter = Greeter.new("Andy")
2=> #<Greeter:0x3c9b0 @name="Andy">
3irb(main):048:0> greeter.respond_to?("name")
4=> true
5irb(main):049:0> greeter.respond_to?("name=")
6=> true
7irb(main):050:0> greeter.say_hi
8Hi Andy!
9=> nil
10irb(main):051:0> greeter.name="Betty"
11=> "Betty"
12irb(main):052:0> greeter
13=> #<Greeter:0x3c9b0 @name="Betty">
14irb(main):053:0> greeter.name
15=> "Betty"
16irb(main):054:0> greeter.say_hi
17Hi Betty!
18=> nil
در کدهای بالا ملاحظه میشود که ابتدا یک شیٔ جدید از کلاس Greeter با نام "Andy" ایجاد میشود. سپس، امکان استفاده از دو متد جدید «name» و «name=» در شیٔ "Andy" بررسی شده که جواب آن مثبت یا «True» است. در ادامه، نام شیٔ با استفاده از متد «name» به "Betty" تغییر داده شده است و در آخر نیز از تغییر نام اطمینان حاصل شده و متد «say_hi» نیز روی شیٔ تغییر نام داده شده امتحان میشود.
ذخیره در فایل و حلقه if
کلاس Greeter که در بخشهای قبلی تعریف شد، قابلیتهای چندانی ندارد و در هر لحظه تنها میتواند به یک نفر سلام کند. در این بخش نوعی ابَر Greeter تعریف خواهد شد که میتواند به جهان، یک شخص یا فهرستی از افراد درود فرستد.
در این بخش، کلاس MegaGreeter به جای اینکه مستقیماً در مفسر روبی تعاملی (IRB) تعریف شود، در یک فایل نوشته و ذخیره خواهد شد. بنابراین، برای خارج شدن از حالت IRB، باید کلمه «quit» یا «exit» را تایپ کرده و اینتر زد. همچنین، میتوان با فشردن کلیدهای «Ctrl+D» از این محیط خارج شد. کدهای مربوط به کلاس MegaGreeter و آزمایش متدهای آن در ادامه آمده است:
1#!/usr/bin/env ruby
2
3class MegaGreeter
4 attr_accessor :names
5
6 # Create the object
7 def initialize(names = "World")
8 @names = names
9 end
10
11 # Say hi to everybody
12 def say_hi
13 if @names.nil?
14 puts "..."
15 elsif @names.respond_to?("each")
16 # @names is a list of some kind, iterate!
17 @names.each do |name|
18 puts "Hello #{name}!"
19 end
20 else
21 puts "Hello #{@names}!"
22 end
23 end
24
25 # Say bye to everybody
26 def say_bye
27 if @names.nil?
28 puts "..."
29 elsif @names.respond_to?("join")
30 # Join the list elements with commas
31 puts "Goodbye #{@names.join(", ")}. Come back soon!"
32 else
33 puts "Goodbye #{@names}. Come back soon!"
34 end
35 end
36end
37
38
39if __FILE__ == $0
40 mg = MegaGreeter.new
41 mg.say_hi
42 mg.say_bye
43
44 # Change name to be "Zeke"
45 mg.names = "Zeke"
46 mg.say_hi
47 mg.say_bye
48
49 # Change the name to an array of names
50 mg.names = ["Albert", "Brenda", "Charles",
51 "Dave", "Engelbert"]
52 mg.say_hi
53 mg.say_bye
54
55 # Change to nil
56 mg.names = nil
57 mg.say_hi
58 mg.say_bye
59end
ابتدا باید کدهای بالا را در فایلی به نام «ri20min.rb» در محل فعلی خط فرمان روبی ذخیره کرده و سپس در خط فرمان دستور «ruby ri20min.rb» را نوشته و اینتر زد. روبی کدهای ذخیره شده در فایل «ri20min.rb» را تفسیر و اجرا میکند. خروجی باید به صورت زیر باشد.
1Hello World!
2Goodbye World. Come back soon!
3Hello Zeke!
4Goodbye Zeke. Come back soon!
5Hello Albert!
6Hello Brenda!
7Hello Charles!
8Hello Dave!
9Hello Engelbert!
10Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come
11back soon!
12...
13...
در ادامه آموزش روبی، پیرامون کدهای ذخیره شده در فایل ri20min.rb به طور جامع بحث شده است. ابتدا به صورت کلی در مورد آن توضیح داده شده و سپس آموزشهای دقیقتری پیرامون هر یک مفاهیم جدید ارائه میشود.
توضیحات کلی کلاس MegaGreeter
در ابتدا تعریف کلاس MegaGreeter انجام و برای امکان خواندن و نوشتن متغیر نمونه names از متد attr_accessor استفاده شده است. سپس، متغیر نمونه names تعریف و مقداردهی اولیه میشود. در ادامه، متد say_hi در داخل کلاس MegaGreeter تعریف میشود. عملکرد متد say_hi برای سه حالت مختلف با استفاده از عبارت شرطی if تعیین میشود. در حالت اول، اگر متغیر @names خالی یا nil باشد در خروجی، یک سه نقطه به صورت «...» چاپ میشود. عبارت شرطی دوم که با «elsif» قابل شناسایی است، برای حالتی استفاده میشود که متغیر names از نوع لیست باشد.
در چنین حالتی، MegaGreeter به هر یک از اعضای لیست به صورت جداگانه سلام میکند. شرط آخر نیز مشابه کلاس Greeter به یک نام مشخص شده در ورودی سلام میکند. پس از آن، متد say_bye در کلاس MegaGreeter تعریف شده است. در این متد نیز هر سه حالت ممکن مشابه متد say_hi پیادهسازی میشود. تنها تفاوت متد say_bye مربوط به حالت دوم است که به جای خداحافظی با تک تک اسامی یک لیست، MegaGreeter با همه اعضا به صورت یکجا و در یک جمله (سطر) خداحافظی میکند. پس از تعریف متد say_bye، کلاس MegaGreeter بسته شده است.
در ادامه فایل، کدهایی برای آزمایش و استفاده از کلاس MegaGreeter با تعریف شیئی به نام mg نوشته شده است که نتایج آنها در خروجی چاپ میشود. این کدها هر سه حالت ممکن برای دو متد say_hi و say_bye را آزمایش میکنند. در ادامه، با نگاه دقیقتر به جزئیات، مفاهیم جدید در آموزش روبی ارائه شده است.
کامنت در روبی
با نگاهی عمیقتر به کدهای بالا، مشاهده میشود که سطر اول با کاراکتر «#» شروع شده است.
1#!/usr/bin/env ruby
در روبی، هر چیزی که بعد از این علامت بیاید، به عنوان کامنت شناخته شده و مفسر آن را در نظر نمیگیرد. اگرچه، سطر اول فایل ri20min.rb یک مورد خاص است و تحت یک سیستمعامل مبتنی بر یونیکس، این سطر نحوه اجرای فایل را به Shell اطلاع میدهد. سایر کامنتهای این فایل تنها برای ارائه توضیحات و شفافسازی نوشته شدهاند. در کلاس MegaGreeter، متد say_hi نسبت به کلاس Greeter پیچیدهتر شده است. حالا این متد از متغیر نمونه @names برای تصمیمگیری استفاده میکند.
حلقه تکرار و متد Each در روبی
در صورتی که شیٔ @names به «each» پاسخ بدهد، یعنی «each» چیزی است که دارای بیش از یک عضو بوده و میتوان در آن گام برداشت و تکرار انجام داد. بنابراین، تکرار انجام میشود و MegaGreeter به هر شخص داخل فهرست سلام میکند. در ادامه بررسی دقیقتری پیرامون حلقه تکرار انجام شده است:
1@names.each do |name| puts "Hello #{name}!" end
«each» متدی است که یک «بلوک کد» را قبول کرده و سپس آنرا برای هر یک از اعضای یک لیست اجرا میکند. در کدهای بالا، این بلوک کد بین do و end قرار گرفته است. بلوک مشابه یک تابع ناشناس عمل میکند. متغیری که بین دو کاراکتر پایپ «| |» قرار گرفته (یعنی متغیر name)، پارامتر مربوط به این بلوک است. اتفاقی که در اینجا رخ میدهد به این صورت است که برای هر ورودی در یک لیست، پارامتر name به عنصر آن لیست گره خورده و سپس عبارت «puts "Hello #{name}!"» با آن name (نام) اجرا میشود. اکثر زبانهای برنامه نویسی، پیمایش در طول یک لیست را با استفاده از حلقه for انجام میدهند. مثلاً در زبان C، این کار به این صورت انجام میشود:
1for (i=0; i<number_of_elements; i++) { do_something_with(element[i]); }
استفاده از حلقه for برای پیمایش یک لیست، کار را انجام میدهد اما چندان بهینه و مناسب نیست. زیرا در چنین روشی، نیاز به یک متغیر دور ریختنی مثل i وجود دارد. همچنین، تعداد اعضای یک لیست هم باید از قبل مشخص شده باشند و نحوه پیمایش در طول لیست هم توضیح داده شود. میتوان گفت، رویکرد روبی در این زمینه بسیار بهتر و برازندهتر است.
زیرا تمام جزئیات اضافه داخل متد each پنهان میشوند و فقط کافی است به این متد گفته شود که با هر یک از اعضای لیست چه کاری باید انجام دهد. قدرت واقعی بلوکها در مواجه شدن با موارد پیچیدهتری نسبت به لیستها مشخص میشود. علاوه بر مدیریت جزئیات معمول و کم اهمیت در قالب یک متد، میتوان عملیات مربوط به تنظیمات، حذف و خطا را بدون نیاز به دخالت کاربر انجام داد.
Duck Typing در روبی
متد say_bye بر خلاف say_hi از متد each استفاده نمیکند. به جای آن، say_bye بررسی میکند که آیا @namesبه متد join پاسخ میدهد (respond_to?) یا خیر. اگر پاسخی داده شود، از join استفاده خواهد شد و در غیر اینصورت، متغیر @names به عنوان یک رشته چاپ میشود.
به چنین روشی که در آن به نوع داده یک متغیر اهمیتی داده نمیشود، به اصطلاح «Duck Typing» میگویند که میتوان آن را «نوع اردکی» ترجمه کرد. این اصطلاح، برگرفته شده از استدلال آزمون مرغابی است. این استدلال بیان میدارد که:
اگر چیزی مثل اردک راه برود یا صدایی مانند اردک داشته باشد، بنابراین احتمالاً یک اردک است.
استفاده از رویکرد Duck Typing از این لحاظ مفید است که برای پشتیبانی از نوع داده متغیرها محدودیتی ایجاد نمیشود. اگر فردی نوع داده جدیدی از یک کلاس لیست ارائه دهد، تا وقتی که این نوع جدید متد join را با منطقی مشابه سایر لیستها پیادهسازی کند، همه چیز طبق نقشه پیش خواهد رفت و حتماً لازم نیست که آن نوع داده تحت پشتیبانی باشد. در ادامه آموزش روبی، پیرامون متغیر __FILE__ توضیحاتی ارائه شده است.
متغیر __FILE__ در روبی
«__FILE__» متغیر جادویی حاوی نام فایل فعلی است. «$0» نام فایلی است که برای شروع برنامه استفاده میشود.
1if __FILE__ == $0
دستور بالا بررسی میکند که «آیا این فایل اصلی است که دارد استفاده میشود یا خیر». این باعث میشود که بتوان از یک فایل به عنوان یک کتابخانه استفاده کرد. اما اگر از فایل مربوطه به عنوان یک فایل اجرایی استفاده شود، میتوان کدها را اجرا کرد. اکنون میتوان گفت که آموزش روبی در سطح مقدماتی تکمیل شده است. در ادامه، آموزشها و نکاتی پیرامون نحوه شروع یک پروژه روبی شرح داده شده است.
انجام یک پروژه با روبی
پس از مطالعه و یادگیری مفاهیم اولیه آموزش روبی در بخشهای قبلی، اکنون تمام اجزاء مورد نیاز برای برنامه نویسی با روبی در اختیار مخاطب قرار گرفته است.
مباحث اصلی که به صورت پروژه محور در بخشهای قبلی به آنها اشاره شد، شامل موارد زیر است:
- متغیرها
- رشتهها و آرایهها
- گذاره if
- حلقهها
با یادگیری چهار مورد فهرست شده و همچنین با استفاده از دستورات توکار (که متد نام دارند) آموزش روبی در سطح مقدماتی کامل شده است. اما جطور میتوان برنامههای خود را ساخت؟ از کجا باید شروع کرد؟ به طور قطع نقطه شروع ساخت و ایجاد یک پروژه برنامه نویسی یک طرح و نقشه است.
طرحریزی پروژه روبی
برای طرحریزی یک پروژه روبی، ابتدا باید ایده کلی از پروژه در حال ساخت وجود داشته باشد. باید پرسید که این برنامه چه کاری قرار است انجام دهد؟ بهتر از با یک چیز ساده شروع کرد. پس از اینکه ایده محصول مورد نظر در ذهن شکل گرفت، باید فهرستی از مراحل و گامهای پیشرو به بیان صریح نوشته شود. برای یادگیری بهتر، در ادامه از یک مثال کمک گرفته شده است.
مثالی برای پیادهسازی پروژه روبی
اگر پوشهای در کامپیوتر حاوی تعداد زیادی فایل Mp3 بوده و هدف، نوشتن برنامهای برای مرتبسازی فایلها بر اساس اندازه باشد، مراحل لازم برای پیادهسازی چنین پروژهای میتواند به صورت زیر نوشته شود:
- خواندن فهرست نام فایلهای Mp3 و قرار دادن آنها در یک آرایه
- مرتبسازی فهرست بر اساس حجم فایلها
- چاپ کردن نتیجه (فهرست مرتب شده)
این کار درست مشابه دستور آشپزی انجام میشود. لازم به ذکر است که، امکان دارد تهیه این فهرست و به طور کلی پیادهسازی پروژه روبی برای اولین بار، بینقص انجام نشود. این مسئله کاملاً طبیعی و مورد انتظار است. در هنگام پیادهسازی عملی این مراحل، میتوان مشکلات را برطرف کرد. حال برای تبدیل این گامها به کُد، باید خلاقیت به خرج داده و از تمام آنچه تا اینجا در فرآیند آموزش روبی فرا گرفته شده، استفاده کرد. باید هر گام را مرور کرده و آنرا به یک سوال «چگونه؟» تبدیل کرد:
- چگونه باید فهرستی از فایلها را در روبی دریافت و ذخیره کرد؟
- چگونه باید یک آرایه را مرتبسازی کرد؟
- چگونه میتوان حجم هر فایل را یافت؟
در برنامه نویسی، همواره میتوان از موتورهای جستجو برای یافتن پاسخ سوالات استفاده کرد.
نکاتی برای حل مؤثر مسئله
در این بخش از مطلب آموزش روبی برخی از نکاتی که برای حل مسئله به نحو مؤثر دارای اهمیت هستند، فهرست شده است.
پیشنهاد میشود برای درک کامل، این نکات چند بار مطالعه شوند.
- کار باید با طرحریزی آغاز شود.
- باید از درک مسئله اطمینان حاصل شود.
- اگر چیزی کار نمیکند، باید پیامهای خطا را بررسی کرد. این پیامها معمولاً حاوی سرنخهایی هستند که به پیدا کردن مشکل کمک میکنند.
- همیشه باید جهت دستیابی به یک راهکار مناسب قدم به قدم جلو رفت.
- برای رسیدن به راهحل، میتوان از دادههای موقت و نمونه استفاده کرد.
- میتوان مسئله را به یک کارخانه اتومبیلسازی تشبیه کرد. در هر مرحله، محصول به یک اتومبیل کامل نزدیکتر میشود. هر مرحله یک هدف مشخص دارد.
- بهتر است مراحل بزرگ به گامهای کوچکتر تجزیه شوند.
- باید تمرینات قبلی را به یاد داشته و بر اساس تجربیات کسب شده قرینهسازی انجام داد.
- در روبی میتوان از IRB به نفع خود استفاده کرده و چیزهای لازم را در این محیط ایزوله شده آزمایش کرد.
- میتوان به صورت «وارونه» عمل کرد. یعنی راهحل را برای یک نمونه یافت و سپس با استفاده از حلقه آنرا به همه نمونهها بسط داد.
- در صورتی که کدنویسی به صورت مستقیم در داخل یک فایل انجام میشود، بهتر است کدها را به طور مرتب اجرا کرد تا خطاها به موقع مشخص شوند.
- قرار نیست یک فرد همه چیز را بداند. کمک گرفتن از گوگل و مستندات روبی هیچ اشکالی ندارد. حتی پس از سالها تجربه، «جستجو و پرسش» بخشی از شغل یک برنامهنویس است. بنابراین باید به آن عادت کرد.
- جزئیات اهمیت دارند. یک پرانتز کمتر، یک اشتباه نوشتاری یا استفاده از نوع داده (کلاس روبی) اشتباه میتواند باعث شود که برنامه با خطا مواجه شده و کار نکند.
در ادامه آموزش روبی به بحث پیرامون مدیریت خطا پرداخته شده است.
چطور میتوان در روبی پیامهای خطا را مدیریت کرد؟
پیامهای خطا در راستای یافتن مشکل و رفع آن به برنامهنویس کمک میکنند. در اکثر مواقع پیام خطا حاوی اطلاعاتی برای کمک به کاربر در رفع مشکل است. باید در یک پیام خطا دو چیز را جستجو کرد:
- خطا در کجا اتفاق افتاده است؟
- خطا از چه نوعی است؟
به عنوان مثال، ممکن است خطایی مشابه کد زیر دریافت شود:
1exception.rb:7:in 'bar': undefined local variable or method 'bacon'
2 from exception.rb:3:in 'foo'
3 from exception.rb:10:in 'main'
در پیام خطای بالا، میتوان دریافت که خطا در فایل exception.rb و سطر هفتم اتفاق افتاده است. این سرنخ مناسبی برای آغاز تحقیقات در مورد خطا است. همچنین در این پیام میتوان نوع خطا را هم متوجه شد:
1undefined local variable or method 'bacon'
این یعنی برنامهنویس سعی داشته از چیزی به نام «bacon» استفاده کند، اما روبی نمیتواند چیزی را با این اسم بیابد. امکان دارد که برنامهنویس یک غلط املایی داشته یا شاید هم فراموش کرده است که متغیر bacon را ایجاد کند. یک خطای رایج دیگر نیز به صورت زیر است:
1undefined method `foo` for nil:NilClass (NoMethodError)
این خطا زمانی رخ میدهد که کدنویس سعی دارد یک متد را روی nil (هیچ چیز) فراخوانی کند. بسیاری از دستورات روبی (متدهای روبی) وقتی نمیتوانند آنچه برنامهنویس به دنبالش است را پیدا کنند، مقدار nil را بازمیگردانند. به عنوان مثال اگر آرایهای به صورت زیر وجود داشته باشد:
1letters = ['a', 'b', 'c']
اگر سعی در دسترسی به آن با یک اندیس مفرد به صورت زیر وجود داشته باشد:
1letters[5]
روبی امکان انجام چنین کاری را به برنامهنویس میدهد اما پاسخ دریافتی، nil خواهد بود. سپس، اگر کدنویس سعی کند با آن مقدار دریافتی کاری انجام بدهد:
1letters[5].foo
خطای «Undefined Method» به وجود میآید که قبلاً در بالا نمایش داده شد. در دستور بالا، مقدار letters[5] معادل nil خواهد بود. زیرا آرایه «letters» تنها سه عضو دارد و بنابراین، امکان دسترسی به عنصر با اندیس شماره 5 وجود نخواهد داشت. لازم به توضیح است که هیچ متدی به نام foo در روبی وجود ندارد و اصطلاح «foo» به معنی «فلان» و در اینجا به معنی «فلان متد اعمال شده روی یک متغیر» است.
در صورت مواجه شدن با خطای «Undefined Method» و برای رفع آن، باید مشخص شود که آیا خطا به خاطر متد است یا به خاطر nil بودن متغیری که متد روی آن اعمال شده است؟ یک راه برای رسیدن به پاسخ این سوال به این صورت است که بررسی شود آیا مقدار متغیر nil هست یا خیر؟ برای این کار، میتوان از شرط if به صورت زیر استفاده کرد:
1if letters[5]
2 letters[5].foo
3end
در صورت مواجه شدن با یک خطای ناشناخته، همواره میتوان آن را در گوگل جستجو کرده و سرنخهایی را برای نحوه رفع آن یافت. در ادامه آموزش روبی، فیلم آموزش روبی برای یادگیری روبی به صورت کاملتر، معرفی شده است.
جمعبندی
زبان برنامه نویسی روبی یک زبان اسکریپتنویسی سات که نحوی آسان دارد. کاربرد اصلی این زبان در توسعه وب است. با توجه به رشد چشمگیر صنعت وب، یادگیری و آموزش زبان روبی بسیار اهمیت دارد. بدین ترتیب، آموزش روبی در این نوشتار برای شروع به کار با آن به طور جامع ارائه شده است. همانطور که بیان شد، آموزش روبی در این مطلب تنها برای شروع روند آموزش فراهم شده است.
بنابراین، باید مباحث بسیاری از جمله ساختارهای کنترلی ارائه شده در روبی، کاربرد بلوکها و سایر موارد فرا گرفته شود. در این راستا، میتوان از مستندات رسمی روبی، فیلمهای آموزش روبی و سایر منابع موجود استفاده کرد. با توجه به محبوبیت و ویژگیهای قابل توجه Ruby on Rails، یادگیری و شروع آموزش این فریمورک تحت وب پس از پایان آموزش روبی به علاقهمندان توصیه میشود.