تابع در روبی: دستور خودت را بساز
وقتی یک کار چند بار در برنامه تکرار میشود، میتوان آن را یک بار با def تعریف کرد و ربات روبی را با یک اسم صدا زد.
تابع چه کار میکند؟
def یک اسم تازه برای چند دستور میسازد. وقتی بعدا آن اسم را با پرانتز صدا بزنید، روبی همهی دستورهای بدنه را همانجا اجرا میکند. تابع میتواند ورودی هم بگیرد؛ مثلا def square(size): و بعد square(3) که در بدنه، size برابر ۳ میشود.
تابع باید قبل از صدا زدن تعریف شده باشد؛ یعنی def بالاتر از جایی بیاید که صدایش میزنید. اگر تابعی بیپایان خودش را صدا بزند، بعد از ۴۰ لایه پیام «تابع … خودش را بینهایت صدا میزند» نشان داده میشود. مقدار قبلی متغیرهای هماسم ورودی هم بعد از پایان تابع برمیگردد.
شکل بلوکی و شکل کد
تابع یک ساختار حالت کد است و بلوک جداگانه ندارد. هم شکل انگلیسی و هم فارسی پذیرفته میشود.
- ✅ بدون ورودی: def turn_around(): و بدنه با تورفتگی
- ✅ با ورودی: def square(size):
- ✅ صدا زدن: turn_around() یا square(3)
- ✅ فارسی: تعریف برگرد():
یک مثال کوچک با ربات روبی
تابع مربع: def square(size): و در بدنه repeat(4): با forward(size) و right. حالا با start_paint("blue")، square(2)، forward(3) و square(4) روبی دو مربع با اندازههای متفاوت میکشد. یک بار تعریف، چند بار استفاده.
تابع بدون ورودی هم کاربرد زیادی دارد؛ مثلا def turn_around(): با بدنهی right و right. از این به بعد هر جا لازم بود روبی برگردد، فقط turn_around() مینویسید و برنامه خواناتر میشود.
اشتباههای رایج
تعریف کردن تابع، آن را اجرا نمیکند؛ فقط آن را یاد میدهد. تا صدایش نزنید، روبی کاری نمیکند.
- ✅ صدا زدن تابع قبل از تعریف آن
- ✅ تعریف کردن و فراموش کردن صدا زدن
- ✅ تورفتگی اشتباه که دستورهای بعدی را داخل تابع میبرد
در کدام درسها و لیگها استفاده میشود؟
تابع بخشی از مسیر پیشرفتهی روبی است و در تمرینهای هفتگی لیگ ۲ فصلی به «اول تعریف، بعد صدا زدن» و تابع با ورودی اختصاص دارد. در پروژهی پایانی درس ۲۳ هم شکستن مسئله به تابعهای کوچک راهحل را خواناتر میکند.
نکته برای والدین و معلم
تابع را با دستور آشپزی مقایسه کنید: یک بار طرز تهیه را مینویسیم و هر بار فقط اسمش را میگوییم. از نوجوان بخواهید برای تابعش اسم معنادار انتخاب کند؛ اسم خوب نیمی از کد تمیز است.
سوالهای پرتکرار
آیا تابع در روبی ورودی میگیرد؟
بله، مثل def square(size): و بعد square(3).
چرا تابعم اجرا نشد؟
احتمالا آن را تعریف کردهاید اما صدا نزدهاید، یا قبل از تعریف صدایش زدهاید.
کلمهی فارسی def چیست؟
تعریف؛ مثلا تعریف برگرد():