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

با توجه به اینکه زبان برنامه نویسی Scala می تواند نوع بازگشتی یک تابع را با قابلیت Type inference در زمان کامپایل بدست بیاورد، چرا برای توابع بازگشتی نمی تواند این کار را انجام دهد و مقدار خروجی توابع بازگشتی حتما باید ذکر شود؟

1 پاسخ

+1 امتیاز
قبل توسط (1.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ
  • اسکالا یک زبان استاتیک هست یعنی نوع هر متغیر به اسم متغیر bind میشه و نه به مقدارش (برخلاف زبان های dynamic type ).
  • کامپایلر وقتی به یک عمل مقدار دهی اولیه (جایی که Type inference رخ میده) میرسه عبارت سمت راست رو ارزیابی نوع می کنه و نوع رو تشخیص میده.
  • به طور مثال اگر عبارت 5 * x باشه کامپایلر میبینه نوع x :Int و نوع 5 هم Int . تابع * هم یک نگاشت به صورت دو عدد صحیح به یک عدد صحیح هست پس کل عبارت دارای نوع Int خواهد بود.
  • اما در مورد توابع بازگشتی فرض کنید ما تابع فاکتوریل رو داریم فراخوانی می کنیم و به قسمت بازگشتی اش میرسیم به طور مثال:
i * factorial(i-1)
  • خوب نوع i که Int هست نوع i-1 هم Int هست اما نوع factorial چیه ؟!
  • دو انتخاب وجود داره یک اینکه کامپایلر بگه صبر کن من برم و به صورت بازگشتی اون تابع رو در زمان کامپایل بررسی کنم و نوعش رو بفهمم ، و یا اینکه این کار رو به عهده برنامه نویس بگذاره.
  • انتخاب اول باعث کندی کامپایل ، احیانا گیر افتادن در فراخوانی های بی پایان و یا مثلا سرریزی پشته و غیره میشه و به نظر من حتی این از لحاظ منطقی هم تناقض داره چون داریم کار زمان اجرا (Runtime) در زمان کامپایل انجام میدیم.
  • و به همین دلیل انتخاب اسکالا گزینه دومه

سوالات مشابه

0 امتیاز
1 پاسخ 1.9هزار بازدید
0 امتیاز
1 پاسخ 455 بازدید
0 امتیاز
1 پاسخ 331 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 539 بازدید
0 امتیاز
1 پاسخ 1.4هزار بازدید
...