چیزهای غافلگیر کننده
با وجود اینکه طراحی روبی بر اصل عدم غافلگیری استوار است ، بطور طبیعی برخی امکانات آن از زبانهایی مانند سی و پرل متفاوت است:
- نامهایی که با حرف بزرگ شروع میشوند به عنوان ثابت (constant) در نظر گرفته میشوند، بنابراین متغیرهای محلی بایستی با حروف کوچک آغاز شوند.
- به منظور وضوح مقادیر اعشاری (float) ، بایستی با یک صفر بعد از نقطه مشخص شوند (99.0) یا اینکه از یک تبدیل صریح (99.to_f) استفاده شود. تنها اضافه کردن یک نقطه بعد از عدد (.99) کافی نیست زیرا در این حالت اعداد مستعد پذیرش بهعنوان یک متد هستند.
- مقادیر بولین اطلاعات غیر بولین سخت گیرانه هستند: 0 ، “” و [] برابر با true هستند. در سی عبارت 0 : 1 ? 0 برابر با صفر (همان false) است در حالیکه در روبی نتیجه آن 1 است زیرا تمام اعداد برابر true هستند و فقط nil و false برابر false هستند. یک نتیجه فرعی از این عمل آنست که در روبی متدها بر طبق قرارداد -- برای مثال یک جستجوی regular-expression – در صورت موفقیت اعداد، رشته ها، لیستها یا سایر مقادیر غیر false را بر میگردانند، و در صورت شکست nil برمیگردانند. این قرارداد در اسمالتاک هم بکار میرود که تنها اشیا مخصوص true و false میتوانند در عبارات بولین استفاده شوند.
- در نسخههای ماقبل از 1.9 عدم وجود نوع داده کاراکتر (در مقایسه با سی که نوع داده char را برای کاراکترها داراست) ممکن غافلگیر کننده باشد. در هنگام بریدن رشتهها [0]“abc” مقدار 97 را برمیگرداند (یک integer که شماره کد اسکی اولین حرف رشته است.)، برای بدست آوردن “a” باید از [0,1]“abc” (یک زیر رشته بطول 1) یا "abc"[0].chr استفاده کرد.
در ضمن برخی مسائل در مورد خود زبان برجسته است:
- در مورد سرعت، عملکرد روبی در قیاس با بسیاری از زبانهای کامپایل شده پایین تر است (همانند هر زبان تفسیر شده دیگر) و همچنین در قیاس با زبانهای اسکریپت نویسی اصلی مانند پرل و پایتون همین حالت وجود دارد. هرچند که در نسخههای آینده روبی بصورت بایت کد (bytecode) کامپایل خواهد شد و بر روی YARV (خلاصه Yet Another Ruby VM) اجرا خواهد شد. در حال حاضر حافظه بکار رفته در برنامههای نوشته شده در روبی کمتر از حافظه بکار رفته در همان برنامهها که با پرل و پایتون نوشته شده اند، است.
- حذف پارانتزهای متدها در روبی ممکن است به نتایج غیر منتظرهای در متدهایی با چند آرگومان منتج شود. توجه کنید که توسعه دهندگان روبی اشاره کرده اند که حذف پارانتزها در متدهایی با چند آرگومان در آینده ممنوع خواهد شد. در هر صورت حذف پارانتزها در متدهای تک آرگومان توصیه میشود.