تکرار مکررات در روبی؛ چرا؟

ruby

#1

سلام. من تازه شروع کردم که روبی رو یاد بگیرم و از وقتی در مورد کلیدواژه های روبی خوندم، یه سوالی به ذهنم اومده که ترجیح دادم از متخصصای روبی بپرسم؛
بعضی از کلیدواژه ها توی روبی هستن که واقعا کاربرد اونها رو درک نمیکنم، مثلا until که دقیقا مساوی ()! while هست! یا مشابه همین، unless که میشه ()! if خب چرا؟ چه چیزی در مورد این تفاوت عملکرد مهم بوده که سازندگان روبی تصمیم گرفتن این عبارت های (به تعبیر من که قبلا جاواسکریپت کار کردم :smile:) بی‌فایده رو اضافه کنن! حتی next و redo که عملکرد متفاوتی دارن و خیلی شبیه نیستن رو هم میشه راحت به جای هم استفاده کرد! چرا مثلا فقط یه چیزی مثل continue نزاشتن؟
از نگاه یه تازه‌وارد این کلیدواژه ها فقط کد رو سخت تر میکنن، از نظر شما چطور؟


#2

فکر می کنم بیشتر هدف خوانایی کد بوده اما ممکن اشتباه کنم.


#3

در هر زبانی هم syntactic sugar وجود داره و هم alias، بنظر من unless خیلی از if not taht یا if ! () خوانا تره. در ضمن unless اصلا جایگزین اونها نیست چون if negative … یک expression ترکیبی هست، مثل اینه که بگیم و قتی 4 وجود داره چرا ۲ + ۲ هم هست.
پس بیشتر برای خوانا بودن بوده‌ که گاهی باعث گیج شدن هم میشه، مثلا reduce و inject هم در روبی یک کارو انجام میدن که البته inject فقط یک alias هست. بعضی از alias ها هم انگار فقط به این دلیل وجود داره که بروز رسانی روبی برای کد های قدیمی ساده تر باشه.
متوجه اون قسمت که گفتین باید به جای redo و next فقط continue میزاشتن نشدم راستش، چرا باید این کارو میکردن؟

راستش هیچ کدام بنظر واقعا بی فایده نمیاد.


#4

نه منظورم این نبود که بی فایده ان
منظورم اینه که میشد کلیدواژه ها کمتر باشن تا موقع دیدن کد روبی نگیم «اَاَاَاَاَاَاَاَاَ چقدر فیچر دارهههه» :)) مثلا شما گو رو ببینید، کلا تمرکزش روی خوانایی کده، برای همین تعداد کلیدواژه هاش خیلی خیلی کمه!
کلا میگم هر کدوم اینها میتونستن به جای هم استفاده شن نه این که بی فایده باشن
بعدم بحث ۲+۲ و ۴ خیلی با این بحث فرق داره :no_mouth:


#5

طبق تجربه من روبی بیشتر سعی میکنه کد مثل متن کتاب خوانده بشه و به همین دلیل لغات کمک کننده به خوانایی داره
کد روبی در مقابل go بسیار راحت تر خوانده میشه


#6

نههه گفتی بی فایدست، دیگه نمیشه کاریش کرد :grin:
من سعی میکنم گو رو با روبی مقایسه نکنم چون دوتا موجود کاملا متفاوت هستند، اصلا تمرکز گو روی کوچک بودن زبان هست و قصدشون این بوده که تا جایی که میشه زود بشه یادش گرفت، اما موضوع سرعت یادگیری جور دیگه ای در روبی حل شده.
اما خب به هر حال هیچ چیزی بی اشکال نیست :hugs:


#7

روبی هزاران عیب داره ولی پیچیده بودن را نمیشه به روبی نسبت داد


#8

موافقم
کلا روبی زبون خیلی باحالیه (برعکس گو :smile:)
تا قبل روبی فکر میکردم جاوااسکریپت زبونیه که هر نوعی با هر چارچوبی که دلت میخواد میتونی باهاش برنامه بنویسی، حالا روبی انگار خیلی بیشتر این وضعیت توش مشاهده میشه، خیلی خوشم اومده ازش.


#9

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


#10

راستش گو هم ضعف های زیادی داره اما خب مدرنتره، من شخصا گزینه های زیاد دیگه ای دارم و گو در لیستم نیست مگر اینکه تصمیم گیری با من نباشه.


#11

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


#12

من که اتفاقاً از until و unless استفاده میکنم بجای نقیض if و while
و درمورد Go برای من اصلاً خواناتر نیست. اصلاً هم خوشم نمیاد ازش


#13

گو خوانا نیست، خیلی تمیزه! و سریع الیادگیری :))


#14

ضمن اینکه منظور من این نبود که استفاده ندارن، میشد به جای زیاد کردن کلمه های کلیدی، مثل بقیه زبان ها فقط از همون if و while استفاده بشه و این چیزی که میگن که یادگیری روبی زمانبره، پیش نیاد یا حداقل کمتر بشه (یعنی سریع تر بشه یادش گرفت)


#15

اینکه زمانبره من فکر کنم بخاطر طراحیش و syntaxش هم هست که متفاوته…
فکر کنم کسی که پایتون کار کرده خیلی راحت میتونه با گو کار کنه… خیلی راحت تر C یاد بگیره تا Erlang…
من خودم این مشکل را داشتم


#16

خب نه سینتکسش شبیه پرله و خیلی از زبون های دیگه
اما خب سینتکس یه قسمت محدودیه
نهایت میفهمیم آخر هر چیزی یه end بزاریم حله دیگه
یا مثلا سمی کالن اختیاریه یا چیزایی از این دست
قابلیتای زیاد روبی و امکانات گسترده اون باعث میشه یادگیریش زمان بر باشه به نظر من
اینکه هر جزئیش چه مفهومی داره و چه کاری میکنه و این مسائل
مثلا جدیدا یه عملگر اضافه شده به روبی که به غامض ترین شکله ولی شکلش مهم نیست، مهم استفاده شه که خیلی عجیبه
توی این لینک توضیحش داده:


#17

روبی و پایتان خیلی شبیه هم هستند Syntax روبی هم یکی از ساده ترین سینتکس های موجوده چند تا alias مثل unless دلیل بر پیچیدگی سینتکس نیست

اگه شما یک تدریس روبی خوب بخونید تو ۱ ساعت فرق do , hash ,… همه آشکار میشه


#18

روبی و perl شباهت هایی دارند اما این شباهت ها کمتر در زمینه syntax هست


#19

درسته. یه نتیجه گیری اشتباه در مورد موضوعی داشتم و فکر کردم که پرل زبان مادر (از نظر سینتکس) برای روبی حساب میشه.
ممنون از تذکرتون.