Nawaf Alshareef

Members
  • عدد منشوراتي

    13
  • تاريخ الإنضمام

  • تاريخ اخر زياره

السمعه بالموقع

16 Good

عن العضو Nawaf Alshareef

  • الرتبه
    مبدع مثابر
  • تاريخ الميلاد 01/08/95

معلومات عامة

  • الجنس
    ذكر
  • السكن
    لاس فيغاس السعودية - Ryadh
  • هواياتي
    النوم ❤

اخر الزوار

759 زياره للملف الشخصي
  1. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته مقدمة سأتحدث في هذا الموضوع عن دورة حياة المشروع البرمجي ولن يكون موضوع واحد فقط وانما عبارة عن سلسلة مواضيع سأتحدث بها عن SPLC -وتعني Software Project Life Cycle- للمستقلين، وأعني بالمستقلين المبرمجين الذين يعملون بشكل مُستقل وليس مع فريق، والسبب الرئيسي لتحدثي عن هذا الموضوع هو انعدام جودة أغلب المشاريع البرمجية التي تتم بشكل فردي أو يتوقف تطويرها في مرحلةٍ ما بسبب عدم فهم الكثير من الأمور التي تتعلق بالمشروع البرمجي وقد تسبق كتابة الكود ايضاً. ملاحظة: SPLC هو مصطلح غير علمي والمصطلح المعروف SDLC -وتعني System Development Life Cycle- ولكن في هذه الدروس لن أتحدث عن دورة حياة تطوير المشروع بشكل خاص وانما عن دورة حياة المشروع البرمجي بشكل عام. جدول المصطلحات الهامة المستخدمة تمت الإشارة للمصطلحات الهامة باللون الأخضر المصطلح الوصف Ad Hoc Approach الطريقة الخاطئة التي يتبعها المستقلين حالياً. SDLC System Development Life Cycle دورة حياة تطوير البرمجيات. SPLC Software Project Life cycle دورة حياة المشروع البرمجي. وهو مصطلح غير علمي كما ذكرنا. Standard هي عبارة عن معايير ونماذج تحددها شركات كبيرة، وهذه النماذج مختبرة، ومجربة، وتم اثبات جدارتها، وتمنح الشركات المطبقة لهذه النماذج او المعايير بالشكل الصحيح شهادات اعتماد. Phases مراحل. Models نماذج. Build اصدار من البرنامج يكون مكتمل ويكون محدد باصدار؛ مثال: Buld 1، Build2...الخ. GUI Graphical User Interface واجهة المستخدم. AI Artificial intelligence الذكاء الاصطناعي. اولاً ماهو المشروع البرمجي؟ وما الهدف منه اصلاً؟ يوجد الكثير من الأشخاص الراغبين في تعلم البرمجة او لنكون دقيقين يرغبون في تعلم لغة برمجة، وذلك بهدف برمجة تطبيق او موقع على الانترنت، او حتى برنامج سطح مكتب، او لعبة...الخ ولكن للرغبة نوعان: نوع قد يكون بهدف، والأخر قد لا يكون بهدف؛ ومن هذا المنطلق نستطيع القول ان المشروع البرمجي هو هدف مبني على رغبة، وليس رغبة بحد ذاتها، وهذا الهدف لا يكون الا لحل مشكلة انسانية او تسريع اعمال او للقيام بالامور الحسابية بشكل فاعل وأسرع، أو حتى بالمجال الطبي أو بالمجال الاقتصادي، وبالغالب كل مجالات الحياة الانسانية، وبسبب هذه الأهداف أصبحت الرغبة بتسريع الأمور وتسهيلها هاجس انساني بحت، حتى وصلنا اليوم الى الـ AI وتقدمنا فيه بشكل كبير. خلاصة: اذاً فالمشروع البرمجي هو عبارة عن برنامج مبني على الحاسوب والهدف منه هو حل المشكلات الإنسانية او تسهيل الحياة او تسريع أداء المهام، أو حتى للمتعة. ثانياً ماهي المشكلة بالطريقة المتبعة حالياً من قبل المستقلين؟ للأسف فالكثير من المبرمجين المستقلين حالياً يعملون على الكثير من المشاريع البرمجية سواءً مشاريع شخصية لمسعىً ربحي او مشاريع لأفراد وجميع هذه المشاريع تتم بشكل عشوائي وبطريقة نسميها علمياً Ad Hoc Approach. تعريف Ad Hoc Approach: هي الحلول المتبعة او الطرائق التي يتخذها المبرمج لإنجاز مشروعه، وهذه الحلول او الطرائق تكون غالباً مبنية على رؤية المبرمج -وليس بطرق مُنظمة بُنيت على الكثير من التجارب التي تم اثباتها-، وغالباً هذه الطرق التي يتخذها المبرمج غير قابلة للاستخدام في مشاريع او اهداف اخرى وذلك لعدم كفائتها فهي غالباً وإن لم تكن دائماً تُنتج مُخرجات ذات جودة رديئة تكون غير قابلة للإختبار، أو التطوير، او قد تكون غير قابلة للتعديل لاحقاً. وهذه العادة المؤسفة والمتبعة من قبل الكثير من المستقلين قد تطفىء الضوء عن كثير من المشاريع سواءً (مواقع الكترونية، تطبيقات للهواتف الذكية، أو ألعاب) مُبكراً وذلك لرداءة جودتها كما ذكرنا سابقاً، وقد ينتهي المشروع الى قضايا قانونية يرفعها صاحب المشروع على المستقل المنفذ لهذا المشروع بسبب رداءة المنتج او عدم تطبيق طلب الطرف الأول بشكل صحيح. ثالثاً ماهي دورة حياة تطوير البرمجيات (SDLC): SDLC او System Development Life Cycle هي دورة حياة تطوير البرمجيات، وتعتبر هذه الدورة بكل مراحلها من ضمن مجالات هندسة البرمجيات، والتي تهدف لتفصيل الإجراءات والأساليب المتبعة لحوكمة وضبط عمل فريق تطوير البرمجيات، والتي أصبحت أساس من أساسيات بناء اي مشروع برمجي، وقد تختلف المراحل من مشروع الى أخر حسب حجم واحتياجات المشروع، وتطبيق جميع المراحل يجعل من المشروع ذا جودة عالية جداً، وموافق للمعايير القياسية (Standard). مراحل دورة حياة تطوير البرمجيات (SDLC): نظراً لأن الأخطاء التي يتم اكتشافها مؤخراً تكون مكلفة وصعبة المعالجة؛ لذا فتصور دورة الحياة يُسهل لنا التنبؤ بالأخطاء مُبكراً ويسمح للمبرمجين بالتركيز على جودة التطبيق والوقت المحدد لتنفيذ البرنامج، وايضاً وضع التكلفة المطلوبة في الاعتبار؛ وتتضمن دورة الحياة التي يمر بها تطوير البرمجيات المراحل الأتية: 1 - Feasibility Study دراسة الجدوى. 2 - Analysis التحليل. 3 - Design التصميم. 4 - Implementation التنفيذ. 5 - Testing الاختبار. 6 - Maintenance الصيانة. 7 - Evaluation التقدير. المراحل الأساسية والمتعارف عليها: 1 - Planning التخطيط. 2 - Analysis التحليل. Requirement المتطلبات Definition المفاهيم 4 - Design التصميم. 5 - Implementation التنفيذ. 6 - Testing الاختبار. 7 - Deployment التنصيب. 8 - Maintenance الصيانة. 9 - Evaluation التقدير. وهذه المراحل Phases هي مراحل مهمة جداً وأساسية في بناء المشاريع البرمجية، وكما ذكرنا سابقاً أن هذه المراحل قد لا تدخل جميعها في مرحلة بناء المشروع البرمجي وانما يتم انتقائها حسب الاحتياج، ولكن نؤكد لكم أن بعضاً من هذه المراحل الزامية ويجب ان تدخل في كُل مشروع برمجي احترافي وذو جودة عالية وقد تم تحديدها باللون الأحمر. ملاحظة: أساس من أساسيات بدأ او تنفيذ اي مشروع برمجي هو اختيار طريقة تنفيذ SDLC وفي الشطر التالي من هذا الموضوع سنتحدث عن هذه الطرائق او النماذج. ملاحظة: بشكل عام جميع المراحل أعلاه قد تكون تسلسلية فلا تبدأ مرحلة حتى تنتهي المرحلة التي تسبقها. ملاحظة: قد تختلف مسميات بعض المراحل فمثلاً Implementation يطلق عليها احيانا Development. أ. مرحلة التخطيط: في هذه المرحلة يتم عمل دراسة لجدوى المشروع، والتواصل مع العميل لفهم المشروع وبناء صورة مبدئية له، والتحقق من الامكانيات لتنفيذ هذا المشروع، فهي تعتبر مرحلة اتخاذ قرار مبدئي. ب. التحليل: تعتبر من أهم مراحل دورة حياة المشروع البرمجي، وهي البادئة الفعلية لل SDLC حيث يتم في هذه المرحلة الاقتراب أكثر من العملاء لفهم المشروع، وتحديد مُتطلباته Requirement، وتحديد المفاهيم والأهداف وايطار المشكلة، وحذف المفاهيم الغير منطقية واستبيان وفهم المشروع بشكل أكبر، فهي تعتبر خطوة تحديد الطلب، وعلى أساسها يتم تنفيذ المراحل التالية. Requirement المتطلبات: هي رغبات العميل، وتطلعاته وهي مهمة جداً في فهم المشروع وتحديد مشكلة العميل وماذا يريد بالضبط. ج. مرحلة التصميم: هي المرحلة التي يتم من خلالها عمل التصميم المبدئي للمشروع، ولا نعني بالتصميم ال GUI وانما مخططات المشروع تماماً مثل المهندس المعماري عندما يرسم مخططات المنزل قبل بنائه، فهذه الخطوة اساسية جداً ولاحقاً سأشرح التصميمات التي يحتاج المستقل ان يعملها لبناء مشروعه بشكل احترافي. د. مرحلة الاختبار: في هذه المرحلة يتم اختبار المشروع، والتحقق من أنه يعمل بشكل جيد ويوجد نوعين من الاختبارات الأساسية Black Box Testing و White Box Testing وسنتعرف على هذه الانواع لاحقاً. ك. التنصيب: وهي عملية نقل المشروع من بيئة التطوير الى بيئة التشغيل في مكان العميل. ص. الصيانة: أهم مراحل SDLC وقد تكون الأكثر ثمناً والأطول في المدة. رابعاً كيف ابدأ المشروع البرمجي؟ هناك الكثير من الطرق أو النماذج التي يتبعها اغلب المستقلين المحترفين في المجال البرمجي، وتكون من بداية المشروع حتى مرحلة التسليم ثم التطوير، وهذه النماذج لا استطيع القول انها جيدة ولكنها مستخدمة، وهي أفضل بكثير من Ad Hoc، ونطلق على هذه النماذج مسمى Models، وسأذكر في هذا القسم البعض من هذه الطرائق. ملاحظة: سأطلق على Models لاحقاً بالطرائق أو النماذج. خلاصة: مما تم ذكره سابقاً نستطيع القول أنه لا توجد طريقة واحدة لبدء المشروع البرمجي، وانما هنالك الكثير من الطرق المعترف بها والمجربة تطبيقياً، وجميع هذه الطرق لم تجرب في مشروع واحد وانما لها تاريخ من الفشل والتطوير، ثم الفشل والتطوير، ...، وسلسلة طويلة من قصص فشل وتطوير حتى توصلنا الى Standard عام لهذه الطرائق، وليومنا هذا مازالت اغلب الطرق قيد التطوير. والهدف من هذه الطرق او النماذج هو تطبيق SDLC بالشكل الأمثل. ومن هذه النماذج (الطرق) نذكر: 1 - Code and Fix: وهذه الطريقة مستخدمة كثيراً من قبل أغلب المستقلين وهي سيئة جداً في حال تم تطبيقها لمشروع كبير او متوسط الحجم، وهي بكل بساطة نبدأ بكتابة الشفرة البرمجية حتى ننتهي، في حال ظهور مشاكل نصلحها او حتى نحصل على رضا المستخدم، ثم نبدأ بكتابة بقية الشفرة حتى ننتهي، وفي حال ظهور مشاكل نصلحها او حتى نحصل على رضا المستخدم، ونستمر بهذه الدورة حتى يكتمل المشروع. لاحظ في هذا النموذج استخدمنا مرحلة ال التخطيط، والتنفيذ فقط. وهذه الطريقة مناسبة جداً للمشاريع الصغيرة والتي لا تكون حساسة، مثل المواقع الشخصية الصغيرة، أو التطبيقات المصغرة جداً مثل تطبيقات عرض الأخبار أو الألعاب الصغيرة. 2 - Incremental: هذه الطريقة تستخدم كثيراً في التطبيقات العامة التي يتم تطويرها وبيعها للمستخدمين، وهذه الطريقة جيدة ولكن لها سلبياتها للأسف، وهي بكل بساطة أن نعمل اصدارات للمشروع البرمجي وكل اصدار يسمى Build وكل Build أثناء تنفيذه يتم تطبيق جميع مراحل SDLC تقريباً بشكل تكراري Itrative، وسنتحدث عن هذه المراحل في موضوع أخر ان شاء الله. 3 - Agail: هذه الطريقة هي دمج مابين Incremental و Itrative وتركز على تنفيذ المشروع بالشكل الذي يحقق رضا العملاء، عن طريق التسليم السريع للمنتج، وهذه الطريقة تعتبر سلسة جداً من ناحية الاستخدام وهي من الطرق التي يستطيع استخدامها المستقلين. ملاحظة: هذه بعض النماذج التي احببت ذكرها، وهي نماذج جيدة جداً، ويستطيع المستقل استخدامها بسلاسة نوعاً ما. خلاصة: اذاً اجابتاً على السؤال: كيف ابدأ المشروع البرمجي؟ الاجابة تكمن في اختيار الطريقة او النموذج الصحيح؛ واختيار نموذج او طريقة العمل ليس سهل وانما يتطلب خبرة عالية وفهم عميق للمشروع، ولكن لا تقلق حتى لو كنت مبتدأ فمعرفتك البسيطة بهذه النماذج سوف يساعدك كثيراً على اختيار الصحيح -تقريباً- منها. على كُل حال فهذه النماذج قد لا تكون واضحة للبعض ولكن لاحقاً في موضوع أخر سنشرح هذا النماذج بشكل أفضل ونشرح طرق الاختيار. خامساً تحليل وتلخيص المعلومات: اذا لنربط المعلومات ونوضح الأفكار ونضمن فهمك للموضوع بشكل جيد سنضع نقاط وسيتم تلخيص كل نقطة. ماهي المشكلة مع الطريقة التي يتبعها المستقلين في مشاريعهم البرمجية. ماهي المخاطر الممكنة او المتوقعة التي تسببها الطرق الخاطئة في تنفيذ المشاريع البرمجية. كيف ابدأ ببناء مشروع برمجي ذو جودة عالية. SDLC و SDLC Models. أ. ماهي المشكلة مع الطريقة التي يتبعها المستقلين في مشاريعهم البرمجية؟: المشكلة باختصار تكمن في جودة المنتج، فتنفيذ المشاريع البرمجية لا يكون فقط بكتابة الكود، وانما التخطيط الصحيح والتصميم الأمثل، واتباع الطريقة الأكثر فعالية لضمان بناء المشروع بجودة عالية، وسهولة اختباره، وامكانية صيانته وتطويره لاحقاً. ب. ماهي المخاطر الممكنة أو المتوقعة التي تسببها الطرق الخاطئة في تنفيذ المشاريع البرمجية؟: الجودة، صعوبة الاختبار والتحقق، صعوبة الصيانة، و القضايا القانونية. ج. كيف ابدأ ببناء مشروع برمجي ذو جودة عالية؟: لبناء مشروع برمجي ذو جودة عالية، يجب ان تبدأ اولاً بفهم المشروع بشكل صحيح، ثم كتابة متطلبات المشروع، ثم عمل التصميمات التوضيحية وتأكيد فهم المشروع، ثم التنفيذ، ثم الاختبار، ولاحقاً الصيانة، وكل ماتم ذكره سابقاً من مراحل SDLC والتي يتم تنفيذها بشكل فعال من خلال SDLC Models. د. SDLC و SDLC Models: دورة حياة تطوير المشروع البرمجي SDLC هي مجموعة مراحل يجب تنفيذها لبناء المشروع البرمجي بشكل صحيح، وطريقة تنفيذ هذه المراحل يكمن من خلال نماذج دورة حياة تطوير المشروع البرمجي SDLC Models. خاتمة من المتوقع كثيراً خصوصاً مع كثرة المُصطلحات والأفكار أن يكون فهمك لأهمية SPLC غير كامل وقد يكون مُبهم، لذلك لا تقلق ففي المواضيع القادمة والتي ستكون تحت عنوان دورة حياة تطوير البرمجيات: X -حيث أن X يمثل العنوان الفرعي- سنتحدث بالتفصيل عن مراحل SDLC، وعن الأدوات، والنماذج التي سوف تساعدك كمستقل على ادارة مشروعك البرمجي بشكل احترافي لتضمن جودته. الموضوع التالي دورة حياة تطوير البرمجيات: المرحلة الأولى التخطيط هذا وصلى الله وسلم على نبينا محمد وعلى آله وصحبه اجمعين
  2. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته مقدمة سأتحدث في هذا الموضوع عن دورة حياة المشروع البرمجي ولن يكون موضوع واحد فقط وانما عبارة عن سلسلة مواضيع سأتحدث بها عن SPLC -وتعني Software Project Life Cycle- للمستقلين، وأعني بالمستقلين المبرمجين الذين يعملون بشكل مُستقل وليس مع فريق، والسبب الرئيسي لتحدثي عن هذا الموضوع هو انعدام جودة أغلب المشاريع البرمجية التي تتم بشكل فردي أو يتوقف تطويرها في مرحلةٍ ما بسبب عدم فهم الكثير من الأمور التي تتعلق بالمشروع البرمجي وقد تسبق كتابة الكود ايضاً. ملاحظة: SPLC هو مصطلح غير علمي والمصطلح المعروف SDLC -وتعني System Development Life Cycle- ولكن في هذه الدروس لن أتحدث عن دورة حياة تطوير المشروع بشكل خاص وانما عن دورة حياة المشروع البرمجي بشكل عام. جدول المصطلحات الهامة المستخدمة تمت الإشارة للمصطلحات الهامة باللون الأخضر المصطلح الوصف Ad Hoc Approach الطريقة الخاطئة التي يتبعها المستقلين حالياً. SDLC System Development Life Cycle دورة حياة تطوير البرمجيات. SPLC Software Project Life cycle دورة حياة المشروع البرمجي. وهو مصطلح غير علمي كما ذكرنا. Standard هي عبارة عن معايير ونماذج تحددها شركات كبيرة، وهذه النماذج مختبرة، ومجربة، وتم اثبات جدارتها، وتمنح الشركات المطبقة لهذه النماذج او المعايير بالشكل الصحيح شهادات اعتماد. Phases مراحل. Models نماذج. Build اصدار من البرنامج يكون مكتمل ويكون محدد باصدار؛ مثال: Buld 1، Build2...الخ. GUI Graphical User Interface واجهة المستخدم. AI Artificial intelligence الذكاء الاصطناعي. اولاً ماهو المشروع البرمجي؟ وما الهدف منه اصلاً؟ يوجد الكثير من الأشخاص الراغبين في تعلم البرمجة او لنكون دقيقين يرغبون في تعلم لغة برمجة، وذلك بهدف برمجة تطبيق او موقع على الانترنت، او حتى برنامج سطح مكتب، او لعبة...الخ ولكن للرغبة نوعان: نوع قد يكون بهدف، والأخر قد لا يكون بهدف؛ ومن هذا المنطلق نستطيع القول ان المشروع البرمجي هو هدف مبني على رغبة، وليس رغبة بحد ذاتها، وهذا الهدف لا يكون الا لحل مشكلة انسانية او تسريع اعمال او للقيام بالامور الحسابية بشكل فاعل وأسرع، أو حتى بالمجال الطبي أو بالمجال الاقتصادي، وبالغالب كل مجالات الحياة الانسانية، وبسبب هذه الأهداف أصبحت الرغبة بتسريع الأمور وتسهيلها هاجس انساني بحت، حتى وصلنا اليوم الى الـ AI وتقدمنا فيه بشكل كبير. خلاصة: اذاً فالمشروع البرمجي هو عبارة عن برنامج مبني على الحاسوب والهدف منه هو حل المشكلات الإنسانية او تسهيل الحياة او تسريع أداء المهام، أو حتى للمتعة. ثانياً ماهي المشكلة بالطريقة المتبعة حالياً من قبل المستقلين؟ للأسف فالكثير من المبرمجين المستقلين حالياً يعملون على الكثير من المشاريع البرمجية سواءً مشاريع شخصية لمسعىً ربحي او مشاريع لأفراد وجميع هذه المشاريع تتم بشكل عشوائي وبطريقة نسميها علمياً Ad Hoc Approach. تعريف Ad Hoc Approach: هي الحلول المتبعة او الطرائق التي يتخذها المبرمج لإنجاز مشروعه، وهذه الحلول او الطرائق تكون غالباً مبنية على رؤية المبرمج -وليس بطرق مُنظمة بُنيت على الكثير من التجارب التي تم اثباتها-، وغالباً هذه الطرق التي يتخذها المبرمج غير قابلة للاستخدام في مشاريع او اهداف اخرى وذلك لعدم كفائتها فهي غالباً وإن لم تكن دائماً تُنتج مُخرجات ذات جودة رديئة تكون غير قابلة للإختبار، أو التطوير، او قد تكون غير قابلة للتعديل لاحقاً. وهذه العادة المؤسفة والمتبعة من قبل الكثير من المستقلين قد تطفىء الضوء عن كثير من المشاريع سواءً (مواقع الكترونية، تطبيقات للهواتف الذكية، أو ألعاب) مُبكراً وذلك لرداءة جودتها كما ذكرنا سابقاً، وقد ينتهي المشروع الى قضايا قانونية يرفعها صاحب المشروع على المستقل المنفذ لهذا المشروع بسبب رداءة المنتج او عدم تطبيق طلب الطرف الأول بشكل صحيح. ثالثاً ماهي دورة حياة تطوير البرمجيات (SDLC): SDLC او System Development Life Cycle هي دورة حياة تطوير البرمجيات، وتعتبر هذه الدورة بكل مراحلها من ضمن مجالات هندسة البرمجيات، والتي تهدف لتفصيل الإجراءات والأساليب المتبعة لحوكمة وضبط عمل فريق تطوير البرمجيات، والتي أصبحت أساس من أساسيات بناء اي مشروع برمجي، وقد تختلف المراحل من مشروع الى أخر حسب حجم واحتياجات المشروع، وتطبيق جميع المراحل يجعل من المشروع ذا جودة عالية جداً، وموافق للمعايير القياسية (Standard). مراحل دورة حياة تطوير البرمجيات (SDLC): نظراً لأن الأخطاء التي يتم اكتشافها مؤخراً تكون مكلفة وصعبة المعالجة؛ لذا فتصور دورة الحياة يُسهل لنا التنبؤ بالأخطاء مُبكراً ويسمح للمبرمجين بالتركيز على جودة التطبيق والوقت المحدد لتنفيذ البرنامج، وايضاً وضع التكلفة المطلوبة في الاعتبار؛ وتتضمن دورة الحياة التي يمر بها تطوير البرمجيات المراحل الأتية: 1 - Feasibility Study دراسة الجدوى. 2 - Analysis التحليل. 3 - Design التصميم. 4 - Implementation التنفيذ. 5 - Testing الاختبار. 6 - Maintenance الصيانة. 7 - Evaluation التقدير. المراحل الأساسية والمتعارف عليها: 1 - Planning التخطيط. 2 - Analysis التحليل. Requirement المتطلبات Definition المفاهيم 4 - Design التصميم. 5 - Implementation التنفيذ. 6 - Testing الاختبار. 7 - Deployment التنصيب. 8 - Maintenance الصيانة. 9 - Evaluation التقدير. وهذه المراحل Phases هي مراحل مهمة جداً وأساسية في بناء المشاريع البرمجية، وكما ذكرنا سابقاً أن هذه المراحل قد لا تدخل جميعها في مرحلة بناء المشروع البرمجي وانما يتم انتقائها حسب الاحتياج، ولكن نؤكد لكم أن بعضاً من هذه المراحل الزامية ويجب ان تدخل في كُل مشروع برمجي احترافي وذو جودة عالية وقد تم تحديدها باللون الأحمر. ملاحظة: أساس من أساسيات بدأ او تنفيذ اي مشروع برمجي هو اختيار طريقة تنفيذ SDLC وفي الشطر التالي من هذا الموضوع سنتحدث عن هذه الطرائق او النماذج. ملاحظة: بشكل عام جميع المراحل أعلاه قد تكون تسلسلية فلا تبدأ مرحلة حتى تنتهي المرحلة التي تسبقها. ملاحظة: قد تختلف مسميات بعض المراحل فمثلاً Implementation يطلق عليها احيانا Development. أ. مرحلة التخطيط: في هذه المرحلة يتم عمل دراسة لجدوى المشروع، والتواصل مع العميل لفهم المشروع وبناء صورة مبدئية له، والتحقق من الامكانيات لتنفيذ هذا المشروع، فهي تعتبر مرحلة اتخاذ قرار مبدئي. ب. التحليل: تعتبر من أهم مراحل دورة حياة المشروع البرمجي، وهي البادئة الفعلية لل SDLC حيث يتم في هذه المرحلة الاقتراب أكثر من العملاء لفهم المشروع، وتحديد مُتطلباته Requirement، وتحديد المفاهيم والأهداف وايطار المشكلة، وحذف المفاهيم الغير منطقية واستبيان وفهم المشروع بشكل أكبر، فهي تعتبر خطوة تحديد الطلب، وعلى أساسها يتم تنفيذ المراحل التالية. Requirement المتطلبات: هي رغبات العميل، وتطلعاته وهي مهمة جداً في فهم المشروع وتحديد مشكلة العميل وماذا يريد بالضبط. ج. مرحلة التصميم: هي المرحلة التي يتم من خلالها عمل التصميم المبدئي للمشروع، ولا نعني بالتصميم ال GUI وانما مخططات المشروع تماماً مثل المهندس المعماري عندما يرسم مخططات المنزل قبل بنائه، فهذه الخطوة اساسية جداً ولاحقاً سأشرح التصميمات التي يحتاج المستقل ان يعملها لبناء مشروعه بشكل احترافي. د. مرحلة الاختبار: في هذه المرحلة يتم اختبار المشروع، والتحقق من أنه يعمل بشكل جيد ويوجد نوعين من الاختبارات الأساسية Black Box Testing و White Box Testing وسنتعرف على هذه الانواع لاحقاً. ك. التنصيب: وهي عملية نقل المشروع من بيئة التطوير الى بيئة التشغيل في مكان العميل. ص. الصيانة: أهم مراحل SDLC وقد تكون الأكثر ثمناً والأطول في المدة. رابعاً كيف ابدأ المشروع البرمجي؟ هناك الكثير من الطرق أو النماذج التي يتبعها اغلب المستقلين المحترفين في المجال البرمجي، وتكون من بداية المشروع حتى مرحلة التسليم ثم التطوير، وهذه النماذج لا استطيع القول انها جيدة ولكنها مستخدمة، وهي أفضل بكثير من Ad Hoc، ونطلق على هذه النماذج مسمى Models، وسأذكر في هذا القسم البعض من هذه الطرائق. ملاحظة: سأطلق على Models لاحقاً بالطرائق أو النماذج. خلاصة: مما تم ذكره سابقاً نستطيع القول أنه لا توجد طريقة واحدة لبدء المشروع البرمجي، وانما هنالك الكثير من الطرق المعترف بها والمجربة تطبيقياً، وجميع هذه الطرق لم تجرب في مشروع واحد وانما لها تاريخ من الفشل والتطوير، ثم الفشل والتطوير، ...، وسلسلة طويلة من قصص فشل وتطوير حتى توصلنا الى Standard عام لهذه الطرائق، وليومنا هذا مازالت اغلب الطرق قيد التطوير. والهدف من هذه الطرق او النماذج هو تطبيق SDLC بالشكل الأمثل. ومن هذه النماذج (الطرق) نذكر: 1 - Code and Fix: وهذه الطريقة مستخدمة كثيراً من قبل أغلب المستقلين وهي سيئة جداً في حال تم تطبيقها لمشروع كبير او متوسط الحجم، وهي بكل بساطة نبدأ بكتابة الشفرة البرمجية حتى ننتهي، في حال ظهور مشاكل نصلحها او حتى نحصل على رضا المستخدم، ثم نبدأ بكتابة بقية الشفرة حتى ننتهي، وفي حال ظهور مشاكل نصلحها او حتى نحصل على رضا المستخدم، ونستمر بهذه الدورة حتى يكتمل المشروع. لاحظ في هذا النموذج استخدمنا مرحلة ال التخطيط، والتنفيذ فقط. وهذه الطريقة مناسبة جداً للمشاريع الصغيرة والتي لا تكون حساسة، مثل المواقع الشخصية الصغيرة، أو التطبيقات المصغرة جداً مثل تطبيقات عرض الأخبار أو الألعاب الصغيرة. 2 - Incremental: هذه الطريقة تستخدم كثيراً في التطبيقات العامة التي يتم تطويرها وبيعها للمستخدمين، وهذه الطريقة جيدة ولكن لها سلبياتها للأسف، وهي بكل بساطة أن نعمل اصدارات للمشروع البرمجي وكل اصدار يسمى Build وكل Build أثناء تنفيذه يتم تطبيق جميع مراحل SDLC تقريباً بشكل تكراري Itrative، وسنتحدث عن هذه المراحل في موضوع أخر ان شاء الله. 3 - Agail: هذه الطريقة هي دمج مابين Incremental و Itrative وتركز على تنفيذ المشروع بالشكل الذي يحقق رضا العملاء، عن طريق التسليم السريع للمنتج، وهذه الطريقة تعتبر سلسة جداً من ناحية الاستخدام وهي من الطرق التي يستطيع استخدامها المستقلين. ملاحظة: هذه بعض النماذج التي احببت ذكرها، وهي نماذج جيدة جداً، ويستطيع المستقل استخدامها بسلاسة نوعاً ما. خلاصة: اذاً اجابتاً على السؤال: كيف ابدأ المشروع البرمجي؟ الاجابة تكمن في اختيار الطريقة او النموذج الصحيح؛ واختيار نموذج او طريقة العمل ليس سهل وانما يتطلب خبرة عالية وفهم عميق للمشروع، ولكن لا تقلق حتى لو كنت مبتدأ فمعرفتك البسيطة بهذه النماذج سوف يساعدك كثيراً على اختيار الصحيح -تقريباً- منها. على كُل حال فهذه النماذج قد لا تكون واضحة للبعض ولكن لاحقاً في موضوع أخر سنشرح هذا النماذج بشكل أفضل ونشرح طرق الاختيار. خامساً تحليل وتلخيص المعلومات: اذا لنربط المعلومات ونوضح الأفكار ونضمن فهمك للموضوع بشكل جيد سنضع نقاط وسيتم تلخيص كل نقطة. ماهي المشكلة مع الطريقة التي يتبعها المستقلين في مشاريعهم البرمجية. ماهي المخاطر الممكنة او المتوقعة التي تسببها الطرق الخاطئة في تنفيذ المشاريع البرمجية. كيف ابدأ ببناء مشروع برمجي ذو جودة عالية. SDLC و SDLC Models. أ. ماهي المشكلة مع الطريقة التي يتبعها المستقلين في مشاريعهم البرمجية؟: المشكلة باختصار تكمن في جودة المنتج، فتنفيذ المشاريع البرمجية لا يكون فقط بكتابة الكود، وانما التخطيط الصحيح والتصميم الأمثل، واتباع الطريقة الأكثر فعالية لضمان بناء المشروع بجودة عالية، وسهولة اختباره، وامكانية صيانته وتطويره لاحقاً. ب. ماهي المخاطر الممكنة أو المتوقعة التي تسببها الطرق الخاطئة في تنفيذ المشاريع البرمجية؟: الجودة، صعوبة الاختبار والتحقق، صعوبة الصيانة، و القضايا القانونية. ج. كيف ابدأ ببناء مشروع برمجي ذو جودة عالية؟: لبناء مشروع برمجي ذو جودة عالية، يجب ان تبدأ اولاً بفهم المشروع بشكل صحيح، ثم كتابة متطلبات المشروع، ثم عمل التصميمات التوضيحية وتأكيد فهم المشروع، ثم التنفيذ، ثم الاختبار، ولاحقاً الصيانة، وكل ماتم ذكره سابقاً من مراحل SDLC والتي يتم تنفيذها بشكل فعال من خلال SDLC Models. د. SDLC و SDLC Models: دورة حياة تطوير المشروع البرمجي SDLC هي مجموعة مراحل يجب تنفيذها لبناء المشروع البرمجي بشكل صحيح، وطريقة تنفيذ هذه المراحل يكمن من خلال نماذج دورة حياة تطوير المشروع البرمجي SDLC Models. خاتمة من المتوقع كثيراً خصوصاً مع كثرة المُصطلحات والأفكار أن يكون فهمك لأهمية SPLC غير كامل وقد يكون مُبهم، لذلك لا تقلق ففي المواضيع القادمة والتي ستكون تحت عنوان دورة حياة تطوير البرمجيات: X -حيث أن X يمثل العنوان الفرعي- سنتحدث بالتفصيل عن مراحل SDLC، وعن الأدوات، والنماذج التي سوف تساعدك كمستقل على ادارة مشروعك البرمجي بشكل احترافي لتضمن جودته. الموضوع التالي دورة حياة تطوير البرمجيات: المرحلة الأولى التخطيط هذا وصلى الله وسلم على نبينا محمد وعلى آله وصحبه اجمعين
  3. بسم الله الرحمن الرحيم اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا، وَعَلِّمْنَا مَا يَنْفَعُنَا، وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا سلسلة دروس JavaScript: الدرس الثاني حلقات التكرار. قائمة الدروس السابقة: في هذا الدرس إن شاء الله سوف نتعلم حلقات التكرار في لغة JavaScript، ولكن قبل أن نبدأ سوف نستذكر بعض المصطلحات و النقاط الهامة والتي سنستذكرها إن شاء الله دومًا خلال سلسلة الدروس هذه. أولا تذكر JavaScript ليست Java. ثانيًا سوف نرمز لاحقًا ل JavaScript بالرمز JS. ثالثًا JavaScript التي سنخوضها في هذه الدروس هي Client Side ( طرف العميل)، وليست Server Side ( طرف الخادوم ). ماهو التكرار؟ أو ماهي حلقات التكرار؟ في لغة JS قد نحتاج أحيانًا لتنفيذ اجراء (Action) ما مرارًا وتكرارًا وليس مرة واحدة فقط، ومن هذا المنطلق تستطيع مثلًا طباعة ارقام الأسطر بطريقة ديناميكية دون الحاجة لعمل هذا الإجراء بشكل يدوي، ومن الأمثلة كذلك طباعة المصفوفات والبيانات، مثلًا لديك مصفوفة (Array) تحتوي على مئة صف، وتريد أن تقوم بطباعة كُل الصفوف، وهذه العملية لا تتم من دون حلقات التكرار. أولًا While loop: النوع الأساسي من حلقات التكرار هو While loop والهدف منه هو القيام بعملية تنفيذ النص (statement) أو الشفرة المعطاة (code) مرارًا وتكرارًا مادام شرط التكرار (expression) يحمل القيمة TRUE (قيمة الصواب). متى ماأصبح شرط التكرار FALSE (قيمة الخطأ) يتوقف التكرار بشكل كامل. وقد تتضح الفكرة من خلال الصورة التالية: لاحظ مادام شرط التكرار (Expression) المرمز له بـ A يحمل القيمة TRUE فسوف يستمر تكرار البيان البرمجي (Statement) المرمز له بـ B بالتنفيذ (Execute) حتى تصبح قيمة A تحمل القيمة FALSE عندها سوف يتوقف التكرار. لاحظ النقطة البيضاء هي نقطة البداية التي سوف تعود لها حلقة التكرار مرارًا وتكرارًا أثناء التنفيذ مادام A يحمل القيمة TRUE والسوداء نقطة نهاية التكرار (End of loop) سوف تذهب إليها حلقة التكرار عندما تحمل A القيمة FALSE. قد لا يبدو الأمر بتِلك السهولة من الصورة فقط، لذلك سوف نحاول طرح مثال وذلك لتوضيح الفكرة ولكن أوه ، قبل المثال، فالنتعلم كيف نقوم بكتابة While-loop. من الأن فصاعدًا سوف نضع بنية الشفرة (Syntax) بطريقة Pseudo code. ~ نقطة خارج الموضوع ولكن للفائدة: Pseudo code أو بالعربية الشفرة الزائفة هي طريقة لتوضيح خطوات برمجية دون استخدام اوامر برمجية فعلية، وتستخدم احيانا لشرح Syntax للغة البرمجة ولكن مع الإخلال قليلًا في القيود، كوضع نص مكتوب مثلًا بين الشفرة البرمجية. الصورة التالية توضح البنية الكتابية للـ while-loop في لغة JS. لاحظ الخط الأحمر المتعرج يعني أن هذا النص مخالف لقيود اللغة. الأن بعض الأمثلة البسيطة التي توضح عمل While-loop <html> <body> <script type="text/javascript"> <!-- // سوف يحتفظ هذا المتغير بعدد الدورات var count = 0; // سيتم طباعة هذه الجملة أولًا. document.write("Starting Loop "); // حلقة التكرار // هذا شرط التكرار while (count < 10){ // سيتم طباعة هذا السطر في كل دورة document.write("Current Count : " + count + "<br />"); // من الدرس الأول، هل تتذكر ماذا يعمل هذا السطر؟ count++; } // سيتم طباعة هذا السطر بعد انتهاء عمل جملة التكرار While document.write("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> لاحظ الشفرة أعلاه تحتوي على بعض أكواد HTML، وذلك يعود لما شرحناه بالدرس الاول وهو أن لغة JS التي نتعلمها Client-side ويتم تنفيذها واستخدامها بجانب HTML للتعامل مع عناصرها. لاحظ اذهب للدرس الأول لاستذكار موضوع DOM. في المثال أعلاه سوف يبدأ التكرار عندما يكون المتغير count يحمل القيمة 0 وينتهي عندما يحمل القيمة 10. وسيكون ناتج الشفرة ( Code output ) كالأتي: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Current Count : 5 Current Count : 6 Current Count : 7 Current Count : 8 Current Count : 9 Loop stopped! Set the variable to different value and then try... لاحظ الناتج (output) صحيح 100% ولكن يوجد خطأ بسيط فماذا تعتقد أن يكون ؟! الاجابة هي أننا استخدمنا document.write وليس document.writeln وهذا يجعل السطر الأول يكون بجانب السطر الثاني، والسطر ماقبل الأخير يكون بجانب السطر الذي يسبقه. لم تفهم؟ .. فقط قم بمراجعة الدرس الأول ثانيًا Do-while: ال do-while هي نوع ثاني من while أو بالأصح هي نفس الشيء ولكن الفرق بينها وبين while هي أنها تقوم بالتحقق من شرط التكرار في نهاية التكرار، مما يعني أنها تقوم بالتكرار على الأقل مرة واحدة فقط. هذا يعني أن البرنامج سيقوم بالدخول لحلقة التكرار دون التحقق من شرط التكرار (Expression) ثم بعد ذلك اثناء محاولته للقيام بدورة ثانية سيتحقق من شرط التكرار فإن كان الشرط يعطي النتيجة TRUE سيتم استكمال دورة ثانية أما ان كان شرط التكرار يعطي النتيجة FALSE سوف يقوم بالخروج من حلقة التكرار، وقد يتضح هذا الأمر من خلال الصورة التالية: لاحظ مادام شرط التكرار (Expression) المرمز له بـ A يحمل القيمة TRUE فسوف يستمر تكرار البيان البرمجي (Statement) المرمز له بـ B بالتنفيذ (Execute) حتى تصبح قيمة A تحمل القيمة FALSE سوف يتوقف التكرار. لاحظ النقطة البيضاء هي نقطة البداية التي سوف يعود لها مرارًا وتكرارًا أثناء التنفيذ مادام A يحمل القيمة TRUE والسوداء نقطة نهاية التكرار (End of loop) سوف يذهب إليها عندما تحمل A القيمة FALSE. لاحظ لان العملية هي Do while فلا يوجد تحقق في البداية (Condition) ولكن التحقق يتم بعد دورة كاملة مما يعني أن do-while تقوم بعملة دورة واحدة على الأقل في كُل الحالات. الصورة التالية توضح البنية الكتابية (syntax) لشفرة do-while: الأن مثال بسيط لتوضح عمل do-while: <html> <body> <script type="text/javascript"> <!-- // متغير سوف يحمل عدد الدورات وسيكون شرط التكرار. var count = 0; // جملة طباعة document.write("Starting Loop" + "<br />"); // بداية حلقة التكرار // لاحظ لايوجد تحقق هنا do{ // جملة طباعة document.write("Current Count : " + count + "<br />"); // ؟ count++; } // التحقيق بعد اتمام الدورة .. while (count < 5); // جملة طباعة document.write ("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> في المثال أعلاه سوف تقوم جملة التكرار بتنفيذ دورة واحدة في البداية، بعد ذلك سيتم التحقق من شرط التكرار ان كانت النتيجة TRUE سوف يعمل دورة أخرى. عدى ذلك سوف تنتهي حلقة التكرار. ناتج الشفرة أعلاه: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Loop Stopped! Set the variable to different value and then try... ثالثًا for-loop: هذا النوع الأخير و إن لم يكن كذلك من حلقات التكرار الأساسية، وهو مشابه تمامًا لل while إلا أنه قد يكون أبسط في الإستخدام وذو خصائص اضافية. تحتوي for-loop على ثلاثة أقسام: القسم الأول Initialization (العداد) وهو قيمة افتراضية تحتوي على رقم (عدد حقيقي -Integer-) من خلاله يتم المقارنة لاحقًا في القسم الثاني وهو مهم ومسؤول عن استمرار حلقة التكرار. القسم الثاني Test Statement او Condition (شرط التكرار): يتم هنا التحقق من العداد (Counter) بواسطة Expression (تعبير منطقي)، وهو المسؤول الأول عن استمرار حلقة التكرار. القسم الثالث Iteration Statement (جملة التكرار): يتم هنا التعديل على العداد بعد انتهاء دورة كاملة إما بزيادته او إنقاصه أو حتى القيام بعملية حسابية عليه لتغييره و هو قسم مهم جدًا لتفادي مشكلة التكرار اللامتناهي. تتم العملية كالأتي، يتم تعيين قيمة في العداد ثم بعد ذلك التحقق منها من خلال شرط التكرار، ثم بعد ذلك يتم تنفيذ دورة كاملة في حال إنتهاء الدورة يتم التعديل على قيمة العداد من خلال جملة التكرار؛ والصورة التالية توضح طريقة عملها: أما البنية الكتابية (Syntax) لل for-loop فهي كالأتي: لاحظ يتم الفصل بين كل قسم بفاصلة منقوطة (Semi coma) وهذا يعني أن الأقسام ليست Parameter (معامل) وانما Section (قسم). ولنوضح الفكرة بشكل كامل سنقوم بطرح مثال بسيط لعملها. <html> <body> <script type="text/javascript"> <!-- // العداد var count; // جملة طباعة document.write("Starting Loop" + "<br />"); // حلقة التكرار //Counter //Condition //Iteration statement for(count = 0; count < 10; count++){ // جمل طباعة يتم تنفيذها في كل دورة document.write("Current Count : " + count ); document.write("<br />"); } // جملة طباعة يتم تنفيذها بعد انتهاء حلقة التكرار document.write("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> وناتج المثال أعلاه: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Current Count : 5 Current Count : 6 Current Count : 7 Current Count : 8 Current Count : 9 Loop stopped! Set the variable to different value and then try... رابعًا أخطاء شائعة قد تقع بها عند استخدام حلقات التكرار: الخطأ الأول تعيين شرط تكرار تكون نتيجته دائمًا TRUE (قيمة صواب) وهذا يوقعك بخطأ منطقي شائع جدًا يمسى Infinite loops (دورات لا متناهية). الخطأ الثاني تعيين جملة تكرار غير صحيحة بحيث تقوم بتغيير العداد بشكل غير صحيح مما يؤدي لزيادة دوراة أو تنقيص دوراة أو حتى تجاوز البعض منها وهو خطئ شائع جدًا يمسى Logic error (خطأ منطقي). أخيرًا نصائح في استخدام حلقات التكرار: النصيحة الأولى حاول أن لا تستخدم حلقات التكرار بشكل كبير لأن ذلك يبطئ من سرعة أداء برنامجك. النصيحة الثانية قم بالتخطيط قبل كتابة البرنامج لأن ذلك سوف يساعدك على اختيار النوع الأمثل من حلقات التكرار بالشكل الأمثل. النصيحة الثالثة في معالجة البيانات باستخدام حلقات التكرار قم باستخدام Algorithm (آلقيوريثم) مناسب وذلك لزيادة اداء البرنامج. هذا وصلى الله وسلم على سيدنا محمد وعلى آله وصحبه أجمعين. أسأل الله تعالى أن أكون قد وفقت في إيصال المعلومة لكم، وأن أكون قد نفعتكم بهذا الدرس. تحياتي لكم. في الدرس القادم سوف نتحدث عن الأتي: 1 - الدوال Functions
  4. بسم الله الرحمن الرحيم اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا , وَعَلِّمْنَا مَا يَنْفَعُنَا , وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا مقدمة: استكمالًا لسلسلة دروس (مقدمة في JavaScript -سنرمز لها لاحقأ بالاختصار JS-) سوف نتعلم اليوم النوع الأخير من العمليات في لغة JS وهي عمليات البيتوايز (Bitwise operators). تذكر JavaScript ليست Java العمليات (Operations): هُنا جدول يوضح عمليات ال Bitwise # وصف العملية & المسمى: Bitwise AND الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث اذا تقابل البت 1 مع البت 1 سيكون الناتج 1 عدى ذلك 0. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x & y); // Z = 2 | المسمى: Bitwise OR الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحث اذا تقابل البت 0 مع البت 0 سيكون الناتج 0 عدى ذلك 1. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x | y); // Z = 3 ^ المسمى: Bitwise exclusive OR الاختصار: XOR الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث اذا تشابه البت في كلا الطرفين سيكون الناتج 0 عدى ذلك 1. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x ^ y); // Z = 1 ~ المسمى: Bitwise NOT الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث يقوم بتحويل ال 1 الى 0 وال 0 الى 1. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (~y); // y = -4 In (4) bit: 1100 المسمى: Bitwise left shift الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الى جهة اليسار. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y << 1); // y = 6 In (4) bit: 0110 المسمى: Bitwise right shift الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الى جهة اليمين. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y >> 1); // y = 1 In (4) bit: 001 المسمى: Bitwise right shift with ZERO الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الي جهة اليمين. الفرق بينها وبين Right shift انها دومًا تعوض جهة اليسار بالبت 0. تستخدم غالبًا مع الاعداد السالبة. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y >>> 1); // y = 1 In (4) bit: 001 في الجدول أعلاه قمنا بوضع كل عملية مع مثال مبسط لها، ومنه نستنتج أن Bitwise Operator تتعامل مع ال Binary لكل عدد وتقارن وتزيح حسب العملية المستخدم والازاحة المعطاة. ولنبسط الفكرة، سوف نأخذ كل عملية ونقوم بوضع مثال مشروح لها. اولًا : Bitwise AND لنفترض أن لدينا العدد 2 والعدد 3 كما في المثال المدرج في الجدول، ولكل عدد قيمة رقمية متسلسلة (Binary) خاصة به وكل قيمة سوف نجعلها 4 Bit أي متكونة من 4 خانات كالأتي: العدد 2 لديه القيمة: 10 ولنجعلها 4 Bit نضيف اصفار من على اليسار لتصبح 0010 العدد 3 لديه القيمة: 11 ولنجعلها 4 Bit نضيف أصفار من على اليسار لتصبح 0011 عملية بسيطة أليس كذلك؟ وللتبسيط أكثر ياصديقي سوف نخرج عن الموضوع قليلًا لنشرح ماهي ال Binary. باللغة العربية ( نظام العد الثنائي )، وبالإنجليزية ( Binary Numeral System ) هو نظام أعداد -غير بشري أي لا يستطيع البشر فهمه أو قراءته بسهولة - يستخدم لتمثيل قيم عددية باستخدام الرمزين (الرقمين) 1 و 0، وهو لغة الآلة أو اللغة التي يتحدث بها الكمبيوتر ( الحاسب الآلي ). ملاحظة: نظام الأرقام الذي نستخدمه نحن بنو البشر هو Decimal Numeral System بالعربية ( نظام العد العشري ). نعود لمثالنا، الأن عند استخدام العميلة (AND) والتي يرمز لها بالرمز & فالذي يحدث هو أن النظام يقوم بمقارنة كُل خانة من سلسلة الأرقام الأولى بكل خانة من سلسلة الأرقام الثانية ... لم تفهم صح سأبسط لك العملية بهذه الصورة: لاحظ المنطق، يكون الناتج 1 فقط اذا تقابل 1 مع 1 .. عدى ذلك سيكون الناتج دائمًا 0، والناتج النهائي هو الرقم 2 بالتأكيد. فهمت كيف تعمل الان ؟! ثانيًا: Bitwise OR لنفترض نفس المثال مع AND، والصورة التالية تشرح الأمر: هل لاحظت الإختلاف عن العملية AND، الأن في العملية OR اذا تقابل 0 مع 0 يكون الناتج 0 عدى ذلك فهو 1. ونفس المنطق تمامًا يعمل مع بقية العمليات عدى أن المنطق يختلف قليلًا من عملية إلى أخرى، وربما تكون أصعب عملية هي الـ Shifting ( التحريك )، كونها تحتاج لمبدأ ثابت ومنطق صارم لكي يكون الناتج صحيح. ولنبسط الـ Shifting كما فعلنا مع الـ AND والـ OR سوف نشرحها في بطاقة ( صورة توضيحية )، وبالتأكيد سأقوم بشرح واحدة من العمليات الثلاث، كون أن فهم واحدة منهن يكفي لفهم الإثنتان الأخريين. ثالثًا: Bitwise Shifting الصورة التالية توضح عملية الـ Left Shift ( ): لاحظ عندما قمنا بالتحريك لليسار ( من اليمين إلى اليسار ) تحركت الأرقام حتى خسرنا 0 من جهة اليسار، وللتعويض قمنا بوضع 0 في اليمين ... وهكذا تتم العملية. ولكي أتأكد من عدم وجود أي غموض بالموضوع، هذه صورة متحركة تشرح الخطوات! الصورة تحتوي على مصطلحات مثل Flip Flop و Clear و Data Input تجاهلها فقط، لأن الصورة تشرح عمل ال Register وهو لا يهمنا ولكن مايهمنا توضيح الفكرة أتمنى أن تكون الأمور أكثر وضوحًا الان، واسأل الله العلي العظيم أن أكون قد وفقت في إيصال المعلومة. تحياتي.
  5. بسم الله الرحمن الرحيم اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا، وَعَلِّمْنَا مَا يَنْفَعُنَا، وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا سلسلة دروس JavaScript: الدرس الثاني حلقات التكرار. قائمة الدروس السابقة: الدرس الاول تعريف و شرح لبنية اللغة (Syntax ) استكمال للدرس الاول Bitwise Operators في هذا الدرس إن شاء الله سوف نتعلم حلقات التكرار في لغة JavaScript، ولكن قبل أن نبدأ سوف نستذكر بعض المصطلحات و النقاط الهامة والتي سنستذكرها إن شاء الله دومًا خلال سلسلة الدروس هذه. أولا تذكر JavaScript ليست Java. ثانيًا سوف نرمز لاحقًا ل JavaScript بالرمز JS. ثالثًا JavaScript التي سنخوضها في هذه الدروس هي Client Side ( طرف العميل)، وليست Server Side ( طرف الخادوم ). ماهو التكرار؟ أو ماهي حلقات التكرار؟ في لغة JS قد نحتاج أحيانًا لتنفيذ اجراء (Action) ما مرارًا وتكرارًا وليس مرة واحدة فقط، ومن هذا المنطلق تستطيع مثلًا طباعة ارقام الأسطر بطريقة ديناميكية دون الحاجة لعمل هذا الإجراء بشكل يدوي، ومن الأمثلة كذلك طباعة المصفوفات والبيانات، مثلًا لديك مصفوفة (Array) تحتوي على مئة صف، وتريد أن تقوم بطباعة كُل الصفوف، وهذه العملية لا تتم من دون حلقات التكرار. أولًا While loop: النوع الأساسي من حلقات التكرار هو While loop والهدف منه هو القيام بعملية تنفيذ النص (statement) أو الشفرة المعطاة (code) مرارًا وتكرارًا مادام شرط التكرار (expression) يحمل القيمة TRUE (قيمة الصواب). متى ماأصبح شرط التكرار FALSE (قيمة الخطأ) يتوقف التكرار بشكل كامل. وقد تتضح الفكرة من خلال الصورة التالية: لاحظ مادام شرط التكرار (Expression) المرمز له بـ A يحمل القيمة TRUE فسوف يستمر تكرار البيان البرمجي (Statement) المرمز له بـ B بالتنفيذ (Execute) حتى تصبح قيمة A تحمل القيمة FALSE عندها سوف يتوقف التكرار. لاحظ النقطة البيضاء هي نقطة البداية التي سوف تعود لها حلقة التكرار مرارًا وتكرارًا أثناء التنفيذ مادام A يحمل القيمة TRUE والسوداء نقطة نهاية التكرار (End of loop) سوف تذهب إليها حلقة التكرار عندما تحمل A القيمة FALSE. قد لا يبدو الأمر بتِلك السهولة من الصورة فقط، لذلك سوف نحاول طرح مثال وذلك لتوضيح الفكرة ولكن أوه ، قبل المثال، فالنتعلم كيف نقوم بكتابة While-loop. من الأن فصاعدًا سوف نضع بنية الشفرة (Syntax) بطريقة Pseudo code. ~ نقطة خارج الموضوع ولكن للفائدة: Pseudo code أو بالعربية الشفرة الزائفة هي طريقة لتوضيح خطوات برمجية دون استخدام اوامر برمجية فعلية، وتستخدم احيانا لشرح Syntax للغة البرمجة ولكن مع الإخلال قليلًا في القيود، كوضع نص مكتوب مثلًا بين الشفرة البرمجية. الصورة التالية توضح البنية الكتابية للـ while-loop في لغة JS. لاحظ الخط الأحمر المتعرج يعني أن هذا النص مخالف لقيود اللغة. الأن بعض الأمثلة البسيطة التي توضح عمل While-loop <html> <body> <script type="text/javascript"> <!-- // سوف يحتفظ هذا المتغير بعدد الدورات var count = 0; // سيتم طباعة هذه الجملة أولًا. document.write("Starting Loop "); // حلقة التكرار // هذا شرط التكرار while (count < 10){ // سيتم طباعة هذا السطر في كل دورة document.write("Current Count : " + count + "<br />"); // من الدرس الأول، هل تتذكر ماذا يعمل هذا السطر؟ count++; } // سيتم طباعة هذا السطر بعد انتهاء عمل جملة التكرار While document.write("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> لاحظ الشفرة أعلاه تحتوي على بعض أكواد HTML، وذلك يعود لما شرحناه بالدرس الاول وهو أن لغة JS التي نتعلمها Client-side ويتم تنفيذها واستخدامها بجانب HTML للتعامل مع عناصرها. لاحظ اذهب للدرس الأول لاستذكار موضوع DOM. في المثال أعلاه سوف يبدأ التكرار عندما يكون المتغير count يحمل القيمة 0 وينتهي عندما يحمل القيمة 10. وسيكون ناتج الشفرة ( Code output ) كالأتي: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Current Count : 5 Current Count : 6 Current Count : 7 Current Count : 8 Current Count : 9 Loop stopped! Set the variable to different value and then try... لاحظ الناتج (output) صحيح 100% ولكن يوجد خطأ بسيط فماذا تعتقد أن يكون ؟! الاجابة هي أننا استخدمنا document.write وليس document.writeln وهذا يجعل السطر الأول يكون بجانب السطر الثاني، والسطر ماقبل الأخير يكون بجانب السطر الذي يسبقه. لم تفهم؟ .. فقط قم بمراجعة الدرس الأول ثانيًا Do-while: ال do-while هي نوع ثاني من while أو بالأصح هي نفس الشيء ولكن الفرق بينها وبين while هي أنها تقوم بالتحقق من شرط التكرار في نهاية التكرار، مما يعني أنها تقوم بالتكرار على الأقل مرة واحدة فقط. هذا يعني أن البرنامج سيقوم بالدخول لحلقة التكرار دون التحقق من شرط التكرار (Expression) ثم بعد ذلك اثناء محاولته للقيام بدورة ثانية سيتحقق من شرط التكرار فإن كان الشرط يعطي النتيجة TRUE سيتم استكمال دورة ثانية أما ان كان شرط التكرار يعطي النتيجة FALSE سوف يقوم بالخروج من حلقة التكرار، وقد يتضح هذا الأمر من خلال الصورة التالية: لاحظ مادام شرط التكرار (Expression) المرمز له بـ A يحمل القيمة TRUE فسوف يستمر تكرار البيان البرمجي (Statement) المرمز له بـ B بالتنفيذ (Execute) حتى تصبح قيمة A تحمل القيمة FALSE سوف يتوقف التكرار. لاحظ النقطة البيضاء هي نقطة البداية التي سوف يعود لها مرارًا وتكرارًا أثناء التنفيذ مادام A يحمل القيمة TRUE والسوداء نقطة نهاية التكرار (End of loop) سوف يذهب إليها عندما تحمل A القيمة FALSE. لاحظ لان العملية هي Do while فلا يوجد تحقق في البداية (Condition) ولكن التحقق يتم بعد دورة كاملة مما يعني أن do-while تقوم بعملة دورة واحدة على الأقل في كُل الحالات. الصورة التالية توضح البنية الكتابية (syntax) لشفرة do-while: الأن مثال بسيط لتوضح عمل do-while: <html> <body> <script type="text/javascript"> <!-- // متغير سوف يحمل عدد الدورات وسيكون شرط التكرار. var count = 0; // جملة طباعة document.write("Starting Loop" + "<br />"); // بداية حلقة التكرار // لاحظ لايوجد تحقق هنا do{ // جملة طباعة document.write("Current Count : " + count + "<br />"); // ؟ count++; } // التحقيق بعد اتمام الدورة .. while (count < 5); // جملة طباعة document.write ("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> في المثال أعلاه سوف تقوم جملة التكرار بتنفيذ دورة واحدة في البداية، بعد ذلك سيتم التحقق من شرط التكرار ان كانت النتيجة TRUE سوف يعمل دورة أخرى. عدى ذلك سوف تنتهي حلقة التكرار. ناتج الشفرة أعلاه: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Loop Stopped! Set the variable to different value and then try... ثالثًا for-loop: هذا النوع الأخير و إن لم يكن كذلك من حلقات التكرار الأساسية، وهو مشابه تمامًا لل while إلا أنه قد يكون أبسط في الإستخدام وذو خصائص اضافية. تحتوي for-loop على ثلاثة أقسام: القسم الأول Initialization (العداد) وهو قيمة افتراضية تحتوي على رقم (عدد حقيقي -Integer-) من خلاله يتم المقارنة لاحقًا في القسم الثاني وهو مهم ومسؤول عن استمرار حلقة التكرار. القسم الثاني Test Statement او Condition (شرط التكرار): يتم هنا التحقق من العداد (Counter) بواسطة Expression (تعبير منطقي)، وهو المسؤول الأول عن استمرار حلقة التكرار. القسم الثالث Iteration Statement (جملة التكرار): يتم هنا التعديل على العداد بعد انتهاء دورة كاملة إما بزيادته او إنقاصه أو حتى القيام بعملية حسابية عليه لتغييره و هو قسم مهم جدًا لتفادي مشكلة التكرار اللامتناهي. تتم العملية كالأتي، يتم تعيين قيمة في العداد ثم بعد ذلك التحقق منها من خلال شرط التكرار، ثم بعد ذلك يتم تنفيذ دورة كاملة في حال إنتهاء الدورة يتم التعديل على قيمة العداد من خلال جملة التكرار؛ والصورة التالية توضح طريقة عملها: أما البنية الكتابية (Syntax) لل for-loop فهي كالأتي: لاحظ يتم الفصل بين كل قسم بفاصلة منقوطة (Semi coma) وهذا يعني أن الأقسام ليست Parameter (معامل) وانما Section (قسم). ولنوضح الفكرة بشكل كامل سنقوم بطرح مثال بسيط لعملها. <html> <body> <script type="text/javascript"> <!-- // العداد var count; // جملة طباعة document.write("Starting Loop" + "<br />"); // حلقة التكرار //Counter //Condition //Iteration statement for(count = 0; count < 10; count++){ // جمل طباعة يتم تنفيذها في كل دورة document.write("Current Count : " + count ); document.write("<br />"); } // جملة طباعة يتم تنفيذها بعد انتهاء حلقة التكرار document.write("Loop stopped!"); //--> </script> <p>Set the variable to different value and then try...</p> </body> </html> وناتج المثال أعلاه: Starting Loop Current Count : 0 Current Count : 1 Current Count : 2 Current Count : 3 Current Count : 4 Current Count : 5 Current Count : 6 Current Count : 7 Current Count : 8 Current Count : 9 Loop stopped! Set the variable to different value and then try... رابعًا أخطاء شائعة قد تقع بها عند استخدام حلقات التكرار: الخطأ الأول تعيين شرط تكرار تكون نتيجته دائمًا TRUE (قيمة صواب) وهذا يوقعك بخطأ منطقي شائع جدًا يمسى Infinite loops (دورات لا متناهية). الخطأ الثاني تعيين جملة تكرار غير صحيحة بحيث تقوم بتغيير العداد بشكل غير صحيح مما يؤدي لزيادة دوراة أو تنقيص دوراة أو حتى تجاوز البعض منها وهو خطئ شائع جدًا يمسى Logic error (خطأ منطقي). أخيرًا نصائح في استخدام حلقات التكرار: النصيحة الأولى حاول أن لا تستخدم حلقات التكرار بشكل كبير لأن ذلك يبطئ من سرعة أداء برنامجك. النصيحة الثانية قم بالتخطيط قبل كتابة البرنامج لأن ذلك سوف يساعدك على اختيار النوع الأمثل من حلقات التكرار بالشكل الأمثل. النصيحة الثالثة في معالجة البيانات باستخدام حلقات التكرار قم باستخدام Algorithm (آلقيوريثم) مناسب وذلك لزيادة اداء البرنامج. هذا وصلى الله وسلم على سيدنا محمد وعلى آله وصحبه أجمعين. أسأل الله تعالى أن أكون قد وفقت في إيصال المعلومة لكم، وأن أكون قد نفعتكم بهذا الدرس. تحياتي لكم. في الدرس القادم سوف نتحدث عن الأتي: 1 - الدوال Functions تم ترقية هذا الطرح المميز الى صفحة المقالات
  6. شكرًا لك أخي الكريم، سعيد أنه اعجبك وأتمنى أن يكون قد افادك. تحياتي
  7. اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا , وَعَلِّمْنَا مَا يَنْفَعُنَا , وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا مقدمة: في هذه الدرس إن شاء الله، ودروس قادمة تليه، سوف أقدم شرح لأساسيات لغة البرمجة الرائعة (JavaScript)، وسوف يكون مستوى هذه الدروس للمبتدئين فهي عبارة عن مقدمة (Introduction) للغة. تعريف لغة JavaScript هي Object-base Scripting Language وهي ليست لغة Java وإنما هي لغة مختلفة كُليًا تستخدم لمعالجة او التلاعب (Maintaining) بالكائنات المرتبطة في صفحات الويبْ. تاريخ لغة JavaScript والتي سأرمز لها لاحقًا بـ JS بدأ من شركة Netscape عندما قامت بتطوير لغة برمجة تدعى LiveScript والتي تغير اسمها لاحقًا إلى JavaScript بعد ان تعاونت شركة Netscape مع شركة Sun Microsystems لتطوير اللغة. تذكر JavaScript ليست Java في الجدول التالي سابين الفروقات بين لغة Java ولغة JavaScript لكي ارسخ الفكرة لديك جدول يصف الفروقات بين لغة Java ولغة JavaScript JavaScript Java An Interpreted Language A Compiled Language Required only editor Required JDK and JVM اولًا بنية اللغة Syntax: لغة JS لغة سهلة جدًا ذات بنية لغوية (Syntax) سهلة الفهم والحفظ مع الممارسة ماسوف نتطرق إليه في هذا الدرس سيكون المتغيرات (Variables) العمليات (Operations) الشروط (IF...ELSE) المحدد (Switch-Case) المتغيرات (Variables): ملاحظة المتغيرات في لغة JS هي Case Sensitive أي حساسة لحالة الأحرف، فالمتغير x مختلف عن المتغير X. ملاحظة المتغيرات في لغة JS هي Loosely Typed أي انه لاداعي لتحديد نوع البيانات المراد اسنادها للمتغير. var variable_name; // انشاء المتغير variable_name = "Hello World"; // اسناد قيمة للمتغير المثال اعلاه يظهر عملية انشاء متغير (Declare Variable) واسناد قيمة إليه، بحيث أن variable_name هو اسم المتغير، وكلمة var هي كلمة اساسية تبين أن ماسوف أقوم بإنشائه هو متغير. var variable_name1, variable_name2; // انشاء أكثر من متغير variable_name1 = 9; // اسناد العدد 9 الى المتغير 1 variable_name2 = variable_name1; // ??? المثال أعلاه يظهر عملية إنشاء اكثر من متغير في سطر واحد، وذلك بفصل اسماء المتغيرات بفاصلة، بعد ذلك قمنا بإسناد قيمة الى المتغير في السطر الثاني، اما السطر الثالث فهو لك لتعمل على فهمه (Practice) var x = 10, y = 5, c; // انشاء متغيرات x, y, c c = 0; // اسناد القيمة 0 الى المتغير c المثال أعلاه يوضح أنه بإمكاننا وضع قيم افتراضية اثناء انشاء المتغير (Declare). العمليات (Operations): جدول يوضح العمليات الرياضية (Arithmetic Operators) # وصف العملية + عملية الجمع (Addition) يوجد عملية اضافية وهي (++) وتسمى Increment وهي زيادة العدد بـ 1 مثال على ذلك var x = 1; x++; // الأن قيمة المتغير x هي 2 - عملية الطرح (Subtraction) يوجد عملية إضافية وهي (--) وتسمى Decrement وهي تنقيص العدد بـ 1 var x = 1; x--; // الأن قيمة المتغير x هي 0 * عملية الضرب (Multiplication) / عملية القسمة (Division) % عملية باقي القسمة (Mod) عمليات المقارنة (Comparison Operators) # وصف العملية == عملية المساواة (Equal) != عملية اللامساواة (Not Equal) > عملية الأكبر من (Greater than) < عملية الأصغر من (Less than) >= الأكبر من أو يساوي (Greater than or equal to) <= الأصغر من أو يساوي (Less than or equal to) عمليات المنطق (Logic operators) # وصف العملية && علامة "و" (Logic AND) تذكر TRUE AND TRUE هو TRUE عدا ذلك FALSE || علامة "أو" (Logic OR) تذكر FALSE OR FALSE هو FALSE عدا ذلك TRUE ! علامة النفي "لا" (NOT) تذكر NOT TRUE تساوي FALSE والعكس بالعكس عمليات الإسناد (Assignment Operators) # وصف العملية = اسناد قيمة دون تغيير (Assign) += اسناد قيمة بعد جمعها بالقيمة الحالية -= اسناد قيمة بعد طرحها من القيمة الحالية =* اسناد قيمة بعد مضاعفتها بالقمية الحالية /= اسناد قيمة بعد قسمتها على القيمة الحالية =% اسناد قيمة بعد اخذ باقي القسمة على القيمة الحالية يوجد ايضًا عمليات البيتوايز (Bitwise Operators) ولكني سأجعل لها درس منصفل وذلك لعمقها. والأن مع الأمثلة على العمليات var x = 1; var y = 10; var z = 0; // أمثلة على العمليات الرياضية z = x + y; // z = 1 + 10 => 11 z = x - y; // z = 1 - 10 => -9 z = x * y; // z = 1 * 10 => 10 z = x / y; // z = 1 / 10 => 0.1 z = x % y; // z = 1 % 10 => 0.1 z = x++; // z = 2; z = x--; // z = 0; // أمثلة على عمليات المقارنة z = x == y; // FALSE z = x != y; // TRUE z = x > y; // FALSE z = x < y; // TRUE z = x >= y; // FALSE z = x <= y; // TRUE // أمثلة على عمليات المنطق var a1 = true; var a2 = false; var a3; a3 = (a1 && a2); // FALSE a3 = (a1 || a2); // TRUE لاحظ هنا علامة النفي حول قيمة الخطأ الى صواب. a3 = (a1 AND !a2); // TRUE // أمثلة على عمليات الاسناد x = y + 1; // x = 10 + 1 => 11 x += y; // x = 11 + 10 => 21 x -= y; // x = 21 - 10 => 11 x *= y; // x = 11 * 1 => 110 x /= y; // x = 110 / 10 => 11 x %= y; // x = 11 % 10 => 1.0 الشروط (IF...ELSE): هذا اسهل جزء بالدرس كٌله (ان تحقق الشرط افعل كذا، ان لم يتحقق افعل كذا)، مثال واحد كافي لفهمه. var x = 1; var y = x + 2; // y = 3 // ان تحقق الشرط افعل شئًا ما، ان لم يتحقق افعل شيئًا أخر. if (x != y) { // Do something } else { // Do something } // ان تحقق الشرط الأول افعل شيئًا ما، ان لم يتحقق وتحقق الثاني افعل شيئًا ما.. ان لم يتحقق ايًا منهم افعل شيئًا ما if (y >= x) { // Do something } else if (x < y) { // Do something } else { // Also do something } // لاحظ انت لا تحتاج لاستخدام الأقواس {} ان كان ماسوف ينفذ عبارة عن سطر واحد if (x == y) // Do something لاحظ الأقواس {} تسمى Body فكل مابينها هو تابع للشرط المحدد (Switch): تخيل أن لديك نص (Statement) يتكون من مئة شرط أو أكثر، ليس من المنطقي أن نستخدم الجملة الشرطية (If..Else) مئة مرة، فالهدف من البرمجة التبسيط وليس التعقيد، وهذه هي فكرة جملة Switch فهي تعتمد على المتغير الخاص بها والذي يعتبر المحدد لها، أي ستكون النتائج حسب قيمة ذلك المتغير، ستتضح أكثر مع الأمثلة. var select; select = 10; switch (select) { case '0': // If value of select equal to 0 then switch will moving here. // Break statement used to tell switch to stop moving from here. break; case '10': // If value of select equal to 10 then switch will moving here. break; default: // IF value of select does not matching any case, then switch will moving here. } في المثال اعلاه المتغير select قيمته 10، اذا سيقوم المحدد Switch بالتوجه إلى الـ case الذي يحمل القيمة 10 وتنفيذه، جملة Break وضيفتها ان توقف المحدد من الاستمرار، يعني اننا لو لم نضعها سوف ينفذ ال case 10 ثم ينفذ الـ default او لو كان تحت ال case 10 مجموعة cases اخرى فسيقوم المحدد بتنفيذها كلها وصولًا الى default او جملة Break. لاحظ Default دومًا نضعها في نهاية المحدد. ثانيا تضمينها مع HTML: لغة JS ليست Client-side فقط وانما من الممكن أن تكون Server-side ايضًا، ولكن ماسوف اشرحه هنا هو جزئية ال Client-side. يوجد ثلاث طرق لتضمين JS مع HTML Embedded code (كود مضمن) External source (ملف خارجي) Event (حدث) سوف أشرح 1 و 2 .. وسأترك 3 عندما نصل لجزئية الأحداث (Events) <!-- Embed Code --> <script type="text/javascript"> // JavaScript code come here </script> <!-- External source --> <script type="text/javascript" src="PATH"></script> في المثال أعلاه استخدمنا وسم <script> في كلا الحالتين، ولكن مع الـ External وضعنا Attribute اضافي وهو src، وقميته PATH هي مسار الملف أو الرابط الخاص به ويجب أن يكون بالامتداد (*.js). لاحظ ان قمت بوضع شفرى بين <script> و </script> في حالة ال External Source فسيتم تجاهل الشفرة واستخدام الشفرة الناتجة من الملف فقط. هنا أكون قد وصلت إلى نهاية درسي لهذا اليوم. اتمنى ان تطبقو عليه قبل البدأ في الدرس الذي يليه، والذي سيتضمن الجمل التكرارية أو حلقات التكرار. While-loop for-loop
  8. بسم الله الرحمن الرحيم اللَّهُمَّ انْفَعْنَا بِمَا عَلَّمْتَنَا , وَعَلِّمْنَا مَا يَنْفَعُنَا , وَزِدْنَا عِلْمًا إِلَى عِلْمِنَا سلسلة دروس JavaScript: استكمال للدرس الاول Bitwise Operators مقدمة: استكمالًا لسلسلة دروس (مقدمة في JavaScript -سنرمز لها لاحقأ بالاختصار JS-) سوف نتعلم اليوم النوع الأخير من العمليات في لغة JS وهي عمليات البيتوايز (Bitwise operators). تذكر JavaScript ليست Java العمليات (Operations): هُنا جدول يوضح عمليات ال Bitwise # وصف العملية & المسمى: Bitwise AND الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث اذا تقابل البت 1 مع البت 1 سيكون الناتج 1 عدى ذلك 0. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x & y); // Z = 2 | المسمى: Bitwise OR الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحث اذا تقابل البت 0 مع البت 0 سيكون الناتج 0 عدى ذلك 1. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x | y); // Z = 3 ^ المسمى: Bitwise exclusive OR الاختصار: XOR الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث اذا تشابه البت في كلا الطرفين سيكون الناتج 0 عدى ذلك 1. // مثال توضيحي var x = 2; // In (4) bit: 0010 var y = 3; // In (4) bit: 0011 var z; z = (x ^ y); // Z = 1 ~ المسمى: Bitwise NOT الوظيفة: يقوم بعمل مقارنة لكل بت (Bit) في السلسلة بحيث يقوم بتحويل ال 1 الى 0 وال 0 الى 1. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (~y); // y = -4 In (4) bit: 1100 المسمى: Bitwise left shift الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الى جهة اليسار. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y << 1); // y = 6 In (4) bit: 0110 المسمى: Bitwise right shift الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الى جهة اليمين. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y >> 1); // y = 1 In (4) bit: 001 المسمى: Bitwise right shift with ZERO الوظيفة: يقوم بعمل ازاحة لكل بت حسب المكان المعطى الي جهة اليمين. الفرق بينها وبين Right shift انها دومًا تعوض جهة اليسار بالبت 0. تستخدم غالبًا مع الاعداد السالبة. // مثال توضيحي var y = 3; // In (4) bit: 0011 var z; z = (y >>> 1); // y = 1 In (4) bit: 001 في الجدول أعلاه قمنا بوضع كل عملية مع مثال مبسط لها، ومنه نستنتج أن Bitwise Operator تتعامل مع ال Binary لكل عدد وتقارن وتزيح حسب العملية المستخدم والازاحة المعطاة. ولنبسط الفكرة، سوف نأخذ كل عملية ونقوم بوضع مثال مشروح لها. اولًا : Bitwise AND لنفترض أن لدينا العدد 2 والعدد 3 كما في المثال المدرج في الجدول، ولكل عدد قيمة رقمية متسلسلة (Binary) خاصة به وكل قيمة سوف نجعلها 4 Bit أي متكونة من 4 خانات كالأتي: العدد 2 لديه القيمة: 10 ولنجعلها 4 Bit نضيف اصفار من على اليسار لتصبح 0010 العدد 3 لديه القيمة: 11 ولنجعلها 4 Bit نضيف أصفار من على اليسار لتصبح 0011 عملية بسيطة أليس كذلك؟ وللتبسيط أكثر ياصديقي سوف نخرج عن الموضوع قليلًا لنشرح ماهي ال Binary. باللغة العربية ( نظام العد الثنائي )، وبالإنجليزية ( Binary Numeral System ) هو نظام أعداد -غير بشري أي لا يستطيع البشر فهمه أو قراءته بسهولة - يستخدم لتمثيل قيم عددية باستخدام الرمزين (الرقمين) 1 و 0، وهو لغة الآلة أو اللغة التي يتحدث بها الكمبيوتر ( الحاسب الآلي ). ملاحظة: نظام الأرقام الذي نستخدمه نحن بنو البشر هو Decimal Numeral System بالعربية ( نظام العد العشري ). نعود لمثالنا، الأن عند استخدام العميلة (AND) والتي يرمز لها بالرمز & فالذي يحدث هو أن النظام يقوم بمقارنة كُل خانة من سلسلة الأرقام الأولى بكل خانة من سلسلة الأرقام الثانية ... لم تفهم صح سأبسط لك العملية بهذه الصورة: لاحظ المنطق، يكون الناتج 1 فقط اذا تقابل 1 مع 1 .. عدى ذلك سيكون الناتج دائمًا 0، والناتج النهائي هو الرقم 2 بالتأكيد. فهمت كيف تعمل الان ؟! ثانيًا: Bitwise OR لنفترض نفس المثال مع AND، والصورة التالية تشرح الأمر: هل لاحظت الإختلاف عن العملية AND، الأن في العملية OR اذا تقابل 0 مع 0 يكون الناتج 0 عدى ذلك فهو 1. ونفس المنطق تمامًا يعمل مع بقية العمليات عدى أن المنطق يختلف قليلًا من عملية إلى أخرى، وربما تكون أصعب عملية هي الـ Shifting ( التحريك )، كونها تحتاج لمبدأ ثابت ومنطق صارم لكي يكون الناتج صحيح. ولنبسط الـ Shifting كما فعلنا مع الـ AND والـ OR سوف نشرحها في بطاقة ( صورة توضيحية )، وبالتأكيد سأقوم بشرح واحدة من العمليات الثلاث، كون أن فهم واحدة منهن يكفي لفهم الإثنتان الأخريين. ثالثًا: Bitwise Shifting الصورة التالية توضح عملية الـ Left Shift ( ): لاحظ عندما قمنا بالتحريك لليسار ( من اليمين إلى اليسار ) تحركت الأرقام حتى خسرنا 0 من جهة اليسار، وللتعويض قمنا بوضع 0 في اليمين ... وهكذا تتم العملية. ولكي أتأكد من عدم وجود أي غموض بالموضوع، هذه صورة متحركة تشرح الخطوات! الصورة تحتوي على مصطلحات مثل Flip Flop و Clear و Data Input تجاهلها فقط، لأن الصورة تشرح عمل ال Register وهو لا يهمنا ولكن مايهمنا توضيح الفكرة أتمنى أن تكون الأمور أكثر وضوحًا الان، واسأل الله العلي العظيم أن أكون قد وفقت في إيصال المعلومة. تحياتي. تم ترقية هذا الطرح المميز الى صفحة المقالات
  9. يمكن استخدامه كسيرفر فعلي ايضًا، لدي موقعين يعملون عليه ... وبشكل جيد ايضًا اعجبني الموضوع، فهو منظم ومختصر شكرًا لك. بالتوفيق
  10. تم ترقية هذا الطرح المميز الى صفحة المقالات
  11. هذا اظن انه Home Work لكورس Data Structure ( CSC 212 ) في جامعة الملك سعود.. ليس جيدًا أن تبحث عن الحلول فقط ياصديقي، وانما يجب ان تحاول أن تفهم وتحل بنفسك اولًا وتسأل عن الجزئية التي واجهت صعوبة بها.. النقطة الثانية الواجب هذا في لغة Java وهنا قسم JavaScript .. اخيرًا ياصديقي أظن ان فترة تسليم الواجبات انتهت ولكن سأحاول حل هذا الـ Home Work وطرح الاجوبة ان شاء الله لتعم الفائدة. بالتوفيق لك صديقي
  12. اولًا أنصحك كبداية أن تتعلم لغة C .. لانها تقريبًا ابسط لغة برمجة، وتعلمها يكفي أن يفتح لك الأبواب لتتعلم PHP مثلًا أو أي لغة برمجة تريدها! ثانيًا لا أنصحك ابدًا بإتّباع النهج الذي كنا نتبعه عندما كنا صِغار، وهو ( أريد أن اتعلم بسرعة ... وأنشئ شيء بسرعة ... وأبهر من حولي ) فهو لن يجعلك تتقدم وإنما سيوقف الزمن لديك في مرحلة واحدة لن تتخطاها ابدًا.. ثالثًا لغات البرمجة متشابهة في المنطق تقريبًا، ومختلفة اختلاف شبه جذري في الـ Syntax ( بنية اللغة)، فكما أسلفت، لغة برمجة واحدة تكفي أن تفتح لك المجال لتعلم ماشئت من لغات البرمجة بكل سهولة ويسر. رابعًا حدد المجال الذي ترغب في اختصاصه ( صناعة تطبيقات الـ Desktop للويندوز مثلًا )، أو تطوير الوبْ أو حتى تطبيقات الهاتف على منصة Android او Swift للأيفون.. خامسًا بعد تحديد المجال يجب أن تكون لك الرغبة الصادقة في التعلم، والمبادرة وعدم التقليل من شأن نفسك.. بل ثابر وحسن من طرائق الفهم والاستيعاب لديك وابتعد عن الحفظ قدر المستطاع! فلا ضرورة له كثيرًا في البرمجة، بل إن الفهم والممارسة تكفي ان تجعل منك مبرمج بفئة Beginner - مبتدأ - سادسًا في تعلم لغات البرمجة دومًا نبدأ بتعلم الأمور الأساسية والتي نسميها احيانًا ( Tools ) الأدوات، وهي كالمفتاح الذي تفتح به باب احتراف لغة البرمجة ... والمقصد هنا الـ Syntax وقواعد لغة البرمجة.. سابعًا لغات البرمجة نوعين OOP و Procedural وترجمتها ( البرمجة الكائناتية Object Oriented Programming ) و (البرمجة الإجرائية) ويوجد نوع أخر وهو ال Scripting programming language -وبالغالب تجمع مابين النوعين OOP و Procedural-. ثامنًا مصادر التعلم كثيرة، قد تكون كتب أو دروس الكترونية وسأذكر بعض الأسماء التي قد تفيدك: أ. أسماء مواقع: أ.1 موقع Tutorialspoint أ.2 موقع عالم البرمجة... رغم انه مازال جديد ولكن أتوقع أن يكون موقع ثري بالمعلومات مستقبلًا. ب. أسماء مدربين ب.1 الأستاذ عبدالله عيد - لديه موقع الكتروني ب.2 الأستاذ يوسفاسماعيل - لديه موقع الكتروني بعنوان ( مدرسة كليبرز ) ج. مصادر أخرى: ج.1 الكورسات الخاصة بتخصصات الحاسب الألي بجامعة الملك سعود تاسعًا واخيرًا صديقي لغة البرمجة مثل اللغة الإنجليزية او اي لغة يستخدمها الإنسان للتواصل مع الإنسان .. فهي تسمح لنا أن نتواصل مع الآلة وحالها كحال لغات الانسان فهي تحتاج لممارسة اولًا بأول لكي ترسخ لديك، وتكون up-to-date أي محدثة اولًا بأول تواكب التطورات والتغيرات. اتمنى أن أكون قد اثريتك .. ووفقت بمساعدتك. اتمنى لك التوفيق صديقي.
  13. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته في هذا الدرس سأقدم نظرة عامة، ومُقدمة على التعابير القياسية Regular Expression وذلك لأهميتها الكبيرة في البرمجة. في هذا الدرس سوف أستخدم بإذن الله لغة PHP في عمل اختبارات على الـ Regular Expression تعريف Regular Expression: هو كائن يصف نمطًا من المحارف ( أو الكلمات ). تعريف أعمق للتعابير القياسية: هي سلسلة من الأحرف التي تحدد نمطًا للبحث داخل النصوص (String) أو للمطابقة بين سلاسل من الأحرف. الهدف من التعاببير القياسية هو تسهيل عمليات البحث والاستبدال داخل النصوص، وتستخدم غالبًا في عمليات التحقق (Validation) وعمليات البحث (Searching) وايضًا في الحماية. ولتوضيح الفكرة بشكل أفضل بإمكاننا وضع مثال بسيط واقتراح الحلول له ثم بعد ذلك تبسيط الحل باستخدام التعابيير القياسية والتي سنرمز لها لاحقًا بـ RegExp. لنفرض أننا سنقوم ببرمجة نموذج تسجيل وستكون المدخلات المطلوبة (اسم المستخدم - Username - والبريد الإلكتروني - Email -) ونريد أن نتأكد من التالي: اسم المستخدم يجب أن يكون خليط من حروف وأرقام ، والرموز التالية فقط (_-.). البريد الإلكتروني يجب أن يكون بالشكل التالي : [email protected]_name.top-level-domain مثال: [email protected] وسيكون شكل نموذج التسجيل كالأتي: الحلول المقترحة كثيرة، مثلًا لكي نتأكد أن إسم المستخدم خالٍ من المسافات والرموز نحتاج لعمل تصفية (Filter) له، والتأكد اولًا من وجود مسافات واستبدالها مثلًا بالرمز _ او ازالتها كليًا، بعد ذلك تنقيح الاسم من الرموز الممنوعة ... عملية طويلة اما البريد الإلكتروني يجب ان نتأكد اولًا من خلوه من المسافات ايضًا، والرموز الممنوعة في اغلب مشغلات البريد الإلكتروني، بعد ذلك التحرك قليلًا للتأكد أنّ ماقبل علامة @ هو String ومابعده String ثم التحقق أن ماقبل علامة النقطة - dot - هو String ومابعده هو top-level-domain ... عملية أطول في التعابيير القياسية يمكننا اختصار كل هذه العمليات بسطر واحد أو نصف سطر حتى، وفي درسنا هذا سنتعلم كيف نحل مشكلتنا هذه ان شاء الله. اولًا سنشرح بناء الـ RegExp / RegExp / هذا المتعارف عليه تقريبًا في كل لغات البرمجة، وهو وضع / - Slash - ثم كتابة ال RegExp بعد ذلك الاغلاق بـ / - Slash -. يمكن أيضًا استخدام طرائق اخرى مع PHP. # RegExp # ! RegExp ! @ RegExp @ هذه طرائق أخرى لإستخدامه مع لغة PHP. لاحظ الدالة المنفذة للـ RegExp في لغة PHP هي عائلة دوال Preg والأكثر استخدامًا هي دالة preg_match ، والتي تقوم بعمل مطابقة بين النمط (Pattren) المطلوب والنص المدخل (Subject) وهي ماسوف نستخدمه في حل مكشلتنا. preg_match ($pattren , $subject) ثانيًا سنضع جدول بالأنماط المدعومة في الـ RegExp وهي متفق عليها تقريبًا: ثالثًا تطبيق ماتعلمناه في مشكلتنا ليكون فهم الـ RegExp اعمق وشامل، سنقوم بتطبيق دالة preg_match وماتعلمناه من اساسيات في حل مكشلتنا. <?php $username = "Shino"; $email = "[email protected]"; // Validate if (!preg_match('/^[\w_-]+$/', $username)) { echo "Please enter unique username. e.g. cielblog."; } else { echo "Valid username."; } if (!preg_match('/[A-Za-z0-9_\-.][email protected][A-Za-z0-9_\-.]+\.(com|org|net)/', $email)) { echo ""; } else { echo "Valid email."; } لاحظ في الكود اعلاه ستكون النتيجة ايجابية لان المدخلات كلها تطابق الفحص! لاحظ استخدمنا علامة النفي ( ! ) في التحققات، وهذا يعني إن لم يتحقق الفحص اطبع الرسالة التالية، وان تحقق اطبع الرسالة التالية. ولأرسخ الفكرة ساقوم بشرح مختصر لأحدى الانماط المستخدمة، وسأترك الأخرى لكم كما هو موضح بالصورة أعلاه، سيتم التحقق فيما اذا كانت المجموعة الأولى مكونة من الحروف A الى Z او a الى z او 0 الى 9 او الرموز _ - . ثم بعد ذلك علامة (at) بعد ذلك مجموعة مابعد علامة (at) تليها احدى الخيارات com او org او net. مصادر المعلومات المدرجة بهذا المقال: جدول الأنماط والرموز المستخدمة في التعابير القياسية :: ستحتاجه في الخطوة 2 من هذا الدرس. تعريف مختصر من W3School تعريف متقدم من Wikipedia موقع يشرح الـ RegExp بطريقة جميلة ومختصرة هذه هي التعابير القياسية بكل بساطة، أتمنى أن يكون هذا الدرس - قابل للفهم - وخفيف ومفيد ايضًا. تحياتي لكم.
  14. تم ترقية هذا الطرح المميز الى صفحة المقالات
  15. رأيت المقال اليوم في Twitter وتحمست له!! للأمانه لم أكن اعلم عن موقعكم وللتو علمت عنه ~~ .. سأحاول ان اصنع اشياء جميلة هنا

عالم البرمجة

عالم البرمجة مقالات برمجة و دورات مجانية لإحتراف البرمجة هدفنا تبسيط البرمجة ونشرها بيد الكل بشكل ممتع ومتطور ومحدث بإستمرار لمواكبة جديد تطورات البرمجة الحديثة و المتقدمة بدون مقابل