
در این مقاله از آموزش کاتلین (kotlin) قرار هست با یک آپشن جذاب و پرکاربرد کاتلین آشنا شوید . برای شناخت بیشتراین ویژگی یک لیوان قهوه داغ آماده کنید و یک تکه کیک شکلاتی (هرچه بیشتر باشه بهتره 😉 ) بردارید و تا آخر این مقاله با من همراه باشید .
خب وقتی اسم از توسعه و یا گسترش یک کلاس برای استفاده از قابلیت هایش وسط میاید اولین چیزی که به ذهن شمای برنامه نویس میرسد استفادع از خاصیت ارث بری شی گرایی هست که کاملا درست هست . شما کلاسی را از کلاس دیگری ارث بری میکنید و از قابلیت هایش به طور کامل استفاده میکنید ولی خب در کاتلین ما روشی داریم که ما رو بی نیاز از ارث بری یا دستکاری آن کلاس برای گسترش آن کلاس کرده است . علاوه بر آن کد خواناتر خواهد بود. ولی چگونه ؟ْ!
بله خاصیت Extension Functions
در کاتلین ! تعریف دیگری که میتوانیم برای این ویژگی کاتلین داشته باشیم ; به تابعی اطلاق میشود که عضو یک کلاس هست ولی داخل اون کلاس تعریف نشده است، بلکه خارج از آن کلاس تعریف شده و قرار دارد !
در ادامه با یک مثال موضوع را روشن میکنم.
آموزش Extension Functions در کاتلین
فرض کنید که قرار هست متدی داشته باشید که آخرین کاراکتر یک رشته (String) رو دردریافت و عملیات خاصی را بر روی آن انجام دهد پس :
fun String.lastChar(): Char = this.get(this.length - 1)
خب همانظور که واضح هست اول کلمه کلیدی fun را مینویسیم و بعد باید کلاسی که قرار هست از آن استفاده کنیم که در اینجا String هست رو صدا میزنیم و در ادامه بعد از قرار دادن یک نقطه (.) اسم دلخواهی برای متد خود مینویسم . بعد از آن خیلی راحت با فراخوانی متد lastChar در هرجای کلاس میتوانید از آن استفاده کنید !
اگر قرار باشد که خیلی دقیق به اجزا این متد نگاه کنیم باید به این تصویر توجه کنید ! اجزای فاکشن را خواهید دید .

اگر قرار باشه کد بالا رو بدون this که نشانگر به متغیر اضافه شده به فانکشن هست باز نویسی کنید یعنی Receiver object بدون this هم نوشته میشوند که کد شما به این صورت خواهد بود :
fun String.lastChar(): Char = get(length - 1)
این نوع فانکشن ها به صورتی هستند که انگار شما آنها را در همان کلاس تعریف کردید چون شما می توانید به طور مستقیم به تمامی ویژگی و متغیر و متدهای کلاسی که توسعه دادید دست پیدا کنید .
نکته ی مهمی که وجود دارد این هست که با اینکه مکانیزم این فانکشن مثل فانکشن های همان کلاس هست ولی نمیتوانید به توابع و متغیر هایprivate و protected آن کلاس دسترسی پیدا کنید .
نکته آخری که لازم دانستم یادآوری کنم داستان ایمپورت کردن این فانکشن برای استفاده از آن است که به این صورت انجام میشود :
import strings.* یا import strings.lastChar یا import strings.lastChar as last
خب به نظراین نکات برای این مقاله کافی باشد . در ادامه حتما با کاتلین بیشتر کار خواهیم داشت و مقالات مربوط کاتلین را در وبلاگ اندروید ریور خواهیم داشت .
سنا عبادی CO-Founder نویسنده مقاله
توسعه دهنده موبایل به ویژه سیستم عامل اندروید ، هم بنیانگذار اندروید ریور و در تلاش برای تحقق یک رویا..
نگارش کد بلند یا نگارش بخش عمده یک سورس کد :