النسخ باستخدام copy() والتجاوز الجزئي
استخدم copy() لإنشاء مثيلات معدّلة من دون تغيير المثيل الأصلي.
النسخ باستخدام copy() والتجاوز الجزئي درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
التحديثات غير القابلة للتغيير باستخدام copy()
أساسيات copy()
data class Person(val name: String, val age: Int, val city: String)
val alice = Person("Alice", 30, "Berlin")
val olderAlice = alice.copy(age = 31)
println(olderAlice) // Person(name=Alice, age=31, city=Berlin)نسخ عدة حقول
data class Config(val host: String, val port: Int, val ssl: Boolean, val timeout: Int)
val prod = Config("prod.server", 443, true, 30)
val test = prod.copy(host = "test.server", port = 8080, ssl = false)
println(test)copy لا تعدّل الكائن الأصلي
data class Point(val x: Int, val y: Int)
val origin = Point(0, 0)
val moved = origin.copy(x = 5)
println(origin) // Point(x=0, y=0) — unchanged
println(moved) // Point(x=5, y=0)تنبيه بشأن النسخ العميق
data class Team(val name: String, val members: MutableList<String>)
val t1 = Team("A", mutableListOf("Alice"))
val t2 = t1.copy(name = "B")
t2.members.add("Bob") // modifies SHARED list!
println(t1.members) // [Alice, Bob] ← also changed!تجنب مشكلات النسخ السطحي
data class Team(val name: String, val members: List<String>) // immutable list
val t1 = Team("A", listOf("Alice"))
val t2 = t1.copy(name = "B", members = t1.members + "Bob")
println(t1.members) // [Alice]
println(t2.members) // [Alice, Bob]copy في إدارة الحالة
data class UiState(val loading: Boolean, val items: List<String>, val error: String?)
fun reduce(state: UiState, action: Action) = when (action) {
is Loading -> state.copy(loading = true)
is Success -> state.copy(loading = false, items = action.data)
is Error -> state.copy(loading = false, error = action.msg)
}copy مع المعاملات الافتراضية
data class Article(
val id: Long, val title: String, val body: String,
val published: Boolean = false, val views: Int = 0
)
val draft = Article(1L, "Hello", "Content...")
val published = draft.copy(published = true)
println(published.title) // Helloاستخدام copy في الاختبارات
val baseUser = User(id = 1, name = "Test", email = "test@test.com", active = true)
val inactiveUser = baseUser.copy(active = false)
val renamed = baseUser.copy(name = "Renamed")copy في مقابل نمط Builder
// Java Builder:
User.builder().name("A").age(30).role("admin").build()
// Kotlin:
val u = User("A", 30, "admin") // or copy from baseدلالات السجل
data class RGB(val r: Int, val g: Int, val b: Int)
val white = RGB(255, 255, 255)
println(white) // RGB(r=255, g=255, b=255)تحقق سريع
مراجعة
الأسئلة الشائعة
هل درس «النسخ باستخدام copy() والتجاوز الجزئي» مجاني؟
نعم — نص درس «النسخ باستخدام copy() والتجاوز الجزئي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «النسخ باستخدام copy() والتجاوز الجزئي»؟
استخدم copy() لإنشاء مثيلات معدّلة من دون تغيير المثيل الأصلي. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «النسخ باستخدام copy() والتجاوز الجزئي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات Data Class: الدوال المُنشأة تلقائيًا
- النسخ باستخدام copy() والتجاوز الجزئي
- تصريحات التفكيك باستخدام componentN
- Data Classes في المجموعات ومفاتيح Map