آموزش روبی

در این صفحه می خوانید:

معرفی زبان روبی (Ruby)

روبی یک زبان برنامه نویسی تفسیر شده، سطح بالا و همه منظوره و زبان شی گرا خالص است. روبی دارای سینتکس مشابهی با بسیاری از زبان های برنامه نویسی مانند سی (C) و جاوا (Java) است، بنابراین برنامه نویسان جاوا و C برای یادگیری راحت هستند. عمدتا از تمامی سیستم عامل هایی مانند ویندوز، مک، لینوکس پشتیبانی می کند. به تعبیر دیگر یک زبان اسکریپت تفسیری است که بدون اینکه برنامه را به دستورالعمل های زبان ماشین کامپایل کند در بسیاری از پیاده سازی های آن مستقیما و آزادانه دستورات را اجرا می کند. برنامه نویسان روبی نیز به RubyGems قدرتمند دسترسی دارند که یک فرمت استاندارد برای برنامه های Ruby و کتابخانه ها را فراهم می کند. شرکت هایی مانند توییتر و Soundcloud، Goodreads و Kickstarter در زمینه محصولات خود از روبی استفاده می کنند.

ماتسوموتو گفته است که روبی برای افزایش بهره وری برنامه نویسان و سرگرمی طراحی شده است و به دنبال اصول طراحی رابط کاربری خوب است. در بحث Google Tech در سال 2008، ماتسوموتو همچنین اظهار داشت: "امیدوارم روبی به هر برنامه نویس در جهان کمک کند تا تولید کننده شود و از برنامه نویسی لذت ببرد و خوشحال شود. این هدف اولیه زبان روبی است." او همچنین تاکید می کند که طراحی سیستم ها نیاز به تاکید بر نیازهای انسانی دارد نه کامپیوتر. اغلب مردم، به ویژه مهندسان کامپیوتر، بر روی ماشین ها تمرکز می کنند. آنها فکر می کنند، با انجام این کار، ماشین با سرعت بیشتری کار می کند و دستگاه به طور موثر تر به اجرا در خواهد آمد." آنها روی ماشین ها تمرکز می کنند. اما در حقیقت، ما باید بر انسان ها تمرکز کنیم و اینکه چگونه انسان ها را در مورد برنامه نویسی یا کارکرد دستگاه ها سرپرستی کنیم. ما اساتید هستیم و ماشین ها خدمه هستند.

تاریخچه زبان روبی (Ruby)

روبی توسط Yukihiro Matsumoto یا "ماتس" در ژاپن در اواسط دهه 1990 ایجاد شد. این برنامه برای بهره وری بیشتر برنامه نویس طراحی شده است و این ایده که برنامه نویسی برای برنامه نویس ها باید سرگرم کننده باشد. Ruby همچنان محبوبیت خود را برای استفاده از آن در توسعه برنامه های وب افزایش می دهد. فریمورک روبی آن ریلز ساخته شده با زبان روبی توسط دیوید هانسون، لذت برنامه نویسی در روبی را به بسیاری از مردم معرفی کرد. روبی دارای یک جامعه پر جنب و جوش است که از مبتدی ها حمایت می کند و مشتاق تولید کد با کیفیت بالا است.

معماری زبان روبی (Ruby)

نحو روبی عموما شبیه پرل و پایتون است. تعریف کلاس ها و متد ها توسط کلمات کلیدی انجام می شوند. بارزترین تفاوت روبی از سی و پرل این است که کلمات کلیدی (بجای براکت) برای تعریف بلوک‌های کد استفاده می‌شوند. در مقایسه با پرل متغیرها الزاماً با یک علامت خاص شروع نمی‌شوند و وقتی از چنین علائمی استفاده شود علامت حوزه دید متغیر را تغییر می‌دهد. همچنین برای مقاصد عملی، تفاوت بین expressions و statements وجود ندارد. سطر جدید به‌عنوان پایان یک جمله بکار برده می‌شود در حالی که برای این کار می‌توان از یک سمی کالون (;) نیز استفاده کرد. تورفتگی‌ها بر خلاف پایتون معنی خاصی ندارند.

