توابع فرعی و مقادیر پیش فرض در kotlin
1397/03/03 12:35 , بهزاد ناظمی

توابع فرعی و مقادیر پیش فرض در kotlin

توابع فرعی Kotlin اجازه خواهد داد که توابع جدیدی را به کلاس های موجود اضافه کنیم که دیگر قادر به تغییر آن نخواهند بود. مثلا می توانیم یک روش جدید را به یک فعالیت اضافه کنیم که به ما اجازه می دهد یک نان تست را در یک نامگذاری بسیار ساده تر نشان دهیم:

fun Activity.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {

    Toast.makeText(this, message, duration)
.show()
}

  ما می توانیم این تابع را در هر کجا (یک فایل utils به عنوان مثال) معرفی کنیم و از آن در فعالیت های خود به عنوان یک روش معمول استفاده کنیم:

override fun onCreate(savedInstanceState: Bundle?) { 
    super<BaseActivity>.onCreate(savedInstanceState)
    
    toast("This is onCreate!!")

}

 اعلان یک تابع فرعی به آسانی اضافه کردن نام کلاس به نام تابع است. این تابع به عنوان یک ورودی به کلاس که در آن استفاده می شود اضافه می شود.

این می تواند به ما در ساده تر کردن کد کمک کند و کلاس های بسته را فراتر از حد خود قرار دهد. اما ما باید مراقب باشیم و از آنها بیش از حد استفاده نکنیم.

در انتها، این توابع معمولا کلاس های استفاده شده را تعویض می کنند. روش های سودمند ایستا هستند و نمی توانند مورد سوء استفاده قرار گیرند، بنابراین استفاده بیش از حد انها باعث تنبلی ما برای ایجاد کلاس نماینده خواهد شد .

در اینجا یک نمونه جالب دیگر است که اجازه می دهد یک مفهوم جالب دیگر را توضیح دهم:  مدل های اصلاح شده.

inline fun <reified T : Activity> Activity.navigate(id: String) {
    val intent = Intent(this, T::class.java)
    intent.putExtra("id", id)
    startActivity(intent)
}

توابع درون خطی میتوانند از انواع اصلاح شده استفاده کنند، یه این معناست که ما می توانیم کلاس را از یک نوع در داخل تابع بازیابی کنیم، به جای آن که یک نوع کلاس را به عنوان یک  متد بیان کنیم.

navigate<DetailActivity>("2")

با استفاده از مدل اصلاح شده، می توانیم یک هدف درون یک تابع ایجاد کنیم و با استفاده از یک تابع فرعی، ما می توانیم مستقیما  startActivity () را فراخوانی کنیم.

پارامترهای اختیاری و مقادیر پیش فرض

با تشکر از مقادیر پیش فرض در  متدها و تولیدکنندگان، شما هرگز نیازی بیش از حد به یک تابع ندارید. یک اعلامیه می تواند تمام نیازهای شما را برآورده کند. بازگشت به مثال توست:

fun Activity.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT){

    Toast.makeText(this, message, duration)
.show()
}

متد دوم به مدت زمان toast اشاره دارد. این یک پارامتر اختیاری است که در صورت عدم تعریف، Toast.LENGTH_SHORT را استفاده می کند. حالا شما دو راه برای تماس با این تابع دارید:

toast("Short Toast!!")
toast("Long Toast!!", Toast.LENGTH_LONG)

با توجه به نمونه دوم، می توانیم برخی از متد ها را برای انتقال به نسخه آندروید آب نبات چوبی اضافه کنیم:

inline fun <reified T : Activity> Activity.navigate(

        id: String,

        sharedView: View? = null,

        transitionName: String? = null) {
    
    
    ...

}

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

navigate<DetailActivity>("2")
navigate<DetailActivity>("2", sharedView, TRANSITION_NAME)

و حتی سوم روش، که در این وضعیت بسیار حساس نیست، اما به ما کمک می کند که یک مفهوم دیگر را درک کنیم: می توانیم از نام پارامترها برای تعیین پارامترهایی که می خواهیم تماس بگیریم، استفاده کنیم:

navigate<DetailActivity>(id = "2", transitionName = TRANSITION_NAME)

 

پارامترهای اختیاری نیز می توانند در سازنده پیش فرض مورد استفاده قرار بگیرند، بنابراین شما می توانید بارگذاری های زیادتری را در یک تعریف داشته باشید . دیدگاه های سفارشی یک مورد خاص هستند، زیرا آنها بیش از یک سازنده برای کار به درستی در جاوا نیاز به دارند.

نتیجه گیری

با استفاده از این دو ایده، می توانیم در نوشتن کد صرفه جویی کنیم و حتی کارهایی را که در جاوا غیر ممکن است را انجام دهیم. کوتلین واقعا واضح و مختصر است.

 

     برگرفته از : https://antonioleiva.com

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات