أدوات Getter وSetter مخصصة مع field
اكتب خصائص محسوبة وموصّلات Setter مخصصة باستخدام الكلمة المفتاحية للحقل الداعم.
أدوات Getter وSetter مخصصة مع field درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
الخصائص ليست مجرد حقول
تملك كل خاصية في Kotlin دالة getter تُنشأ تلقائيًا، كما تملك خاصية var دالة setter أيضًا. ويمكنك تجاوز هذه الدوال لإضافة منطق، مثل التحقق أو التسجيل أو الحساب.
Getter مخصص
تجاوز get() لحساب القيمة في كل مرة تُقرأ فيها.
class Circle(val radius: Double) {
val area: Double
get() = Math.PI * radius * radius
}
fun main() {
val c = Circle(3.0)
println(c.area) // ~28.27
}الخصائص المحسوبة
لا تحتوي الخصائص المحسوبة على حقل داعم؛ إذ تُحسب قيمتها عند كل عملية وصول.
class Rectangle(val w: Int, val h: Int) {
val area get() = w * h
val perimeter get() = 2 * (w + h)
}
fun main() {
val r = Rectangle(3, 4)
println("${r.area}, ${r.perimeter}") // 12, 14
}Setter مخصص مع field
تشير field داخل setter مخصص إلى الحقل الداعم، أي إلى مساحة التخزين الفعلية.
class Temperature {
var celsius: Double = 0.0
set(value) {
require(value >= -273.15) { "below absolute zero" }
field = value
}
}
fun main() {
val t = Temperature()
t.celsius = 25.0
println(t.celsius)
// t.celsius = -300.0 // throws
}إنشاء الحقل الداعم تلقائيًا
إذا استخدم getter أو setter التعبير field، فإن Kotlin تنشئ حقلًا داعمًا. وإذا لم يستخدمه أيٌّ منهما، فلا يُنشأ حقل، وتكون الخاصية محسوبة بالكامل.
class Counter {
var count: Int = 0
set(value) {
println("Setting count from $field to $value")
field = value
}
}
fun main() {
val c = Counter()
c.count = 5
c.count = 10
}Setter مع آثار جانبية
استخدم setters مخصصة للتسجيل أو الإشعار بالتغيير أو مزامنة الحالة المرتبطة.
class Brightness {
var level: Int = 50
set(value) {
val clamped = value.coerceIn(0, 100)
println("Brightness -> $clamped")
field = clamped
}
}
fun main() {
val b = Brightness()
b.level = 75
b.level = 150 // clamps to 100
println(b.level)
}Setter خاص
اجعل setter private لكشف واجهة برمجية للقراءة فقط مع السماح بالتغيير داخليًا.
class Score {
var value: Int = 0
private set
fun increment() { value++ }
fun reset() { value = 0 }
}
fun main() {
val s = Score()
s.increment(); s.increment()
println(s.value) // 2
// s.value = 100 // ERROR: setter is private
}التحقق في Setter
تُعد setters المخصصة المكان الطبيعي للتحقق من المدخلات.
class Email {
var address: String = ""
set(value) {
require(value.contains("@")) { "invalid email" }
field = value
}
}
fun main() {
val e = Email()
e.address = "ada@example.com"
println(e.address)
}Getter مع منطق
يمكن لـ getters تحويل الحالة المخزنة، مثل تنسيق قيمة مخزنة أو تطبيق قيمة بديلة افتراضية.
class Profile(_name: String?) {
var rawName: String? = _name
val displayName: String
get() = rawName ?: "(unset)"
}
fun main() {
val p = Profile(null)
println(p.displayName) // (unset)
}مقارنة val وvar
لا تحتوي خصائص val إلا على getter دون setter، بينما تحتوي خصائص var على كليهما.
class Box {
val readOnly: Int get() = 42
var readWrite: Int = 0
}
fun main() {
println(Box().readOnly)
val b = Box(); b.readWrite = 5; println(b.readWrite)
}خطأ شائع: الاستدعاء الذاتي
لا تستخدم اسم الخاصية داخل accessor الخاص بها — فهذا يؤدي إلى استدعاء ذاتي لا نهائي. استخدم field بدلًا من ذلك.
class Wrong {
var x: Int = 0
set(value) {
// x = value // INFINITE RECURSION — calls setter again
field = value // CORRECT
}
}
fun main() {
val w = Wrong(); w.x = 42; println(w.x)
}تحقق سريع
داخل setter مخصص، إلى ماذا يشير المعرّف field؟
مراجعة
أعد تعريف get() وset() لإضافة منطق إلى الوصول إلى الخاصية. استخدم field داخل accessors لقراءة حقل التخزين والكتابة فيه. اجعل setters تحمل private لإنشاء واجهات برمجة تطبيقات عامة للقراءة فقط؛ واستخدم الخصائص المحسوبة (من دون حقل تخزين) عندما تكون القيمة مشتقة دائمًا.
تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «أدوات Getter وSetter مخصصة مع field» مجاني؟
نعم — نص درس «أدوات Getter وSetter مخصصة مع field» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «أدوات Getter وSetter مخصصة مع field»؟
اكتب خصائص محسوبة وموصّلات Setter مخصصة باستخدام الكلمة المفتاحية للحقل الداعم. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أدوات Getter وSetter مخصصة مع field»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المنشئ الأساسي ومعاملات الخصائص
- كتل init وترتيب التهيئة
- أدوات Getter وSetter مخصصة مع field
- lateinit والتهيئة الكسولة