توفّر 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)
في هذا التمرين ستكتب كودًا لمساعدة مستقل في التواصل مع عملائه حول أسعار مشاريع معيّنة. ستكتب بعض الدوال المساعدة لحساب التكاليف للعملاء بسرعة.
يتواصل أحد العملاء مع المستقل للاستفسار عن أسعاره. يوضّح المستقل أنه يعمل 8 ساعات يوميًا. لكن المستقل يعرف فقط سعره بالساعة لهذا المشروع. ساعده في تقدير السعر اليومي بمعلومية السعر بالساعة.
نفّذ الدالة dailyRateFrom(hourlyRate:) التي تأخذ الوسيط hourlyRate الذي يحمل سعر المستقل بالساعة.
يجب أن تُرجع الدالة السعر اليومي بناءً على السعر بالساعة.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
يجب أن يكون السعر اليومي المُرجَع من النوع Double.
أحيانًا يهتم عميل بتعيين المستقل لفترة زمنية أطول. المستقل مستعد لتقديم خصم للعميل، لكن فقط إذا عيّنه لمدة شهر على الأقل. يوجد في الإجمالي 22 يوم عمل. ساعد المستقل في حساب سعره الشهري بمعلومية سعره بالساعة والنسبة المئوية المخصومة من السعر الثابت التي هو مستعد لتقديمها، مقرّبةً إلى أقرب عدد صحيح.
نفّذ الدالة monthlyRateFrom(hourlyRate:withDiscount:) التي تأخذ الوسيطين hourlyRate الذي يحمل سعر المستقل بالساعة، وwithDiscount الذي يحمل الخصم الذي يرغب المستقل في تقديمه للعميل.
يجب أن تُرجع الدالة السعر الشهري مقرّبًا إلى أقرب عدد صحيح.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
في يوم آخر، يعرض مدير مشروع على المستقل العمل في مشروع بميزانية ثابتة. بمعلومية الميزانية الثابتة وسعر المستقل بالساعة، ساعده في حساب عدد الأيام التي سيعملها حتى تنفد الميزانية. ضع في الاعتبار أن المستقل في هذا السيناريو مستعد دائمًا لتقديم الخصم بغض النظر عن عدد الأيام التي سيُعيَّن فيها. يجب أن تكون النتيجة مقرّبة لأسفل إلى أقرب عدد صحيح.
نفّذ الدالة workdaysIn(budget:hourlyRate:withDiscount:) التي تأخذ الوسائط:
budget الذي يحمل ميزانية المشروع.hourlyRate الذي يحمل سعر المستقل بالساعة.withDiscount الذي يحمل الخصم الذي يرغب المستقل في تقديمه للعميل.يجب أن تُرجع الدالة عدد أيام العمل التي سيعملها المستقل في المشروع مقرّبًا لأسفل.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
سجّل في Exercism لتتعلّم وتتقن Swift عبر 35 مفهومًا116 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.