یکی از تفاوت ها با پایتون و پرل این است که روبی تمام متغیرهای نمونه خود را به طور کامل به کلاس نگه می دارد و تنها از طریق روش های دسترسی attr_writer، attr_reader و غیره آنها را به نمایش می گذارد. بر خلاف روش های Getter و Setter در زبان های دیگر مانند ++C و جاوا روش های دسترسی در روبی را می توان با استفاده از یک خط کد از طریق metaprogramming ایجاد کرد. با این حال روش های دسترسی می توانند به صورت سنتی ++C و جاوا نیز ایجاد شوند. طراحی روبی باعث شده است همه متغیرهای نمونه به صورت خصوصی باشند، بلکه یک راه ساده برای اعلام مجموعه و دریافت روش ها را فراهم می کند. این در راستا این ایده مطرح می شود که در روبی، هرگز به طور مستقیم به اعضای داخلی یک کلاس از خارج از کلاس دست نخواهد یافت و در عوض، یک پیام به کلاس می فرستد و یک پاسخ دریافت می کند.

ویژگی های زبان روبی (Ruby)

با وجود اینکه طراحی روبی بر اصل عدم غافلگیری استوار است، به‌طور طبیعی برخی امکانات آن از زبان‌هایی مانند سی و پرل متفاوت است. نام‌هایی که با حرف بزرگ شروع می‌شوند به عنوان ثابت (constant) در نظر گرفته می‌شوند، بنابراین متغیرهای محلی بایستی با حروف کوچک آغاز شوند. در مورد سرعت، عملکرد روبی در قیاس با بسیاری از زبان‌های کامپایل شده پایین‌تر است (همانند هر زبان تفسیر شده دیگر) و همچنین در قیاس با زبان‌های اسکریپتی اصلی مانند پرل و پایتون همین حالت وجود دارد. هرچند که در نسخه‌های آینده روبی به صورت بایت کد (bytecode) کامپایل خواهد شد و بر روی YARV مخفف (Yet Another Ruby VM) اجرا خواهد شد.

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

از دیگر ویژگی های روبی می توان به موارد زیر اشاره کرد:

  • کاملاً شی گرا
  • داینامیک
  • نحو کوتاه و انعطاف‌پذیر
  • چهار سطح از حوزه دید متغیر شامل global, class ,instance ,local
  • پشتیبانی از iterators و closures بر اساس تبادل بلوک‌های کد
  • پشتیبانی محلی از regular expressions (شبیه پرل) در سطح زبان
  • سربارگزاری عملگرها
  • جمع‌آوری زباله خودکار
  • پیاده‌سازی در همه سیستم‌عامل اصلی
  • پشتیبانی شراکتی از multi-threading در تمام پلتفرم‌های با استفاده از green threads
  • پشتیبانی کامل از یونیکد و رمزنگاری‌های شخصیت چند گانه
  • کتابخانه‌های اشتراکی DLL در اکثر پلتفرمها
  • اتصال بومی API ها در C
  • پوسته تعاملی روبی (REPL)
  • بسته مدیریت متمرکز از طریق RubyGems
  • کتابخانه استاندارد بزرگ
  • قابلیت continuations و generators

مفاهیم زبان روبی (Ruby)

روبی شی گرا است: هر مقدار یک شی است، از جمله کلاس ها و نمونه هایی از مواردی که بسیاری از زبان های دیگر آنها را بدوی معرفی می کنند (مانند عدد صحیح، بولین و "تهی"). متغیرها همیشه به اشیاء اشاره می کنند. هر تابع یک متد است و متد ها همیشه به یک شی اشاره می کنند. متد های تعریف شده در سطح بالا تبدیل به متد هایی برای کلاس Object می شوند. از آنجا که این کلاس اجداد هر کلاس دیگر است، چنین متد هایی را می توان در هر شی فراخوانی کرد. آنها همچنین در همه scope ها قابل مشاهده هستند، و به طور مؤثر به عنوان متد "گلوبال" عمل می کنند. روبی از وراثت با متد اعزام پویا، mixins و روش های مجرد پشتیبانی می کند (متعلق به آن است و به جای اینکه در کلاس تعریف شود، یک نمونه واحد است). گرچه روبی از وراثت چندگانه پشتیبانی نمی کند، کلاس ها می توانند ماژول ها را به عنوان mixins وارد کنند.

