دلالات القيم
جزء من قسم البرمجة كائنية التوجه في رحلة 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التحدي
سهلأكمل 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)")
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift