التحويلات الذكية
تحويل النوع تلقائيًا بعد الفحوص
التحويلات الذكية درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ما التحويلات الذكية
بعد فحص نوع قيمة ما، يتذكر Kotlin هذه المعلومة. وداخل الكتلة التي أُجري فيها الفحص، يتعامل مع القيمة تلقائيًا باعتبارها من النوع الأضيق.
تُسمى هذه الميزة التحويل الذكي، وهي تلغي الحاجة إلى التحويل اليدوي.
التحويل الذكي بعد is
بعد نجاح فحص is، يمكنك استخدام القيمة باعتبارها من ذلك النوع من دون كتابة تحويل.
ويُدرج المترجم التحويل نيابةً عنك.
fun describe(x: Any) {
if (x is String) {
println(x.length) // x is smart-cast to String
}
}
fun main() {
describe("hello")
}التحويل الذكي بعد فحص null
تعمل التحويلات الذكية مع قابلية القيمة لأن تكون null أيضًا. بعد التأكد من أن القيمة ليست null، يُتعامل معها باعتبارها غير قابلة لأن تكون null.
fun length(text: String?): Int {
if (text != null) {
return text.length // smart-cast to non-null String
}
return 0
}
fun main() {
println(length("abc"))
println(length(null))
}التحويلات الذكية في when
تتيح فحوص الأنواع داخل when أيضًا إجراء تحويلات ذكية في كل فرع.
وهذه هي الطريقة الاصطلاحية للتعامل مع أنواع متعددة محتملة.
fun area(shape: Any): Double = when (shape) {
is Int -> shape.toDouble()
is String -> shape.length.toDouble()
else -> 0.0
}
fun main() {
println(area(5))
println(area("hello"))
}التحويل الذكي مع الإرجاع المبكر
إذا أرجعت النتيجة مبكرًا عندما تكون القيمة null، فسيعرف المترجم أنها ليست null بعد ذلك.
وتستخدم بقية الدالة القيمة بأمان.
fun process(text: String?) {
if (text == null) return
println(text.uppercase()) // smart-cast here
}
fun main() {
process("data")
process(null)
}التحويل الذكي مع إرجاع Elvis
يؤدي الجمع بين Elvis وreturn أيضًا إلى تفعيل التحويل الذكي في بقية الشيفرة.
fun process(text: String?) {
val safe = text ?: return
println(safe.length) // safe is non-null
}
fun main() {
process("hi")
process(null)
}الشروط المركبة
تراعي التحويلات الذكية منطق الشروط المركبة التي تستخدم &&.
بعد فحص النوع في الجانب الأيسر، يرى الجانب الأيمن النوع الأضيق بالفعل.
fun check(x: Any) {
if (x is String && x.length > 3) {
println("long string")
} else {
println("other")
}
}
fun main() {
check("hello")
check(2)
}متى تفشل التحويلات الذكية
تحتاج التحويلات الذكية إلى ضمان ألا تتغير القيمة بين فحصها واستخدامها.
قد لا تخضع قيمة var قابلة للتغيير لتحويل ذكي إذا كان من الممكن تغييرها بالتزامن. استخدم val بدلًا منها لتحصل على تحويلات ذكية موثوقة.
fun main() {
val text: String? = "stable"
if (text != null) {
println(text.length) // val smart-casts cleanly
}
}تُعد val المحلية الخيار الأكثر أمانًا
يجعل نسخ قيمة إلى val محلية التحويلات الذكية موثوقة.
هذا نمط شائع عند التعامل مع الخصائص القابلة لأن تكون null.
class Box(val content: String?)
fun main() {
val box = Box("item")
val c = box.content
if (c != null) {
println(c.uppercase())
}
}التحويل الذكي مقابل التحويل الصريح
تحل التحويلات الذكية محل معظم تحويلات as الصريحة. وهي أكثر أمانًا لأنها تُطبَّق فقط عندما يكون النوع مثبتًا.
ستتعلم صراحةً استخدام is وas بعد ذلك.
fun main() {
val x: Any = "text"
if (x is String) {
// no need for (x as String)
println(x.reversed())
}
}تجميع المفاهيم
تتيح التحويلات الذكية للمترجم تضييق الأنواع تلقائيًا:
- بعد فحوص
is→ تحويل إلى ذلك النوع - بعد فحوص null → تحويل إلى نوع غير قابل لأن يكون null
- تعمل في
ifوwhenوبعد عمليات الإرجاع المبكر - تكون الأكثر موثوقية مع
val
fun render(x: Any): String {
if (x is Int) return "number " + x
if (x is String) return "text " + x.uppercase()
return "unknown"
}
fun main() {
println(render(7))
println(render("go"))
}تحقق سريع
اختبر مدى فهمك للتحويلات الذكية.
مراجعة
لقد تعرفت على التحويلات الذكية:
- تضيّق فحوص الأنواع وnull النوع تلقائيًا
- تعمل في
ifوwhenوبعد عمليات الإرجاع المبكر - توفر
valتحويلات ذكية أكثر موثوقية
بعد ذلك ستدرس عاملي is وas مباشرةً.
الأسئلة الشائعة
هل درس «التحويلات الذكية» مجاني؟
نعم — نص درس «التحويلات الذكية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «التحويلات الذكية»؟
تحويل النوع تلقائيًا بعد الفحوص تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «التحويلات الذكية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخدام when كتعبير
- التحويلات الذكية
- المعاملان is وas
- when الشاملة