روبی به عنوان یک زبان برنامه نویسی چند پارادایم توصیف شده است: این برنامه نویسی رویه ای را میسر می سازد (تعیین توابع / متغیرهای خارج از کلاس باعث می شود تا آنها بخشی از ریشه شوند، "خود" شی) با برنامه نویسی شی گرا (همه چیز یک شی باشد) یا برنامه نویسی تابعی باشد. این زبان از introspection،reflection و metaprogramming و همچنین پشتیبانی از موضوعات مبتنی بر interpreter پشتیبانی می کند. Ruby از تایپ پویا برخوردار است و از چند شکلی پارامتری پشتیبانی می کند. سینتکس Ruby، شبیه به پرل است و از لحاظ معنایی مشابه Smalltalk است، اما با پایتون تفاوت زیادی دارد.

کاربرد زبان روبی (Ruby)

Ruby بیشتر برای ساخت برنامه های وب استفاده می شود. با این حال، بنابراین بسیاری از کاربردهای دیگر مانند تحلیل داده (Data Analysis)، نمونه سازی اولیه و اثبات مفاهیم را دارد. احتمالاً بارزترین پیاده سازی از روبی فریمورک وب روبی آن ریلز است که با Ruby ساخته شده است. Homebrew، ابزاری بسیار محبوب برای نصب بسته های نرم افزاری بر روی macOS، همچنین در روبی نوشته شده است. نرم افزار امنیتی Metasploit نیز وجود دارد که به شما امکان می دهد وب سایت ها و برنامه های کاربردی را برای چگونگی دستیابی به آنها به آسانی آزمایش کنید.

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

مزایا و معایب زبان روبی (Ruby)

Ruby یک زبان برنامه نویسی همه منظوره است که برای ساختن وب سایت های بزرگی مانند گیت هاب (GitHub) و Shopify استفاده شده است.

مزایای زبان روبی (Ruby)

  • سینتکس

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

  • فرآیند توسعه سریع با Gems

Ruby gems کتابخانه های گسترده ای هستند که عملکردهای خاصی را برای برنامه های وب شما ایجاد می کنند. تقریباً برای هر کار می توانید یک راه حل مناسب پیدا کنید. در نتیجه، آنها زمان لازم برای توسعه وب را به میزان قابل توجهی کاهش می دهند. هم اکنون 153،841 gems وجود دارد و این تعداد مرتبا در حال رشد است.

  • جامعه مشتاق

این یکی از ویژگی های بارز روبی است. اعضای فعال دائم در حال نوشتن راهنماهای فنی دقیق و ایجاد درس هستند. آنها همچنین کنفرانس ها و جلسات مختلفی را برگزار می کنند که در آن رمزگذارها می توانند تجربه خود را به اشتراک بگذارند و به یافتن بهترین راه حل برای موضوعات پروژه شما کمک می کنند.

  • روبی زبانی شی گرا است.

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

معایب زبان روبی (Ruby)

  • محبوبیت کمتری در مقایسه با سایر زبان های برنامه نویسی دارد.
  • تعداد توسعه دهندگان روبی به طور پیوسته در حال افزایش است. با این حال، این زبان برنامه نویسی هنوز در پشت Java و PHP قرار دارد.
  • سرعت اجرا کند است.

تحلیل داده (Data Analysis) با روبی (Ruby)

تحلیل داده (Data Analysis)

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

daru (تجزیه و تحلیل داده ها در Ruby) یک کتابخانه برای ذخیره سازی، تجزیه و تحلیل، دستکاری و ویژوال سازی داده ها در روبی است.

نمونه کد های زبان روبی (Ruby)

مثال کلاسیک Hello world:

 puts "Hello World!"

ایجاد و استفاده از یک آرایه:

a = [1, 'hi', 3.14, 1, 2, [4, 5]]
 a[2]                      # 3.14
 a.reverse                 # [[4, 5], 2, 1, 3.14, 'hi', 1]
 a.flatten.uniq            # [1, 'hi', 3.14, 2, 4, 5]

کد زیر یک کلاس بنام Person را تعریف می‌کند.

class Person
   def initialize(name, age)
     @name, @age = name, age
   end

def <=>(person) @age <=> person.age end

def to_s "#{@name} (#{@age})" end

attr_reader :name, :age end

group = [ Person.new("John", 20), Person.new("Markus", 63), Person.new("Ash", 16) ]

puts group.sort.reverse

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود