0Pricing
Kotlin Academy · درس

امتدادات عملية: مساعدات Context وView وString

أنشئ امتدادات مساعدة بأسلوب Android للأنماط الشائعة.

امتدادات عملية: مساعدات Context وView وString درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

امتدادات من العالم الحقيقي

تتألق الامتدادات عند استخدامها مع أنواع الأُطر التي لا يمكنك تعديلها، مثل: Context وView وString والمجموعات. فيما يلي أنماط عملية مأخوذة مباشرة من قواعد شيفرة Android المستخدمة في بيئات الإنتاج.

مساعد Context.toast

غلّف الاستدعاء المطوّل Toast.makeText(...).show() في امتداد يُكتب في سطر واحد.

import android.content.Context
import android.widget.Toast
fun Context.toast(message: String, long: Boolean = false) {
    val duration = if (long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
    Toast.makeText(this, message, duration).show()
}
// Usage: context.toast("Saved!")

مساعدات موارد Context

تجنّب التحويلات النوعية عند البحث عن الموارد. تحسّن الامتدادات قابلية القراءة وأمان الأنواع.

import android.content.Context
import androidx.core.content.ContextCompat
fun Context.color(res: Int) = ContextCompat.getColor(this, res)
fun Context.string(res: Int) = getString(res)
fun Context.dp(value: Int) = (value * resources.displayMetrics.density).toInt()
// Usage: val red = context.color(R.color.error)

View.show / View.hide

بدّل بين View.VISIBLE وView.GONE دون تعقيد.

import android.view.View
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
// Usage: progressBar.show(); button.hide()

View.setVisible(boolean)

امتداد يُكتب في سطر واحد ويبدّل الحالة استنادًا إلى شرط، بدلًا من شيفرة إظهار تعتمد على if-else.

import android.view.View
fun View.setVisible(visible: Boolean) {
    visibility = if (visible) View.VISIBLE else View.GONE
}
// Usage: errorLabel.setVisible(state.hasError)

لامبدا View.onClick

مستمع نقرات أوضح، إذ يمرر لامبدا بدلًا من OnClickListener مجهول.

import android.view.View
fun View.onClick(action: (View) -> Unit) {
    setOnClickListener(action)
}
// Usage:
// button.onClick { view -> println("clicked") }

String.isValidEmail

تجعل امتدادات التحقق الخاصة بالمجال على String منطق الأعمال سهل القراءة.

fun String.isValidEmail(): Boolean {
    val regex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
    return regex.matches(this)
}
fun main() {
    println("ada@example.com".isValidEmail()) // true
    println("nope".isValidEmail())             // false
}

String.truncate

اختصر السلاسل النصية الطويلة باستخدام علامة الحذف، فهذا مساعد شائع في واجهات المستخدم.

fun String.truncate(max: Int, ellipsis: String = "..."): String =
    if (length <= max) this else substring(0, max - ellipsis.length) + ellipsis
fun main() {
    println("The quick brown fox".truncate(10)) // The qui...
    println("short".truncate(10))                // short
}

String.toTitleCase

حوّل الحرف الأول من كل كلمة إلى حرف كبير، فهذا مساعد شائع للتنسيق.

fun String.toTitleCase(): String = split(" ").joinToString(" ") {
    if (it.isEmpty()) it
    else it[0].uppercaseChar() + it.substring(1).lowercase()
}
fun main() {
    println("hello WORLD from kotlin".toTitleCase())
}

امتداد List: chunkedBy

جمّع العناصر المتتالية حسب مفتاح، وهو أمر مفيد لأقسام واجهة المستخدم.

fun <T, K> List<T>.chunkedBy(keySelector: (T) -> K): List<List<T>> {
    val result = mutableListOf<MutableList<T>>()
    var lastKey: K? = null
    for (item in this) {
        val key = keySelector(item)
        if (key == lastKey) result.last().add(item)
        else { result.add(mutableListOf(item)); lastKey = key }
    }
    return result
}
fun main() {
    val data = listOf(1, 1, 2, 2, 2, 3, 1)
    println(data.chunkedBy { it }) // [[1, 1], [2, 2, 2], [3], [1]]
}

مساعدات Activity

اجعل التنقل آمنًا من ناحية الأنواع وأقصر باستخدام المعممات المعاد ت reified.

import android.content.Context
import android.content.Intent
inline fun <reified T> Context.startActivity() {
    startActivity(Intent(this, T::class.java))
}
// Usage: context.startActivity<MainActivity>()

لا تُفرط في استخدامها

تضيف الامتدادات أسماءً إلى مساحة الأسماء العامة. احرص على أن تكون مركّزة ومحددة النطاق (private/internal) ومجمّعة حسب المجال؛ ويُعد تخصيص ملف لكل نوع مستقبل نمطًا مناسبًا.

fun String.shout() = uppercase() + "!"
fun String.whisper() = lowercase() + "..."
fun main() {
    println("hello".shout())
    println("HELLO".whisper())
}

تحقق سريع

لماذا تناسب الامتدادات أنواع أُطر Android مثل Context أو View بشكل كبير؟

مراجعة

تُعد الامتدادات مثالية لإضافة مساعدات سهلة الاستخدام إلى أنواع الأُطر (Context وView وString وList). ومن الأنماط الشائعة: تبديل حالة الظهور، ومستمعات النقرات، والبحث عن الموارد، والتحقق، والتنسيق. احرص على أن تكون الامتدادات مركّزة ومحددة النطاق ومجمّعة حسب نوع المستقبل.

الأسئلة الشائعة

هل درس «امتدادات عملية: مساعدات Context وView وString» مجاني؟

نعم — نص درس «امتدادات عملية: مساعدات Context وView وString» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «امتدادات عملية: مساعدات Context وView وString»؟

أنشئ امتدادات مساعدة بأسلوب Android للأنماط الشائعة. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «امتدادات عملية: مساعدات Context وView وString»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. دوال الامتداد: الصياغة وقواعد الإرسال
  2. خصائص الامتداد والامتدادات المحسوبة
  3. الامتدادات ذات النطاق وامتدادات companion
  4. امتدادات عملية: مساعدات Context وView وString
← العودة إلى Kotlin Academy