المنشئ الأساسي ومعاملات الخصائص
صرّح عن أصناف باستخدام منشئات أساسية وتعريفات مضمنة للخصائص.
المنشئ الأساسي ومعاملات الخصائص درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
المُنشئ الأساسي
تعلن فئة Kotlin عن المُنشئ الأساسي مباشرةً بعد اسم الفئة، بين قوسين. ولا يحتاج إلى جسم دالة، بل إلى قائمة بالمعاملات فقط.
أبسط فئة
لا يظهر المُنشئ الأساسي الذي لا يحتوي على معدِّلات بعد اسم الفئة.
class Greeter(val name: String) {
fun greet() = "Hello, $name!"
}
fun main() {
println(Greeter("Ada").greet())
}معاملات الخصائص
أضف val أو var إلى بداية معامل المُنشئ لتحويله إلى خاصية للفئة في خطوة واحدة.
class Person(val name: String, var age: Int)
fun main() {
val p = Person("Bob", 30)
println("${p.name} is ${p.age}")
p.age = 31
println("Now ${p.age}")
}المعاملات من دون val/var
تكون معاملات المُنشئ التي لا تحتوي على val أو var محليةً للمُنشئ؛ ويمكن استخدامها في كتل init أو مهيئات الخصائص، لكن لا يمكن الوصول إليها لاحقًا.
class Logger(prefix: String) {
val msg = "$prefix: ready"
}
fun main() {
val l = Logger("[INFO]")
println(l.msg)
// l.prefix // ERROR — not a property
}القيم الافتراضية للمعاملات
وفّر قيمًا افتراضية لمعاملات المُنشئ لتجنب التعليمات المتكررة اللازمة للمنشئات المتعددة.
class User(
val name: String,
val age: Int = 0,
val email: String = ""
)
fun main() {
println(User("Ana").age) // 0
println(User("Ben", 25).email) // ""
println(User("Cal", 30, "c@x.io").email)
}الوسائط المسماة
تجاوز ترتيب الوسائط الموضعية وسمِّ المعاملات عند موضع الاستدعاء، ويكون ذلك مفيدًا خصوصًا مع القيم الافتراضية.
class HttpClient(
val baseUrl: String,
val timeoutMs: Int = 5000,
val retries: Int = 3
)
fun main() {
val c = HttpClient(
baseUrl = "https://api.example.com",
retries = 5
)
println("retries=${c.retries} timeout=${c.timeoutMs}")
}تحديد مستوى الوصول إلى المُنشئ
استخدم private constructor لمنع إنشاء مثيلات من خارج الفئة، وهو أمر شائع عند استخدامه مع دوال المصنع.
class Singleton private constructor() {
companion object {
val instance = Singleton()
}
}
fun main() {
val s = Singleton.instance
println(s)
}المنشئات الثانوية
أضف منشئات إضافية باستخدام الكلمة المفتاحية constructor. ويجب أن تفوّض هذه المنشئات إلى المُنشئ الأساسي باستخدام this(...).
class Point(val x: Int, val y: Int) {
constructor(value: Int) : this(value, value)
}
fun main() {
println("${Point(3).x}, ${Point(3).y}") // 3, 3
}مُنشئ مع مستوى وصول
يمكنك تحديد مستوى وصول مختلف لكل مُنشئ، وهو أمر مفيد في المكتبات.
class Lib internal constructor(val key: String) {
companion object {
fun create(key: String) = Lib(key)
}
}
fun main() {
println(Lib.create("abc").key)
}مراجعة كتلة init
ضع الشيفرة التي يجب تشغيلها أثناء الإنشاء في كتلة init { }. وتُشغَّل كتل init المتعددة بترتيب ظهورها في الشيفرة المصدرية.
class Validator(val value: String) {
init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
println(Validator("ok").value)
// Validator("") // throws IllegalArgumentException
}دمج الخصائص والمنطق
تتآلف تعريفات الخصائص والمنشئات الثانوية وكتل init لتشكّل مسارًا مرنًا للتهيئة.
class Account(
val owner: String,
initialBalance: Double = 0.0
) {
var balance: Double = initialBalance
private set
init {
require(initialBalance >= 0) { "balance must be non-negative" }
}
fun deposit(amount: Double) { balance += amount }
}
fun main() {
val a = Account("Alice", 100.0)
a.deposit(50.0)
println("${a.owner}: ${a.balance}") // Alice: 150.0
}تحقق سريع
ماذا تفعل الكلمة المفتاحية val عند استخدامها في معامل المُنشئ الأساسي؟
مراجعة
يوجد المُنشئ الأساسي في ترويسة الفئة. استخدم val أو var لمعاملات الخصائص، أما المعاملات العادية فتظل محليةً للمُنشئ. أضف قيمًا افتراضية لتقليل عدد المنشئات، ونفّذ منطق الإعداد في كتل init. وتفوّض المنشئات الثانوية إلى المُنشئ الأساسي عبر this(...).
الأسئلة الشائعة
هل درس «المنشئ الأساسي ومعاملات الخصائص» مجاني؟
نعم — نص درس «المنشئ الأساسي ومعاملات الخصائص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «المنشئ الأساسي ومعاملات الخصائص»؟
صرّح عن أصناف باستخدام منشئات أساسية وتعريفات مضمنة للخصائص. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «المنشئ الأساسي ومعاملات الخصائص»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المنشئ الأساسي ومعاملات الخصائص
- كتل init وترتيب التهيئة
- أدوات Getter وSetter مخصصة مع field
- lateinit والتهيئة الكسولة