Swift: عوامل Swift

العوامل هي رموز الحساب في كودك. يغطي هذا الدرس جميع العوامل الأساسية في Swift وكيفية استخدامها بفعالية.

1. ما ستتعلمه


2. قصة حقيقية: محلل مالي

(1) نقطة الألم: قسمة Int فقدت الكسور، مما أفسد تقريرًا

Bob هو محلل مالي في شركة ناشئة احتاج لحساب نمو الإيرادات ربع السنوية. كتب هذا الكود:

SWIFT
let currentRevenue = 250_000
let previousRevenue = 200_000
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("Growth rate: \(growthRate)%")

المخرجات:

TEXT 📖 للعرض فقط
Growth rate: 0%

عرف Bob أن معدل النمو الفعلي يجب أن يكون 25%، لكن الكود أخرج 0%. السبب: قسمة Int تقطع الكسور — 50,000 / 200,000 تساوي 0 في الحساب الصحيح، والضرب في 100 لا يزال يعطي 0.

(2) الحل: استخدام Double للحسابات الدقيقة

تحويل البيانات إلى Double يحافظ على الكسور أثناء القسمة:

SWIFT
let currentRevenue = 250_000.0
let previousRevenue = 200_000.0
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("Growth rate: \(growthRate)%")

المخرجات:

TEXT 📖 للعرض فقط
Growth rate: 25.0%

تم حل المشكلة فورًا. ثم راجع Bob 12 شهرًا من التقارير ووجد 4 حالات أخرى لفقدان الدقة من قسمة Int.

(3) النتيجة: دقة التقارير بعد استخدام العوامل الصحيحة

البُعد قبل بعد
الأخطاء العددية 3-5 شهريًا 0
وقت مراجعة التقرير ساعتان لكل تقرير 15 دقيقة
ثقة الفريق "قد يكون التقرير خاطئًا" "البيانات موثوقة"
فهم العوامل غير واضح بشأن سلوك قسمة Int يختار النوع الصحيح بشكل استباقي

3. العوامل الحسابية وعوامل التعيين

العوامل الحسابية تنفذ الحسابات الرياضية؛ عوامل التعيين تخزن القيم في المتغيرات. إنها العوامل الأكثر استخدامًا في Swift.

100%
graph LR
    A[العوامل] --> B["حسابية: + - * / %"]
    A --> C["تعيين: = += -= *= /="]
    B --> D[الحسابات ا��عددية]
    C --> E[تحديث قيم المتغيرات]
العامل الاسم مثال النتيجة
+ جمع 10 + 3 13
- طرح 10 - 3 7
* ضرب 10 * 3 30
/ قسمة 10 / 3 3 (Int يقطع)
% باقي 10 % 3 1

(1) العوامل الحسابية

SWIFT
let a = 15
let b = 4
let sum = a + b      // 19
let diff = a - b     // 11
let prod = a * b     // 60
let quot = a / b     // 3 (Int division truncates decimals)
let rem = a % b      // 3 (15 / 4 = 3 remainder 3)
⚠️ ملاحظة: قسمة Int تقطع الجزء العشري مباشرة بدون تقريب. 15 / 4 تعطي 3، ليس 3.75. استخدم Double عندما تحتاج نتائج عشرية.

(2) عوامل التعيين المركب

تجمع عوامل التعيين المركب بين الحساب والتعيين في شكل أكثر إيجازًا:

SWIFT
var score = 10
score += 5     // Equivalent to score = score + 5 -> 15
score -= 3     // Equivalent to score = score - 3 -> 12
score *= 2     // Equivalent to score = score * 2 -> 24
score /= 4     // Equivalent to score = score / 4 -> 6
العامل المركب المعنى مثال المكافئ
+= جمع وتعيين x += 5 x = x + 5
-= طرح وتعيين x -= 3 x = x - 3
*= ضرب وتعيين x *= 2 x = x * 2
/= قسمة وتعيين x /= 4 x = x / 4

▶ مثال: متتبع المصروفات الشهرية

SWIFT
// ============================================
// Track monthly expense totals
// Demonstrates arithmetic and compound assignment operators
// ============================================
var monthlyExpenses = 0.0
let rent = 1200.00
let groceries = 450.50
let transportation = 85.00
let entertainment = 200.00
monthlyExpenses += rent
monthlyExpenses += groceries
monthlyExpenses += transportation
monthlyExpenses += entertainment
let annualExpenses = monthlyExpenses * 12
let weeklyAverage = monthlyExpenses / 4.33
print("Monthly total: $\(monthlyExpenses)")
print("Annual total: $\(annualExpenses)")
print("Weekly average: $\(String(format: "%.2f", weeklyAverage))")

