کاتلین یه زبون پرقدرته که توابع زیادی هم داره اما یکی از اصلی ترین نقاط قوت کاتلین extension function ها هستن. با استفاده از این توابع شما میتونید به کلاس ها و آبجکت هایی که در کاتیلن وجود دارن قابلیت هایی رو اضافه کنید بدون اینکه تغییری توی سورس کد اون ها ایجاد بشه.
توی این پست ما چند تا از تابع های خیلی ساده که کد هاتونو خواناتر و کدنویسی رو براتون آسون تر میکنه رو بررسی میکنیم و با این نوع تابع ها آشنا میشیم.
یکی از مسائل پرکاربردی که برنامه نویسا باهاش سروکار دارن اینه که یه عملیاتی رو اگه یه متغیری Null نیست انجام بدن. این تابع کار رو اسون تر میکنه و فقط وقتی کدها اجرا میشه که متغیر Null نباشه.
inline fun <T : Any, R> T?.withNotNull(block: (T) -> R): R? { return this?.let(block) }
نحوه استفاده :
val nullableValue: String? = null nullableValue.withNotNull { value -> // کد های اینجا زمانی اجرا میشه که متغیر نال نباشه }
با این تابع میتونید یه Flow رو به LiveData تبدیل کنید
fun <T> Flow<T>.toLiveData(): LiveData<T> { return liveData { collect { emit(it) } } }
نحوه استفاده:
val flow = flowOf("Hello", "World") val liveData = flow.toLiveData()
اگه میخواین عدد هاتونو یا یه تاریخ رو فرمت کنید میتونید از این تابع استفاده کنید
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()
با این تابع میتونید کاری کنید که عملیاتی که میخواید انجام بشه فقط در صورت اجرا بشه که مدت زمان معینی از اخرین اجراش گذشته باشه. برای مثال فقط درصورتی کد های مربوط به کلیک دکمه اجرا بشه که از اخرین کلیک 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 میلی ثانیه گذشته باشه
}
اگه میخواین یه 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()
با این تابع کد های مربوط به یه آبجکت فقط زمانی اعمال میشن که شرط ما درست باشه
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() }
به طور خلاصه با کاتلین میتونید تعداد زیادی از این جور چیزا رو بنویسید و توی زمانتون صرفه جویی و کد هاتونو هم خواناتر کنید.
این پست از اینجا ترجمه شده. اگه ترجمه های دیگه ای در مورد اندروید میخواید میتونید برام اینجا کامنت کنید. اگه خوشتون اومد لایک یادتون نره و همچنین میتونید با استفاده از این لینک برام یه قهوه بخرید :) ❤️ بدرود .