توفّر Swift فئتين رئيسيتين من الأعداد: الأعداد الصحيحة والأعداد العشرية.
0 و1 و-1 و42 و-273.0.0 و3.14 و-1.36969e-10.يمكنك إدراج علامات الشرطة السفلية (_) داخل القيم العددية الحرفية لتحسين القراءة: 1_000_000 مطابق لـ 1000000.
ويمكن كتابة الأعداد العشرية الحرفية بالترميز العشري أو الترميز الأسي.
في معظم الحالات، تستخدم Int للأعداد الصحيحة وDouble للأعداد العشرية:
let speed: Int = 42 // Explicit Int
let pi: Double = 3.14 // Explicit Double
let giga: Double = 1_000_000_000 // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34 // Double in scientific notation
توفّر Swift العوامل الحسابية القياسية لإجراء الحسابات على الأعداد:
| العامل | الوصف | مثال |
|---|---|---|
+ |
جمع |
4 + 6 تساوي 10
|
- |
طرح |
15 - 10 تساوي 5
|
* |
ضرب |
2 * 3 تساوي 6
|
Swift آمنة من حيث الأنواع ولا تسمح بخلط أنواع عددية مختلفة في العمليات الحسابية.
لا يمكنك جمع Int وDouble أو ضربهما مباشرةً، بل يجب أن تحوّل أحد النوعين ليطابق الآخر أولًا.
ينفّذ العامل / عملية القسمة.
عندما يكون الطرفان عددين صحيحين، تحذف قسمة الأعداد الصحيحة أي باقٍ كسري:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
تقسيم عدد عشري غير صفري على صفر ينتج inf أو -inf.
وتقسيم 0.0 على 0.0 ينتج nan (ليس عددًا).
في المقابل، يؤدي تقسيم عدد صحيح على صفر إلى خطأ في وقت الترجمة أو في وقت التشغيل:
print(5.0 / 0.0) // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0) // Prints nan
// The following line will not compile:
// print(5 / 0) // Error: Division by zero
يحسب عامل الباقي (%) الباقي المتبقي بعد قسمة عددين صحيحين:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
في Swift، العامل % هو عامل باقٍ حقيقي وليس عامل مودولو.
تأخذ النتيجة دائمًا إشارة الطرف الأول (المقسوم)، بغض النظر عن إشارة الطرف الثاني:
5 % -2 // 1
-5 % 2 // -1
يمكنك تقريب عدد عشري باستخدام الطريقة rounded().
افتراضيًا، تقرّب rounded() إلى أقرب عدد صحيح.
ويمكنك أيضًا تمرير قاعدة تقريب محددة، مثل .up أو .down:
let x = 3.14
let y = x.rounded() // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up) // 4.0
عندما تعرّف ثابتًا أو متغيرًا عدديًا دون تحديد النوع، يستنتج Swift نوعه:
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
لإجراء عمليات بين قيم من أنواع مختلفة، حوّل إحدى القيم باستخدام مُهيّئات النوع مثل Double(_:) أو Int(_:):
let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0
let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)
في هذا التمرين، ستكتب كودًا لمساعدة مستقل على التواصل مع مدير مشروع. مهمتك هي توفير بعض الأدوات المساعدة لحساب الأسعار اليومية والشهرية بسرعة، مع خصم معيّن إن وُجد.
نضع أولًا بعض القواعد بين المستقل ومدير المشروع:
أحيانًا يعرض المستقل تطبيق خصم على سعره اليومي (على سبيل المثال لعملائه الأكثر ولاءً أو العملاء غير الربحيين).
تُنمذَج الخصومات كأعداد كسرية تمثّل نسبًا مئوية، على سبيل المثال 25.0 (25%).
نفّذ دالة تُسمى dailyRateFrom لحساب السعر اليومي بمعلومية السعر بالساعة كمعامل.
يحدّد العقد أن اليوم يحتوي على 8 ساعات قابلة للفوترة.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
يجب أن يكون السعر اليومي المُرجَع من النوع Double.
نفّذ دالة monthlyRateFrom لحساب السعر الشهري بعد الخصم.
تأخذ معاملين: السعر بالساعة والخصم بالنسبة المئوية.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
يجب تقريب السعر الشهري المُرجَع لأعلى (إلى أقرب عدد صحيح أكبر).
نفّذ دالة workdaysIn تأخذ ميزانية وسعرًا بالساعة وخصمًا، وتحسب عدد أيام العمل الكاملة التي تغطيها.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
يجب تقريب عدد الأيام المُرجَع لأسفل (إلى أقرب عدد صحيح أصغر).
سجّل في Exercism لتتعلّم وتتقن Swift عبر 35 مفهومًا116 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.