+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

کاربرد عملگر  => در زمان تغریف پارامتر برای تابع در Scala چیست:

def first(x: Int, y: Int)

و

def constOne(x: Int, y: => Int)

1 پاسخ

+2 امتیاز
قبل توسط (1.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

در اسکالا دوجور فراخوانی تابع داریم :

  • Call By Value : فراخوانی با مقدار که مقدار آرگومان به پارامتر منتقل میشه. پارامتر هایی که به صورت زیر تعریف می شند CBV هستند؛
def first(x: Int, y: Int)
  • Call By Name : فراخوانی با نام که هر عبارت یا متغیری که به عنوان آرگومان پاس داده میشه عینا در پارامتر جایگزین میشه برای مشخص کردن پارامتر هایی که باید CBN باشند از علامت => قبل نوعشون استفاده میشه به طور مثال :
def constOne(x: Int, y: => Int)

کاربرد :

برخی جاها CBV بهینه تر هست و برخی جاها CBN ، به عنوان مثال اگه ما یک تابع برای محاسبه توان n  داشته باشیم که دو تا پارامتر داشته باشه اولی برای پایه و دومی توان . پارامتر اولی رو CBV فرض کنید و مقدارشم 1 در نظر بگیرید برای پارامتر دوم :

  • یکبار CBV فرض کنید و به عنوان آرگومان یک عبارت پیچیده ریاضی رو بهش پاس بدید ، اسکالا قبل فراخوانی تابع مجبوره مقدار اون عبارت پیچیده رو محاسبه کنه و بعد به تابع پاس بده، با این حال که همه ما می دونیم وقتی پایه 1 هست توان هرچی باشه جواب یک خواهد بود ولی با این حال مجبور به محاسبه اون عبارته.
  • یکبار CBN فرض کنید و به عنوان آرگومان یک عبارت پیچیده ریاضی رو بهش پاس بدید ، اسکالا تمام اون عبارت رو به درون تابع پاس خواهد داد بدون محاسببه کردن مقدار حالا اگر شما یک شرط برای پایه یک در تابع گذاشته باشید که بدون محاسبه جواب 1 رو برگردونه در این حالت شما بدون محاسبه توان جواب رو بدست آورید و باعث افزایش کارایی برنامه شدید.

سوالات مشابه

0 امتیاز
1 پاسخ 316 بازدید
0 امتیاز
1 پاسخ 462 بازدید
+2 امتیاز
2 پاسخ 294 بازدید
0 امتیاز
1 پاسخ 552 بازدید
0 امتیاز
1 پاسخ 381 بازدید
0 امتیاز
1 پاسخ 230 بازدید
+1 امتیاز
1 پاسخ 253 بازدید
...