المخرجات:

TEXT 📖 للعرض فقط
Monthly total: $1935.5
Annual total: $23226.0
Weekly average: $447.23

4. عوامل المقارنة والعوامل المنطقية

عوامل المقارنة تقارن قيمتين وتعيد نتيجة Bool؛ العوامل المنطقية تجمع شروطًا منطقية متعددة.

100%
graph TB
    A[عوامل المقارنة] --> B["== يساوي"]
    A --> C["!= لا يساوي"]
    A --> D["> أكبر من"]
    A --> E["< أقل من"]
    A --> F[">= أكبر من أو يساوي"]
    A --> G["<= أقل من أو يساوي"]
    B --> H[تعيد Bool]
    C --> H
    D --> H
العامل الاسم مثال النتيجة
== يساوي 5 == 5 true
!= لا يساوي 5 != 3 true
> أكبر من 5 > 3 true
< أقل من 5 < 3 false
>= أكبر من أو يساوي 5 >= 5 true
<= أقل من أو يساوي 5 <= 3 false

(1) عوامل المقارنة

SWIFT
let age = 18
let isAdult = age >= 18     // true
let canDrive = age >= 16    // true
let isSenior = age > 65     // false
let userName = "Alice"
let isAdmin = userName == "Admin"  // false

(2) العوامل المنطقية

العامل الاسم المعنى مثال
&& AND يجب أن يكون كلا الشرطين صحيحين age >= 18 && hasLicense
` ` OR
! NOT يعكس القيمة !isLoggedIn
SWIFT
let hasTicket = true
let isVip = false
let canEnter = hasTicket && isVip   // false
let canAccess = hasTicket || isVip  // true
let isNotVip = !isVip               // true

▶ مثال: فحص صلاحيات المستخدم

SWIFT
// ============================================
// Check if a user has access to the admin panel
// Demonstrates comparison and logical operators
// ============================================
let userAge = 22
let hasVerifiedEmail = true
let isBanned = false
let isAdmin = false
let isAdult = userAge >= 18
let canAccessSystem = isAdult && hasVerifiedEmail && !isBanned
let hasAdminAccess = isAdmin
let finalAccess = canAccessSystem || hasAdminAccess
print("Adult: \(isAdult)")
print("Email verified: \(hasVerifiedEmail)")
print("Not banned: \(!isBanned)")
print("Final access: \(finalAccess)")

المخرجات:

TEXT 📖 للعرض فقط
Adult: true
Email verified: true
Not banned: true
Final access: true

5. العامل الثلاثي وتحويل النوع

العامل الثلاث�� هو بديل موجز لـ if-else؛ تحويل النوع العددي يسمح للأنواع المختلفة بالعمل معًا.

(1) العامل الشرطي الثلاثي

الصياغة: condition ? valueA : valueB — تعيد valueA إذا كان الشرط صحيحًا، وإلا تعيد valueB:

SWIFT
let score = 85
let grade = score >= 60 ? "Pass" : "Fail"
print(grade)  // Pass
الأسلوب عدد الأسطر القابلية للقراءة
نسخة if-else 5 أسطر واضحة لكن مطولة
النسخة الثلاثية سطر واحد موجزة، الأفضل للشروط البسيطة
SWIFT
var result: String
if score >= 60 {
    result = "Pass"
} else {
    result = "Fail"
}
let result2 = score >= 60 ? "Pass" : "Fail"
⚠️ ملاحظة: العامل الثلاثي يعمل بشكل أفضل للاختيارات البسيطة إما/أو. عندما تصبح الشروط معقدة، استخدم if-else.

(2) تحويل النوع العددي

يتطلب Int وDouble تحويلاً صريحًا بينهما:

SWIFT
let x = 10       // Int
let y = 3.5      // Double
let result1 = Double(x) + y  // 13.5
let result2 = x + Int(y)     // 13 (y truncated to 3)
التحويل الصياغة النتيجة
Int إلى Double Double(intVal) يحتفظ بالجزء الصحيح، يضيف .0
Double إلى Int Int(doubleVal) يقطع الكسور، بدون تقريب
Int إلى String String(intVal) يحول إلى نص

▶ مثال: حاسبة الخصم

