سربارگذاری توابع
سربارگذاری توابع یا Function Overloading، به شما اجازه میدهد که، دو یا چند تابع با نام یکسان تعریف کنید که، دارای امضا و تعداد پارامترهای مختلف هستند. برنامه از روی آرگومانهایی که شما به تابع ارسال میکنید به صورت خودکار تشخیص میدهد که، کدام تابع را فراخوانی کردهاید، یا کدام تابع مد نظر شماست. امضای یک تابع نشان دهنده ترتیب و نوع پارامترهای آن است. به مثال زیر توجه کنید :
func myFunction(x: Int, y: Double z: String)
که امضای تابع بالا
myFunction(Int, Double , String)
به این نکته توجه کنید که نوع برگشتی و نام پارامترها شامل امضای تابع نمیشوند. در مثال زیر نمونهای از سربارگذاری توابع آمده است.
1: func showMessage(_ number: Double) 2: { 3: print("Double version of the method was called.") 4: } 5: 6: func showMessage(_ number: Int) 7: { 8: print("Integer version of the method was called.") 9: } 10: 11: showMessage(9.99) 12: showMessage(9)
Double version of the method was called. Integer version of the method was called.
در برنامه بالا دو تابع با نام مشابه تعریف شدهاند. اگر سربارگذاری تابع توسط Swift پشتیبانی نمیشد برنامه زمان زیادی برای انتخاب یک تابع از بین توابعی که فراخوانی میشوند لازم داشت. رازی در نوع پارامترهای تابع نهفته است. کامپایلر بین دو یا چند تابع در صورتی فرق میگذارد که، پارامترهای متفاوتی داشته باشند. وقتی یک تابع را فراخوانی میکنیم، تابع نوع آرگومانها را تشخیص میدهد.
در فراخوانی اول (خط 11) ما یک مقدار Double را به تابع showMessage() ارسال کردهایم در نتیجه تابع showMessage() (خطوط 4-1) که دارای پارامتری از نوع Double اجرا میشود. در بار دوم که تابع فراخوانی میشود (خط 12) ما یک مقدار Int را به تابع showMessage() ارسال میکنیم تابع showMessage() (خطوط 9-6) که دارای پارامتری از نوع Int است اجرا میشود. معنای اصلی سربارگذاری تابع همین است که توضیح داده شد. هدف اصلی از سربارگذاري توابع این است که، بتوان چندین تابع که وظیفه یکسانی انجام میدهند، را تعریف کرد.