المتغيرات والأنواع في Swift: let و var والاختياريات
Swift لغة صممتها Apple لتكون آمنة وسريعة وممتعة في الكتابة. وأمانها يبدأ من أبسط شيء: المتغيرات. في هذا الدرس ستتعلم كيف تخزن البيانات في Swift، وستتعرف على فكرة الاختياريات (Optionals) التي تميز Swift، وتحمي تطبيقاتك من نوع شهير جداً من الأعطال.
let و var
Section titled “let و var”let name = "سارة"var points = 10points = points + 5print("\(name) لديها \(points) نقطة")سارة لديها 15 نقطةlet: ثابت، لا تتغير قيمته بعد إسنادها. مثل تاريخ ميلادك.var: متغير يمكن تغيير قيمته. مثل رصيد نقاطك في لعبة.
لو حاولت name = "منى" سيرفض المترجم بخطأ: cannot assign to value: 'name' is a 'let' constant.
الأنواع الأساسية
Section titled “الأنواع الأساسية”let city: String = "القاهرة"let students: Int = 30let price: Double = 12.5let isOpen: Bool = true| النوع | يخزن | مثال |
|---|---|---|
Int |
أعداد صحيحة | 30 |
Double |
أعداد عشرية | 12.5 |
String |
نصوص بين علامتي تنصيص مزدوجتين | "مرحباً" |
Bool |
true أو false |
true |
Character |
حرف واحد | "A" |
النوع يُكتب بعد اسم المتغير ونقطتين. وفي الأغلب لا تحتاج كتابته، لأن Swift تستنتجه من القيمة: let price = 12.5 تعرف وحدها أنه Double. لكن بعد ذلك، النوع ثابت: لا يمكن وضع نص في متغير من نوع Int.
إدراج القيم في النصوص
Section titled “إدراج القيم في النصوص”لوضع قيمة داخل نص، اكتبها بين \( و ):
let first = "أحمد"print("طول الاسم: \(first.count) حروف")print("بعد المكافأة: \(points + 3)")طول الاسم: 4 حروفبعد المكافأة: 18count تحسب الحروف بشكل صحيح حتى في العربية والرموز التعبيرية. وبين القوسين يمكنك كتابة أي تعبير، مثل عملية حسابية.
العمليات الحسابية
Section titled “العمليات الحسابية”print(10 / 4)print(10.0 / 4)print(10 % 4)22.52قسمة عددين صحيحين تحذف الكسر. وانتبه: Swift صارمة جداً مع الأنواع، فلا تخلط Int مع Double تلقائياً:
let quantity = 3let unitPrice = 2.5let total = Double(quantity) * unitPriceprint(total)7.5لو كتبت quantity * unitPrice مباشرة، سيرفض المترجم لأن الطرفين من نوعين مختلفين. يجب التحويل صراحة بـ Double(...). قد يبدو هذا متعباً، لكنه يمنع أخطاء حسابية صامتة.
الاختياريات (Optionals)
Section titled “الاختياريات (Optionals)”ماذا يحدث عند تحويل نص إلى رقم؟
let a = Int("25")let b = Int("abc")print(a)print(b)Optional(25)nilالتحويل قد ينجح أو يفشل، لذلك نوع النتيجة ليس Int بل Int?، أي «رقم صحيح اختياري»: إما رقم، وإما nil (لا قيمة).
تخيّل القيمة الاختيارية مثل علبة هدية مغلقة: قد يكون بداخلها شيء، وقد تكون فارغة. ولا تستطيع استخدام ما بداخلها قبل أن تفتحها وتتأكد.
الفتح الآمن بـ if let:
if let number = Int("25") { print("الرقم بعد الزيادة: \(number + 5)")} else { print("ليس رقماً")}الرقم بعد الزيادة: 30داخل if let، المتغير number من نوع Int عادي ومضمون. وإذا كانت العلبة فارغة، يُنفَّذ else.
القيمة الافتراضية بـ ??:
let age = Int("abc") ?? 0print(age)0?? تعني: «إذا كانت فارغة، استخدم هذه القيمة».
ويمكنك تعريف متغير اختياري بنفسك بعلامة ? بعد النوع:
var nickname: String? = nilnickname = "سوسو"جرّب بنفسك
Section titled “جرّب بنفسك”let productName = "سماعة"let unitPrice = 150.0let quantity = 2let total = unitPrice * Double(quantity)
print("المنتج: \(productName)")print("الإجمالي: \(total) جنيه")المنتج: سماعةالإجمالي: 300.0 جنيهتحدٍّ: اكتب متغيراً نصياً فيه عمر كتبه المستخدم مثل "15"، وحوّله بـ Int(...)، واطبع «العمر بعد 5 سنوات» باستخدام if let، أو رسالة خطأ إذا لم يكن رقماً.
أخطاء شائعة
Section titled “أخطاء شائعة”- تغيير ثابت let: استخدم
varإذا كانت القيمة ستتغير فعلاً. - خلط Int و Double: حوّل صراحة بـ
Double(x)أوInt(x). - استخدام ! بلا داعٍ: سبب شائع جداً لانهيار التطبيقات. افتح الاختياريات بأمان.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما نوع نتيجة Int("42") في Swift؟
التحويل من نص قد يفشل، لذلك تُرجع Swift قيمة اختيارية: إما رقم، وإما nil.
سؤال
ماذا يطبع print(Int("xyz") ?? -1)؟
التحويل فشل فأعطى nil، والمعامل ?? يستبدله بالقيمة الافتراضية -1.
الخلاصة
Section titled “الخلاصة”letللثوابت وvarللمتغيرات، وفضّلletدائماً.- الأنواع الأساسية
IntوDoubleوStringوBool، و Swift تستنتج النوع. \(قيمة)لإدراج القيم في النصوص، وcountتعدّ الحروف العربية بشكل صحيح.- Swift لا تخلط الأنواع تلقائياً، فحوّل صراحة بـ
Double(...). - الاختياري
Int?قيمة أوnil، وافتحه بأمان بـif letأو??، وتجنّب!.