Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الأساليب وself

جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 3 من 57.

داخل إحدى الطرق، تمثّل self النسخة التي استُدعيت الطريقة عليها. يشير كلٌّ من self.count وcount إلى الخاصية نفسها، لذلك عادةً ما يُحذف self:

class Counter {
    var count = 0
    func increment() {
        self.count += 1
    }
}

let c = Counter()
c.increment()
print(c.count)

الناتج:

1

تُستخدم self عندما يكون للمعامل الاسم نفسه الذي تملكه خاصية. عندئذٍ يشير الاسم المجرّد إلى المعامل، بينما تشير self.name إلى الخاصية:

class Player {
    var name = "unknown"
    func rename(name: String) {
        self.name = name
    }
}

let p = Player()
p.rename(name: "Ada")
print(p.name)

الناتج:

Ada

يمكن للطرائق استدعاء طرائق أخرى للمثيل نفسه، مما يحافظ على صغر حجم كل طريقة:

class Cart {
    var total = 0
    func add(_ price: Int) {
        total += price
    }
    func addTwice(_ price: Int) {
        add(price)
        add(price)
    }
}

let cart = Cart()
cart.addTwice(5)
print(cart.total)

الناتج:

10

يمكن للطريقة أيضًا إرجاع قيمة محسوبة من الخصائص. هنا تجيب isEmpty() عن سؤال يتعلق بالمثيل من دون تغييره:

class Cart {
    var items: [String] = []
    func add(_ item: String) {
        items.append(item)
    }
    func isEmpty() -> Bool {
        items.count == 0
    }
}

let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())

الناتج:

true
false
challenge icon

التحدي

سهل

أكمل الصنف Thermostat. تخزّن setTarget(target:) المعامل في الخاصية target (استخدم self)، وتزيد warmer() الهدف بمقدار 1، وتُرجع display() القيمة target: 21.

يقرأ الكود المزوّد هدفًا ابتدائيًا وقائمة من الأوامر (warmer أو set <n>)، ثم يطبّقها ويطبع display() في النهاية.

ضع كودك في Thermostat.swift. يحتوي main.swift على كود الإدخال/الإخراج المزوّد، ولا يمكن تعديله.

جرّب بنفسك

// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
    if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Swift