Special N9NE
Special N9NE
خواندن ۳ دقیقه·۱ سال پیش

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

کاتلین یه زبون پرقدرته که توابع زیادی هم داره اما یکی از اصلی ترین نقاط قوت کاتلین extension function ها هستن. با استفاده از این توابع شما میتونید به کلاس ها و آبجکت هایی که در کاتیلن وجود دارن قابلیت هایی رو اضافه کنید بدون اینکه تغییری توی سورس کد اون ها ایجاد بشه.

توی این پست ما چند تا از تابع های خیلی ساده که کد هاتونو خواناتر و کدنویسی رو براتون آسون تر میکنه رو بررسی میکنیم و با این نوع تابع ها آشنا میشیم.

https://unsplash.com/photos/azJJSiwWW90?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink
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() }




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

این پست از اینجا ترجمه شده. اگه ترجمه های دیگه ای در مورد اندروید میخواید میتونید برام اینجا کامنت کنید. اگه خوشتون اومد لایک یادتون نره و همچنین میتونید با استفاده از این لینک برام یه قهوه بخرید :) ❤️ بدرود .

کاتلینkotlinandroidextension functionاندروید
اندروید دولوپر ؟ بله.
شاید از این پست‌ها خوشتان بیاید