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

دلالات القيم

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

البُنى هي أنواع قيم: يؤدي إسناد بنية إلى متغير آخر إلى نسخها. ويؤدي تغيير النسخة إلى ترك الأصل دون تغيير، بخلاف الفئة:

struct Point {
    var x: Int
}

var a = Point(x: 1)
var b = a
b.x = 99
print(a.x)
print(b.x)

الناتج:

1
99

تُظهر المقارنة نفسها مع فئة الفرق: يشير كلا المتغيرين إلى كائن واحد.

class PointRef {
    var x: Int
    init(x: Int) { self.x = x }
}

let a = PointRef(x: 1)
let b = a
b.x = 99
print(a.x)

الناتج:

99

يؤدي تمرير بنية إلى دالة أيضًا إلى تمرير نسخة منها. المعامل ثابت، لذا لإرجاع نسخة مُغيَّرة، تنشئ الدالة نسخة محلية وتُرجعها:

struct Point {
    var x: Int
}

func shifted(_ p: Point, by dx: Int) -> Point {
    var copy = p
    copy.x += dx
    return copy
}

let start = Point(x: 1)
let moved = shifted(start, by: 4)
print(start.x)
print(moved.x)

الناتج:

1
5

تحتفظ مصفوفات البُنى بقيم مستقلة. يؤدي تغيير عنصر من خلال فهرسه إلى تغيير ذلك العنصر فقط، ويؤدي نسخ المصفوفة إلى نسخ كل قيمة:

struct Score {
    var points: Int
}

var round1 = [Score(points: 1), Score(points: 2)]
var round2 = round1
round2[0].points = 50
print(round1[0].points)
print(round2[0].points)

الناتج:

1
50
challenge icon

التحدي

سهل

أكمل tryDiscount(_:percent:). تستقبل بنية Price وتُعيد نسخة مخفَّضة السعر: تُخفَّض قيمة السنتات بنسبة مئوية، مع التقريب إلى الأسفل. تطبع الشيفرة المتوفرة السعر الأصلي والسعر المخفَّض، لذلك يجب أن يبقى السعر الأصلي دون تغيير.

تقرأ الشيفرة المتوفرة سعرًا بالسنتات ونسبة مئوية واحدة في كل سطر، وتطبع was 1000, now 900 لكل منها.

ضع شيفرتك في Price.swift وFunctions.swift. يحتوي main.swift على شيفرة الإدخال/الإخراج المتوفرة ولا يمكن تعديلها.

جرّب بنفسك

// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
let original = Price(cents: Int(input[0])!)
for line in input.dropFirst() {
    let cheaper = tryDiscount(original, percent: Int(line)!)
    print("was \(original.cents), now \(cheaper.cents)")
}
quiz iconاختبر نفسك

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

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

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