Swift Academy · درس

نمذجة آلات الحالات باستخدام التعدادات

مثّلوا انتقالات حالة التطبيق بأمان باستخدام تعداد Swift.

الدرس 4 من 412 خطوة

نمذجة آلات الحالات باستخدام التعدادات درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا

تُعدّ التعدادات مثالية لنمذجة آلات الحالات المنتهية. كل حالة تمثل حالةً في الآلة، والانتقالات هي دوال تُعيد الحالة التالية. يجعل هذا النهج الحالات غير الصالحة غير قابلة للتمثيل.

تعداد حالات بسيط

```swift enum TrafficLight { case red, yellow, green func next() -> TrafficLight { switch self { case .red: return .green case .green: return .yellow case .yellow: return .red } } } var light = TrafficLight.red light = light.next() // .green ```

حالات مع بيانات مرتبطة

```swift enum LoadState { case idle case loading(progress: Double) case loaded(T) case failed(Error) } var state: LoadState<[String]> = .idle state = .loading(progress: 0.5) state = .loaded(["alice","bob"]) ```

دالة الانتقال

```swift func transition(_ state: LoadState, event: AppEvent) -> LoadState { switch (state, event) { case (.idle, .startFetch): return .loading(progress: 0) case (.loading, .progress(let p)): return .loading(progress: p) case (.loading, .success(let d)): return .loaded(d) case (.loading, .error(let e)): return .failed(e) default: return state } } ```

لماذا نستخدم آلات الحالات المعتمدة على التعدادات

المزايا: • ‏switch شامل — يفرض المترجم معالجة جميع الحالات • التركيبات غير الصالحة مستحيلة، مثل `loaded` من دون بيانات • الحالة قيمة — يسهل اختبارها ونسخها وتسجيلها • يمكن لواجهة المستخدم التبديل وفق الحالة وعرض ما يناسبها

عرض واجهة المستخدم انطلاقًا من الحالة

```swift func render(_ state: LoadState<[User]>) { switch state { case .idle: showEmptyView() case .loading(let p): showProgress(p) case .loaded(let users): showList(users) case .failed(let err): showError(err) } } ```

آلة حالات المشغّل

```swift enum PlayerState { case stopped case playing(track: String, position: TimeInterval) case paused(track: String, position: TimeInterval) } ``` تحمل حالتا `playing` و`paused` فقط مسارًا، أما `stopped` فلا تحمله، مما يجعل النموذج موضحًا لذاته.

منع الانتقالات غير الصالحة

```swift extension PlayerState { mutating func play(track: String) { guard case .stopped = self else { return } self = .playing(track: track, position: 0) } mutating func pause() { if case .playing(let t, let p) = self { self = .paused(track: t, position: p) } } } ```

اختبار آلات الحالات

```swift func testLight() { var l = TrafficLight.red assert(l.next() == .green) assert(l.next().next() == .yellow) } ``` تكون آلات الحالات ذات دوال الانتقال النقية قابلة للاختبار الوحداتي بسهولة، ولا تحتاج إلى mocks.

تركيب آلات الحالات

غالبًا ما تحتوي التطبيقات الكبيرة على عدة آلات حالات تعمل معًا: ```swift struct AppState { var auth: AuthState var data: LoadState<[Article]> var ui: UIState } ``` يمكنكم تركيبها في بنية حالة جذرية واحدة ضمن معماريات على نمط Flux/Redux.

تحقّق سريع

ما الذي يجعل آلات الحالات المعتمدة على التعدادات آمنة وقت الترجمة؟

مراجعة

أهم النقاط: • كل حالة = حالة في الآلة، وكل انتقال = دالة تُعيد الحالة التالية • تحمل القيم المرتبطة البيانات الخاصة بكل حالة • يضمن switch الشامل معالجة الحالات بإلزام من المترجم • يسهل اختبار دوال الانتقال النقية باختبارات الوحدة • يمكن تركيب عدة آلات حالات في بنية حالة جذرية اكتملت الدورة! التالي: تركيب البروتوكولات.
البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

الأسئلة الشائعة

هل درس «نمذجة آلات الحالات باستخدام التعدادات» مجاني؟

نعم — نص درس «نمذجة آلات الحالات باستخدام التعدادات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «نمذجة آلات الحالات باستخدام التعدادات»؟

مثّلوا انتقالات حالة التطبيق بأمان باستخدام تعداد Swift. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «نمذجة آلات الحالات باستخدام التعدادات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. القيم الخام وCaseIterable
  2. القيم المرتبطة للبيانات الغنية
  3. التعدادات غير المباشرة والبنى التكرارية
  4. نمذجة آلات الحالات باستخدام التعدادات
← العودة إلى Swift Academy