أفضل الممارسات
أبقوا المعاملات بديهية
أفضل الممارسات درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
أبقوا العوامل بديهية
أعيدوا تحميل العامل فقط عندما يكون معناه واضحًا. فاستخدام + مع المتجهات واضح، أما استخدام + بمعنى إرسال بريد إلكتروني فليس كذلك.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}حافظوا على الدلالات المتوقعة
التزموا بالجبر المعتاد: ينبغي أن يبدو a + b تبادليًا مع الأنواع المتماثلة، وألا يفاجئ القارئين.
data class Money(val cents: Int) {
operator fun plus(o: Money) = Money(cents + o.cents)
}
fun main() {
println(Money(100) + Money(50))
}فضّلوا عدم القابلية للتغيير
ينبغي للعوامل مثل plus أن تعيد قيمة جديدة بدلًا من تعديل المستقبل، بما يطابق سلوك الأعداد.
data class Point(val x: Int) {
operator fun plus(o: Point) = Point(x + o.x)
}
fun main() {
val a = Point(1)
val b = a + Point(2)
println("${a.x} ${b.x}")
}plus مقابل plusAssign
عرّفوا plus للقيم غير القابلة للتغيير، وعرّفوا plusAssign للتعديل في مكانه داخل الحاويات القابلة للتغيير. وتجنبوا تعريفهما معًا بسلوك متعارض.
class Cart {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val c = Cart()
c += "book"
println(c.items)
}طابقوا أنواع الإرجاع
أعيدوا النوع نفسه من العوامل الثنائية حتى تتسلسل النتائج طبيعيًا.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
}
fun main() {
println((N(1) + N(2) + N(3)).v)
}لا تعيدوا التحميل للاستعراض
إذا كانت الدالة المسماة أوضح، فاستخدموها. فالعوامل مخصصة للدلالات العددية أو الشبيهة بالحاويات فعلًا، لا للألغاز.
data class Log(val lines: List<String>) {
fun append(line: String) = Log(lines + line)
}
fun main() {
println(Log(emptyList()).append("start").lines)
}حافظوا على اتساق equals وhashCode
إذا أعدتم تحميل المقارنة أو المساواة، فحافظوا على اتساق equals وhashCode لتجنب إفساد المجموعات.
data class Id(val v: Int)
fun main() {
val set = hashSetOf(Id(1), Id(1))
println(set.size)
}انتبهوا إلى أسبقية العوامل
تحافظ العوامل التي أُعيد تحميلها على أسبقية العوامل المضمّنة. صمّموا الاستخدام بحيث تؤدي الأسبقية الطبيعية إلى النتائج المتوقعة.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
println((N(2) + N(3) * N(4)).v)
}وثّقوا العوامل غير المتوقعة
إذا كان العامل ينفذ شيئًا غير بديهي، فأضيفوا تعليقًا أو KDoc حتى لا يضلل المستدعين.
data class Range2(val start: Int, val end: Int) {
// contains: is value inside the range?
operator fun contains(v: Int) = v in start..end
}
fun main() {
println(5 in Range2(1, 10))
}استخدموا contains مع in
يُطابق العامل in الدالة contains. أعيدوا تعريفه فقط عندما تكون العضوية محددة بوضوح لنوعكم.
class Team(val members: List<String>) {
operator fun contains(name: String) = name in members
}
fun main() {
val t = Team(listOf("Ann", "Bo"))
println("Ann" in t)
}عند الشك، استخدموا دالة
تكون الدالة ذات الاسم الواضح أكثر أمانًا تقريبًا دائمًا من عامل غامض. احصروا إعادة التحميل في الحالات التي تحسن فيها قابلية القراءة فعلًا.
data class Temperature(val c: Int) {
fun warmerThan(o: Temperature) = c > o.c
}
fun main() {
println(Temperature(30).warmerThan(Temperature(20)))
}تحقق سريع
اختبروا مدى فهمكم لأفضل ممارسات إعادة تحميل العوامل.
مراجعة
لقد تعلمتم أفضل ممارسات إعادة تحميل العوامل:
- أعيدوا التحميل فقط عندما يكون المعنى واضحًا ومتعارفًا عليه.
- فضّلوا القيم غير القابلة للتغيير والإرجاع من النوع نفسه، وحافظوا على قابلية تسلسل النتائج.
- افصلوا بين
plus(للقيمة) وplusAssign(للتعديل). - حافظوا على اتساق
equals/hashCode، وفضّلوا الدوال المسماة عندما تكون أوضح.
data class V(val x: Int) {
operator fun plus(o: V) = V(x + o.x)
}
fun main() {
println((V(2) + V(5)).x)
}الأسئلة الشائعة
هل درس «أفضل الممارسات» مجاني؟
نعم — نص درس «أفضل الممارسات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «أفضل الممارسات»؟
أبقوا المعاملات بديهية تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أفضل الممارسات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دوال المعاملات
- معاملات المقارنة
- الفهرسة والاستدعاء
- أفضل الممارسات