دوال المعاملات
أعيدوا تعريف plus وminus وغيرهما
دوال المعاملات درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ما المقصود بتحميل العوامل الزائد؟
يتيح تحميل العوامل الزائد لأنواعك الاستجابة لرموز مثل + أو -. وتعرّف دالة باستخدام المُعدِّل operator واسم خاص.
data class Point(val x: Int, val y: Int) {
operator fun plus(o: Point) = Point(x + o.x, y + o.y)
}
fun main() {
println(Point(1, 2) + Point(3, 4))
}الكلمة المفتاحية operator
يُخبر المُعدِّل operator المصرّفَ بأن هذه الدالة تنفّذ عاملًا. ومن دونه، لن يعمل استدعاء a + b.
data class Money(val amount: Int) {
operator fun plus(o: Money) = Money(amount + o.amount)
}
fun main() {
println(Money(5) + Money(3))
}الأسماء الاصطلاحية
يرتبط كل عامل باسم دالة ثابت: plus للرمز +، وminus للرمز -، وtimes للرمز *، وdiv للرمز /، وrem للرمز %.
data class Vec(val n: Int) {
operator fun times(k: Int) = Vec(n * k)
}
fun main() {
println(Vec(4) * 3)
}Minus وTimes
يمكنك تعريف عدة عوامل على النوع نفسه.
data class Point(val x: Int, val y: Int) {
operator fun minus(o: Point) = Point(x - o.x, y - o.y)
operator fun times(k: Int) = Point(x * k, y * k)
}
fun main() {
println(Point(5, 5) - Point(1, 2))
println(Point(2, 3) * 2)
}العوامل أحادية المعامل
يستخدم الطرح الأحادي unaryMinus، وتستخدم الإضافة الأحادية unaryPlus، بينما ينفّذ not العامل !.
data class Temp(val c: Int) {
operator fun unaryMinus() = Temp(-c)
}
fun main() {
println(-Temp(10))
}الزيادة والنقصان
ينفّذ inc العامل ++، وينفّذ dec العامل --. ويُرجع كلاهما قيمة جديدة من النوع نفسه.
data class Counter(val n: Int) {
operator fun inc() = Counter(n + 1)
}
fun main() {
var c = Counter(0)
c++
println(c.n)
}الإسناد المركب
ينفّذ plusAssign العامل += مع المستقبلات القابلة للتغيير. وإذا وُجد plus فقط، فإن += يعيد إسناد المتغير بدلًا من ذلك.
class Bag {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val bag = Bag()
bag += "apple"
println(bag.items)
}العوامل مع أنواع مختلفة
ليس من الضروري أن يطابق نوع المعامل نوع المستقبل. ففي هذا المثال، يؤدي ضرب نقطة في Int إلى إرجاع نقطة.
data class Size(val w: Int, val h: Int) {
operator fun times(factor: Int) = Size(w * factor, h * factor)
}
fun main() {
println(Size(2, 3) * 4)
}بوصفها دوال امتداد
يمكن تعريف العوامل كامتدادات، حتى للأنواع التي لا تملكها.
data class Point(val x: Int, val y: Int)
operator fun Point.plus(o: Point) = Point(x + o.x, y + o.y)
fun main() {
println(Point(1, 1) + Point(2, 2))
}تسلسل العوامل
تتراكب العوامل المحمّلة كما تتراكب العوامل المضمّنة، مع احترام أسبقية العوامل المعتادة.
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() {
val r = N(2) + N(3) * N(4)
println(r.v)
}أنواع الإرجاع مرنة
يمكن للعامل إرجاع أي نوع، لكن إرجاع النوع نفسه يجعل الاستخدام بديهيًا وقابلًا للتسلسل.
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))
}تحقق سريع
اختبر مدى فهمك لدوال العوامل.
مراجعة
لقد تعلمت دوال العوامل:
- علّم الدوال باستخدام
operatorواسم اصطلاحي مثل (plusوminusوtimes، ...). - تُدعم العوامل الأحادية وعوامل الزيادة وعوامل الإسناد المركب.
- يمكن أن تكون العوامل أعضاءً أو امتدادات.
- يحافظ إرجاع النوع نفسه على سهولة فهم التسلسل.
data class P(val x: Int) {
operator fun plus(o: P) = P(x + o.x)
}
fun main() {
println((P(2) + P(3)).x)
}الأسئلة الشائعة
هل درس «دوال المعاملات» مجاني؟
نعم — نص درس «دوال المعاملات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «دوال المعاملات»؟
أعيدوا تعريف plus وminus وغيرهما تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «دوال المعاملات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دوال المعاملات
- معاملات المقارنة
- الفهرسة والاستدعاء
- أفضل الممارسات