SWIFT
// ============================================
// Calculate discount based on purchase amount
// Demonstrates the ternary operator and type conversion
// ============================================
let purchaseAmount = 120.0
let itemCount = 3
let discountRate: Double = purchaseAmount >= 100 ? 0.9 : 1.0
let finalAmount = purchaseAmount * discountRate
let averagePrice = finalAmount / Double(itemCount)
print("Purchase amount: $\(purchaseAmount)")
print("Discount: \(Int((1 - discountRate) * 100))%")
print("Final amount: $\(finalAmount)")
print("Item count: \(itemCount)")
print("Average price per item: $\(String(format: "%.2f", averagePrice))")
let freeShipping = finalAmount >= 100 ? "Free Shipping" : "Shipping Fee"
print("Shipping: \(freeShipping)")

المخرجات:

TEXT 📖 للعرض فقط
Purchase amount: $120.0
Discount: 10%
Final amount: $108.0
Item count: 3
Average price per item: $36.00
Shipping: Free Shipping

6. مثال كامل: محلل الميزانية الشهرية

SWIFT
// ============================================
// Monthly budget analysis tool
// Demonstrates arithmetic, comparison, logical, and ternary operators
// ============================================
import Foundation
// 1. Income and expense data
let salary = 5200.0
let rent = 1400.0
let food = 600.0
let transport = 120.0
let utilities = 200.0
let entertainment = 300.0
// 2. Calculate using arithmetic and compound assignment
var totalExpenses = 0.0
totalExpenses += rent
totalExpenses += food
totalExpenses += transport
totalExpenses += utilities
totalExpenses += entertainment
let savings = salary - totalExpenses
let savingsRate = savings / salary * 100
// 3. Use comparison and ternary to assess financial health
let isHealthy = savingsRate >= 20
let advice = isHealthy ? "Healthy" : "Needs Improvement"
// 4. Logical check: any single category over budget?
let rentTooHigh = rent > salary * 0.3
let foodTooHigh = food > salary * 0.15
let needsAdjustment = rentTooHigh || foodTooHigh
print("=== Monthly Budget ===")
print("Income: $\(salary)")
print("Expenses: $\(totalExpenses)")
print("Savings: $\(String(format: "%.2f", savings))")
print("Savings Rate: \(Int(savingsRate))%")
print("Status: \(advice)")
print("Needs Adjustment: \(needsAdjustment)")
// 5. Type conversion example
let categoryCount = 5
let avgPerCategory = totalExpenses / Double(categoryCount)
print("Categories: \(categoryCount), Avg: $\(String(format: "%.2f", avgPerCategory))")

المخرجات:

TEXT 📖 للعرض فقط
=== Monthly Budget ===
Income: $5200.0
Expenses: $2620.0
Savings: $2580.0
Savings Rate: 49%
Status: Healthy
Needs Adjustment: false
Categories: 5, Avg: $524.00

❓ أسئلة شائعة

س كيف أحصل على نتائج عشرية من قسمة Int؟
ج حول مُعاملًا واحدًا على الأقل إلى Double. مثلاً، Double(10) / 3 يعطي 3.3333. أو صرّح عنه كـ 10.0 / 3 من البداية.
س هل يمكن استخدام عامل % مع Double؟
ج لا. % في Swift يعمل فقط مع الأعداد الصحيحة. للباقي العشري، استخدم طريقة truncatingRemainder(dividingBy:).
س هل يستخدم && و|| تقييم الدائرة القصيرة؟
ج نعم. && لن يقيم الجانب الأيمن إذا كان الأيسر false؛ || لن يقيم الجانب الأيمن إذا كان الأيسر true. استخدم هذا بحكمة لتحسين الكفاءة.
س هل تعيد عوامل التعيين المركب قيمة؟
ج لا. x += 5 هي جملة، وليست تعبيرًا، ولا يمكن استخدامها في التعيينات أو المقارنات. هذا يختلف عن C.

📖 ملخص


📝 تمارين

  1. مبتدئ: استخدم العوامل الحسابية لحساب مساحة ومحيط مستطيل بطول 12.5 وعرض 8.3. أخرج النتائج.
  2. متوسط: اكتب برنامجًا لتحديد ما إذا كانت السنة كبيسة. القاعدة: تقبل القسمة على 4 لكن ليس على 100، أو تقبل القسمة على 400. استخدم العوامل المنطقية لدمج الشروط.
  3. متقدم: اكتب حاسبة فاتورة كهرباء. السعر الأساسي $0.12/ك.و.س. للاستهلاك الشهري الذي يتجاوز 300ك.و.س، يُحسب الفائض بسعر $0.15/ك.و.س. استخدم العامل الثلاثي والعوامل الحسابية لحساب الفاتورة الإجمالية.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%