معرفی توابع پرکاربرد در کاتلین

کاتلین یه زبون پرقدرته که توابع زیادی هم داره اما یکی از اصلی ترین نقاط قوت کاتلین extension function ها هستن. با استفاده از این توابع شما میتونید به کلاس ها و آبجکت هایی که در کاتیلن وجود دارن قابلیت هایی رو اضافه کنید بدون اینکه تغییری توی سورس کد اون ها ایجاد بشه.توی این پست ما چند تا از تابع های خیلی ساده که کد هاتونو خواناتر و کدنویسی رو براتون آسون تر میکنه رو بررسی میکنیم و با این نوع تابع ها آشنا میشیم.https://unsplash.com/photos/azJJSiwWW90?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink ا withNotNullیکی از مسائل پرکاربردی که برنامه نویسا باهاش سروکار دارن اینه که یه عملیاتی رو اگه یه متغیری Null نیست انجام بدن. این تابع کار رو اسون تر میکنه و فقط وقتی کدها اجرا میشه که متغیر Null نباشه.inline fun <T : Any, R> T?.withNotNull(block: (T) -> R): R? { return this?.let(block) }نحوه استفاده : val nullableValue: String? = null nullableValue.withNotNull { value -> // کد های اینجا زمانی اجرا میشه که متغیر نال نباشه }ا toLiveDataبا این تابع میتونید یه Flow رو به LiveData تبدیل کنیدfun <T> Flow<T>.toLiveData(): LiveData<T> { return liveData { collect { emit(it) } } }نحوه استفاده:val flow = flowOf(&quotHello&quot, &quotWorld&quot) val liveData = flow.toLiveData()ا toFormattedStringاگه میخواین عدد هاتونو یا یه تاریخ رو فرمت کنید میتونید از این تابع استفاده کنیدfun Int.toFormattedString(): String { return NumberFormat.getInstance().format(this) } fun Long.toFormattedString(): String { return NumberFormat.getInstance().format(this) } fun Date.toFormattedString(): String { return SimpleDateFormat.getDateInstance().format(this) }نحوه استفاده:val number = 1000000 val formattedNumber = number.toFormattedString()ا debounceبا این تابع میتونید کاری کنید که عملیاتی که میخواید انجام بشه فقط در صورت اجرا بشه که مدت زمان معینی از اخرین اجراش گذشته باشه. برای مثال فقط درصورتی کد های مربوط به کلیک دکمه اجرا بشه که از اخرین کلیک 500 میلی ثانیه گذشته باشه.fun View.onClick(debounceDuration: Long = 300L, action: (View) -> Unit) { setOnClickListener(DebouncedOnClickListener(debounceDuration) { action(it) }) } private class DebouncedOnClickListener( private val debounceDuration: Long, private val clickAction: (View) -> Unit ) : View.OnClickListener { private var lastClickTime: Long = 0 override fun onClick(v: View) { val now = SystemClock.elapsedRealtime() if (now - lastClickTime >= debounceDuration) { lastClickTime = now clickAction(v) } } }نحوه استفاده:button.onClick(debounceDuration = 500L) { // کد زمانی اجرا میشه که از اخرین کلیک 500 میلی ثانیه گذشته باشه}ا toBitmapاگه میخواین یه Drawable رو به Bitmap تبدیل کنید این تابع به کمکتون میاد.fun Drawable.toBitmap(): Bitmap { if (this is BitmapDrawable) { return bitmap } val bitmap = Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) setBounds(0, 0, canvas.width, canvas.height) draw(canvas) return bitmap }نحوه استفاده:val drawable = ContextCompat.getDrawable(context, R.drawable.my_drawable) val bitmap = drawable.toBitmap()ا applyIfبا این تابع کد های مربوط به یه آبجکت فقط زمانی اعمال میشن که شرط ما درست باشهinline fun <T> T.applyIf(condition: Boolean, block: T.() -> Unit): T { return if (condition) { this.apply(block) } else { this } }نحوه استفاده:val number = 5 val formattedNumber = number.applyIf(number > 10) { toFormattedString() }به طور خلاصه با کاتلین میتونید تعداد زیادی از این جور چیزا رو بنویسید و توی زمانتون صرفه جویی و کد هاتونو هم خواناتر کنید.این پست از اینجا ترجمه شده. اگه ترجمه های دیگه ای در مورد اندروید میخواید میتونید برام اینجا کامنت کنید. اگه خوشتون اومد لایک یادتون نره و همچنین میتونید با استفاده از این لینک برام یه قهوه بخرید :) ❤️ بدرود .