تخطَّ إلى المحتوى

المتغيرات والأنواع في Swift: let و var والاختياريات

الدرس 2 من 11 · Swift

Swift لغة صممتها Apple لتكون آمنة وسريعة وممتعة في الكتابة. وأمانها يبدأ من أبسط شيء: المتغيرات. في هذا الدرس ستتعلم كيف تخزن البيانات في Swift، وستتعرف على فكرة الاختياريات (Optionals) التي تميز Swift، وتحمي تطبيقاتك من نوع شهير جداً من الأعطال.

let name = "سارة"
var points = 10
points = points + 5
print("\(name) لديها \(points) نقطة")
الناتج
سارة لديها 15 نقطة
  • let: ثابت، لا تتغير قيمته بعد إسنادها. مثل تاريخ ميلادك.
  • var: متغير يمكن تغيير قيمته. مثل رصيد نقاطك في لعبة.

لو حاولت name = "منى" سيرفض المترجم بخطأ: cannot assign to value: 'name' is a 'let' constant.

let city: String = "القاهرة"
let students: Int = 30
let price: Double = 12.5
let isOpen: Bool = true
النوع يخزن مثال
Int أعداد صحيحة 30
Double أعداد عشرية 12.5
String نصوص بين علامتي تنصيص مزدوجتين "مرحباً"
Bool true أو false true
Character حرف واحد "A"

النوع يُكتب بعد اسم المتغير ونقطتين. وفي الأغلب لا تحتاج كتابته، لأن Swift تستنتجه من القيمة: let price = 12.5 تعرف وحدها أنه Double. لكن بعد ذلك، النوع ثابت: لا يمكن وضع نص في متغير من نوع Int.

لوضع قيمة داخل نص، اكتبها بين \( و ):

let first = "أحمد"
print("طول الاسم: \(first.count) حروف")
print("بعد المكافأة: \(points + 3)")
الناتج
طول الاسم: 4 حروف
بعد المكافأة: 18

count تحسب الحروف بشكل صحيح حتى في العربية والرموز التعبيرية. وبين القوسين يمكنك كتابة أي تعبير، مثل عملية حسابية.

print(10 / 4)
print(10.0 / 4)
print(10 % 4)
الناتج
2
2.5
2

قسمة عددين صحيحين تحذف الكسر. وانتبه: Swift صارمة جداً مع الأنواع، فلا تخلط Int مع Double تلقائياً:

let quantity = 3
let unitPrice = 2.5
let total = Double(quantity) * unitPrice
print(total)
الناتج
7.5

لو كتبت quantity * unitPrice مباشرة، سيرفض المترجم لأن الطرفين من نوعين مختلفين. يجب التحويل صراحة بـ Double(...). قد يبدو هذا متعباً، لكنه يمنع أخطاء حسابية صامتة.

ماذا يحدث عند تحويل نص إلى رقم؟

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") ?? 0
print(age)
الناتج
0

?? تعني: «إذا كانت فارغة، استخدم هذه القيمة».

ويمكنك تعريف متغير اختياري بنفسك بعلامة ? بعد النوع:

var nickname: String? = nil
nickname = "سوسو"
let productName = "سماعة"
let unitPrice = 150.0
let quantity = 2
let total = unitPrice * Double(quantity)
print("المنتج: \(productName)")
print("الإجمالي: \(total) جنيه")
الناتج المتوقع
المنتج: سماعة
الإجمالي: 300.0 جنيه

تحدٍّ: اكتب متغيراً نصياً فيه عمر كتبه المستخدم مثل "15"، وحوّله بـ Int(...)، واطبع «العمر بعد 5 سنوات» باستخدام if let، أو رسالة خطأ إذا لم يكن رقماً.

  • تغيير ثابت let: استخدم var إذا كانت القيمة ستتغير فعلاً.
  • خلط Int و Double: حوّل صراحة بـ Double(x) أو Int(x).
  • استخدام ! بلا داعٍ: سبب شائع جداً لانهيار التطبيقات. افتح الاختياريات بأمان.

سؤال

ما نوع نتيجة Int("42") في Swift؟

سؤال

ماذا يطبع print(Int("xyz") ?? -1)؟

  • let للثوابت و var للمتغيرات، وفضّل let دائماً.
  • الأنواع الأساسية Int و Double و String و Bool، و Swift تستنتج النوع.
  • \(قيمة) لإدراج القيم في النصوص، و count تعدّ الحروف العربية بشكل صحيح.
  • Swift لا تخلط الأنواع تلقائياً، فحوّل صراحة بـ Double(...).
  • الاختياري Int? قيمة أو nil، وافتحه بأمان بـ if let أو ??، وتجنّب !.