سربارگذاری توابع

سربارگذاری توابع یا Function Overloading، به شما اجازه می‌دهد که، دو یا چند تابع با نام یکسان تعریف کنید که، دارای امضا و تعداد پارامترهای مختلف هستند. برنامه از روی آرگومانهایی که شما به تابع ارسال می‌کنید به صورت خودکار تشخیص می‌دهد که، کدام تابع را فراخوانی کرده‌اید، یا کدام تابع مد نظر شماست. امضای یک تابع نشان دهنده ترتیب و نوع پارامترهای آن است. به مثال زیر توجه کنید :

fun myFunction(x: Int, y: Double z: String)

که امضای تابع بالا

myFunction(Int, Double , String)

به این نکته توجه کنید که نوع برگشتی و نام پارامترها شامل امضای تابع نمی‌شوند. در مثال زیر نمونه‌ای از سربارگذاری توابع آمده است.

  1: fun showMessage(number: Double)
  2: {
  3:     println("Double version of the method was called.")
  4: }
  5: 
  6: fun showMessage(number: Int)
  7: {
  8:     println("Integer version of the method was called.")
  9: }
 10: 
 11: fun main(args: Array<String>)
 12: {
 13:     showMessage(9.99)
 14:     showMessage(9)
 15: }
Double version of the method was called.
Integer version of the method was called.

در برنامه بالا دو تابع با نام مشابه تعریف شده‌اند. اگر سربارگذاری تابع توسط کاتلین پشتیبانی نمی‌شد برنامه زمان زیادی برای انتخاب یک تابع از بین توابعی که فراخوانی می‌شوند لازم داشت. رازی در نوع پارامترهای تابع نهفته است. کامپایلر بین دو یا چند تابع در صورتی فرق می‌گذارد که، پارامترهای متفاوتی داشته باشند. وقتی یک تابع را فراخوانی می‌کنیم، تابع نوع آرگومانها را تشخیص می‌دهد.
در فراخوانی اول (خط 13) ما یک مقدار double را به تابع showMessage() ارسال کرده‌ایم در نتیجه تابع showMessage() (خطوط 4-1) که دارای پارامتری از نوع Double اجرا می‌شود. در بار دوم که تابع فراخوانی می‌شود (خط 14) ما یک مقدار Int را به تابع showMessage() ارسال می‌کنیم تابع showMessage() (خطوط 9-6) که دارای پارامتری از نوع Int است اجرا می‌شود. معنای اصلی سربارگذاری تابع همین است که توضیح داده شد.
هدف اصلی از سربارگذاري توابع این است که، بتوان چندین تابع که وظیفه یکسانی انجام می‌دهند، را تعریف کرد. تعداد زیادی از تابعها در جاوا، سربارگذاری می‌شوند، مانند تابع println() از کلاس out. قبلاً مشاهده کردید که این تابع می‌تواند یک آرگومان از نوع رشته دریافت کند و آن را نمایش دهد، و در حالت دیگر می‌تواند دو یا چند آرگومان قبول کند.