اذهب إلى المحتوى

لوحة المتصدرين

  1. أكاديميّة حسوب

    • نقاط

      1

    • المساهمات

      5917


  2. أسامة دمراني

    أسامة دمراني

    الأعضاء


    • نقاط

      1

    • المساهمات

      244


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/19/25 in مقالات البرمجة

  1. قد يكون البدء ببناء تطبيقات الويب بعد تعلم لغة البرمجة الشهيرة بايثون محمسًا جدًا، لكن بمجرد البدء بالاطلاع على خيارات أطر العمل Frameworks الرائجة فيها والأكثر نجاحًا، نجد الكثير من الخيارات المهمة التي سنحتاج بطبيعة الحال لفهم مميزاتها والاختلافات الأساسية بينها قبل اتخاذنا لقرار تعلمها واعتمادها بالعمل. في هذا المقال سوف نقارن بين أشهر إطاري عمل في لغة بايثون، وهما إطار العمل جانغو Django وإطار العمل فلاسك Flask، من أجل تسهيل المفاضلة بينهما واختيار ما نحتاجه فعليًا لعملنا وإمكانياتنا. إطار العمل جانغو Django جانغو Django هو إطار عمل مجّاني مفتوح المصدر تم إنشاؤه سنة 2005، وهو مخصص لبناء مواقع وتطبيقات الويب، من أهم ميزات جانغو هو مفهوم قابلية إعادة الاستخدام Reusability للمكونات، فهو يعتمد على مفهوم Multi apps ضمن نفس المشروع؛ كما يوفر يوفر أجزاء جاهزة للمشاريع، مثل قسم التحقق Authentication الذي يجب أن يتوفر في كل مشروع ويب. يُعَد إطار العمل جانغو واحدًا من أطر العمل الضخمة، إذ لا يحتاج في عملياته الرئيسية على المكتبات الخارجية، بل يمكن الاعتماد عليه لوحده لإنجاز تلك العمليات. ميزات إطار العمل جانغو Django يتميز إطار العمل جانغو Django بكونه: إطار عمل احترافي مناسب جدًا للمشاريع الكبيرة يحوي الكثير من الخصائص المضمنة افتراضيًا يدعم تعدد التطبيقات إفتراضيًا، مما يجعل من السهل على المطور كتابة كود يمكن إعادة إستخدامه في العديد من المشاريع متوافق جدًا مع المبرمجين ذوي الخبرة العالية يحتوي على دعم مجتمعي قوي أشهر المشاريع المبنية باستخدام جانغو Django سنذكر في الآتي أبرز المشاريع العالمية الضخمة التي تم بناؤها بإطار العمل Django: Instagram Pinterest Udemy Coursera ما هو إطار العمل فلاسك Flask؟ فلاسك Flask هو إطار عمل صغير Micro Framework تم إنشاؤه سنة 2010، مع ذلك فهو يقدم الميزات الأساسية لتطبيق الويب. يعتمد فلاسك كثيرًا على المكتبات الخارجية، ولايحتوي على معمارية محددة مثل MVC، مما يمنح مرونة في اختيار واستخدام الطريقة التي نريدها؛ كما لا يحتوي على ORM أساسي، ولكن يكفي استخدام مكتبات خارجية للقيام بوظيفة الـ ORM. يُعَد إطار العمل فلاسك Flask مناسبًا جدًا للمبتدئين الراغبين في تعلم استخدام أول إطار عمل، نظرًا لبساطته وسهولة تعلمه مقارنةً مع باقي أطر العمل الشهيرة الأخرى. ميزات إطار العمل فلاسك Flask يتميز إطار العمل فلاسك Flask بكونه: إطار عمل سهل مناسب للمبتدئين مناسب للمشاريع الصغيرة مرن وقابل للتخصيص متوافق مع المبرمجين ذوي الخبرة البسيطة والعادية يحتوي على مجتمع نشط أشهر المشاريع المبنية باستخدام فلاسك Flask من أشهر المشاريع المبنية بفلاسك Flask، نجد المشاريع العالمية الضخمة الآتية: Netflix Lyft Reddit Zillow MailGui الإختلافات الرئيسية بين جانغو وفلاسك رغم أن كل من جانغو وفلاسك إطارين مميزين جدًا، إلا أن هناك بعض المعايير التي يحتاج المبرمج لمعرفتها من أجل تحديد أيهما أنسب له للعمل أو التعلم. سنقارن فيما يلي بين كل من جانغو وفلاسك من عدة جوانب كما يلي. 1. حسب طبيعة الاستخدام يُعَد إطار العمل Django مناسبًا لبناء تطبيقات الويب الكبيرة والمعقدة وفي مشاريع التطوير الشاملة Full Stack التي تتطلب الكثير من الميزات المضمنة، مثل أنظمة إدارة المحتوى CMS، ومنصات التجارة الإلكترونية؛ إذ يتيح جانغو خاصية عمل متكاملة مع مكوناته المضمنة للتعامل مع المهام المختلفة، مثل المصادقة وإدارة قاعدة البيانات وتوجيه عنوان URL، وغيرها. على الجانب الآخر، يتم استخدام إطار العمل فلاسك لبناء واجهات برمجة تطبيقات RESTful والخدمات الصغيرة والنماذج الأولية. وبالنظر لطبيعة فلاسك وخفة وزنه وتصميمه البسيط ومرونته، فهو يمنح المطورين تحكمًا مناسبًا أكثر في اختيار المكتبات والمكونات التي يرغبون بها بما يتماشى مع حاجة الاستخدام. 2. حسب سهولة التعلم لدى إطار العمل Flask متطلبات تعليم منخفضة نسبيًا تجعله في متناول المبتدئين والمطورين ذوي المعرفة الأساسية بلغة بايثون، وهو مناسب للراغبين في البدء بتعلم البرمجة بإطار عمل خفيف الوزن واستكشاف المزيد من المفاهيم المتقدمة تدريجيًا. على عكس ذلك، لدى إطار العمل Django متطلبات عالية وأكثر تعقيدًا للتمكن من التعامل مع كافة الميزات التي يوفرها، ويتطلب العمل به توفر خبرة متوسطة إلى متقدمة في لغة بايثون. لذا يمكن القول أنه رغم أن الأصل هو المفاضلة بين الإطارين حسب حاجة مشاريعنا، إلا أنه في حال أردنا تعلم أحدهما من أجل أغراض مختلفة، أو لغرض البدء بتعلم التعامل مع أطر العمل، فلن يكون من الجيد اختيار أحدهما على حساب الثاني بعشوائية في صالحنا. إذ لو كنا مبتدئين مثلًا ونريد تعلم كيفية التعامل مع اطر العمل، فسيكون إطار العمل Flask هو الخيار الأمثل لنا، عكس Django الذي سيكون الخيار السيء بهذه الحالة. أما في حال كنا مبرمجين متمكنين ونرغب بتعلم إطار عمل جديد مع معرفة وخبرة تتناسب مع متطلبات العمل بجانغو، فسيكون جانغو خيارًا أنسب لنا، نظرًا للخيارات الكثيرة التي يمنحنا إياها وتمكيننا من تطوير المشاريع الكبيرة. 3. حسب سهولةالاستخدام كما ذكرنا سابقًا، فـ Flask بطبيعته أنسب للمشاريع الصغيرة وأكثر بساطة من Django، وهذا يمنح المطورين خاصةً المبتدئين منهم أريحيةً أكبر في العمل من خلاله، إذ يتسم بسهولة الاستخدام ويتطلب أيضًا عددًا أقل من أسطر التعليمات البرمجية مقارنة مع جانغو الذي يتطلب وجود خبرة عالية ومهارات برمجية متقدمة. 4. حسب التكلفة رغم أن كلًا من Flask وDjango هما من أطر عمل Python المجانية ومفتوحة المصدر، إلا أنه نظرًا لكون إطار العمل Flask أقل احتواءًا على الميزات المدمجة ويحتاج لصيانة أكبر مقارنة مع إطار العمل جانغو، فهذا قد يجعله أكثر تكلفةً من جانغو في بعض الحالات. مع ذلك، تعتمد حاجتنا للميزات الإضافية على متطلبات عملنا، لذا قد لا تكون هناك تكاليف إضافية حتى عند استخدام فلاسك إن كان مشروعنا لا يتطلب ذلك. في حال كنا بحاجة إلى وظائف إضافية مدمجة أو نفضل إطار عمل أكثر شمولًا بالعمل، فقد يكون Django خيارًا أفضل هنا. 5. حسب الأداء والسرعة يتميز إطار العمل فلاسك Flask بكونه أفضل من ناحية الأداء والسرعة وقابلية التوسع بالمشاريع الصغيرة، إذ يتميز بخفة وزن تسمح للمطورين ببناء تطبيقاتهم الصغيرة في وقت قصير جدًا وباستهلاك أقل للموارد مقارنةً مع إطار العمل Django. أما بالمشاريع الكبيرة، فإطار العمل جانغو Django بطبيعته أنسب لهذا النوع من المشاريع، إذ يحوي العديد من الخصائص المدمجة التي تسهل عملية التطوير، مما يتيح عملية تطوير أسرع وأسلس مقارنة مع إطار العمل فلاسك. 6. حسب قابلية التوسع كلا الإطارين قابلين للتوسع، لكن كل حسب مجال استخدامه الأمثل. فـ Flask مثلًا يوفر قابلية جيدة للتوسعة بالمشاريع الصغيرة ومتوسطة الحجم، في حين أن Django ممتاز بقابليته للتوسع بالمشاريع الصغيرة والكبيرة رغم أنه أمثل للمشاريع الكبيرة بفضل الخصائص المدمجة المتاحة به. 7. حسب المرونة يتميز فلاسك بمرونة عالية جدًا مقارنةً مع جانغو، إذ أن عدم احتواء Flask على الكثير من الخصائص المدمجة، يتيح للمطور قدرة عالية في التحكم بهيكل المشروع وتصميمه، ويمنح له حرية عالية في الخصخصة وانتقاء الأدوات والمكتبات الأنسب له، عكس Django الذي يكون مرتبطًا بأغلبه بالخصائص المدمجة به. 8. حسب التعامل مع قاعدة البيانات يأتي جانغو مع نظام ORM يمكّن المبرمجين من التعامل بسهولة مع مجموعة متنوعة من قواعد البيانات العلائقية مثل PostgreSQL وSQLite و Prophet و MySQL وغيره، حيث يقدم ORM الدعم لإنشاء وإدارة عمليات ترحيل قاعدة البيانات. أما Flask فنظرًا لاعتماده على القابلية الكبيرة في التخصيص، فهو لا يضع قيودًا على كيفية تخزين البيانات، ويمكن للمطور اختيار ما يناسبه لأجل هذا الغرض. يعتمد فلاسك هنا على الإضافات الخارجية لترتيب تنفيذ عمليات قاعدة البيانات المشتركة مثل إضافة SQLAlchemy 9. حسب دعم المجتمع البرمجي بالنسبة للمطورين، لا بد أن يكون لدى الإطار المختار مجتمع مستخدمين قوي، إذ توفر هذه المجتمعات قدرًا كبيرًا من المساعدة من خلال الرد على أية استفسارات قد نحتاج للرد بشأنها، كما يمكنها أيضًا تشجيع تطوير التطبيقات الجديدة المتعلقة بالإطار. بالنظر إلى موقع Github نجد عدد نجوم التقييمات متقارب بين الإطارين؛ أما حسب موقع Stackoverflow فنجد إنه يوجد أكثر من 300 ألف سؤال عن جانغو، بينما يوجد حوالي 55 ألف سؤال فقط عن فلاسك؛ أما بالنظر الى موقع Google Trends فنجد أن التقنيتين متقاربتين جدًا في البحث. ومن خلال الإحصائيات المشار إليها، نجد أن كلا التقنيتين تحظى بدعم كبير جدًا من المجتمع لكن دعم جانغو أكبر من فلاسك بعض الشيء، مع ذلك ورغم صغر حجم الدعم المجتمعي لفلاسك مقارنةً مع جانغو، إلا أن مجتمع فلاسك نشط جدًا ويمكّن المبرمجين من الحصول على ما يحتاجون إليه. 10. حسب الاحتواء على واجهة تحكم إدارية Admin Interface يحتوي إطار العمل جانغو Django على واجهة إدارية مدمجة سهلة الاستخدام تسمح للمطورين بإجراء عدة عمليات بسرعة على النموذج خلال إنشائهم تطبيق، وذلك دون الحاجة إلى أي تعليمات برمجية إضافية أو إضافات خارجية. عكس فلاسك Flask الذي يعتمد على المطور نفسه في العملية، فلا يحتوي على واجهة إدارية مدمجة؛ مع ذلك يمكن تثبيت إضافة خارجية Extention اسمها Flask-Admin، والتي توفر ما يحتاجه المبرمج بهذا الخصوص 11. الأمان والحماية نظرًا لكون Django أكثر توجهًا واستخدامًا مع المشاريع الكبيرة، فهو يركز على خصائص الأمان والحماية بقوة افتراضيًا، ويحتوي على متطلبات تشفير عالية تجعله أقل عرضةً للتهديدات السيبرانية، عكس Flask الذي رغم توفره على بعض ميزات الأمان المضمنة مثل حماية CSRF، إلا أن الاهتمام بأمان وحماية التطبيقات المنشأة يقع بنسبة أكبر على عاتق المطورين. يمكننا اختصار الفروقات المذكورة أعلاه في الجدول التالي: الخاصية جانغو Django فلاسك Flask طبيعة الاستخدام مناسب للمشاريع الكبيرة والمعقدة مناسب للمشاريع الصغيرة والبسيطة سهولة التعلم مناسب للمحترفين أنسب للمبتدئين سهولة الاستخدام صعب الاستخدام ويتطلب خبرة أعلى سهل الاستخدام التكلفة مجاني، ولا يتطلب إضافات خارجية لإنجاز المشاريع مجاني، لكن يتطلب إضافات خارجية قد تكون مدفوعة لإنجاز المشاريع الأداء والسرعة أداء وسرعة أفضل في المشاريع الكبيرة أداء وسرعة أفضل في المشاريع الصغيرة قابلية التوسع قابلية توسع جيدة بكل أنواع المشاريع، بالأخص المشاريع الكبيرة قابلية توسع جيدة بالمشاريع الصغيرة ومتوسطة الحجم المرونة مرونة قليلة لارتباطه بأدواته المدمجة مرونة عالية جدًا لعدم ارتباطه بأدوات مدمجة كثيرة التعامل مع قاعدة البيانات يعتمد على نظام ORM مدمج للتعامل مع قواعد البيانات من نوع SQL لا يفرض قيود بالتعامل مع قواعد البيانات ويعتمد على إجراءات المطور الدعم المجتمعي مجتمع كبير ونشط مجتمع أقل حجمًا لكن نشط الاحتواء على واجهة تحكم إدارية Admin Interface يحوي واجهة إدارية مدمجة لا يحوي واجهة إدارية مدمجة، بل يحتاج لتثبيت إضافات خارجية مثل Flask-Admin الأمان والحماية يوفر خصائص حماية مدمجة قوية يوفر خصائص حماية مدمجة أقل ويعتمد على تأمين المطور لمشروعه بنفسه كيف نختار إطار العمل المناسب؟ يُعَد إطار العمل جانغو Django كما وضحنا سابقًا أصعب بالتعلم مقارنةً مع فلاسك، لذا في حال لم تكن لدينا خبرة مسبقة بالتعامل مع اُطر العمل عمومًا، فسيكون من الأنسب لنا اختيار إطار العمل فلاسك Flask، ثم الانتقال في حال الرغبة أو الحاجة إلى إطار العمل جانغو Django وعندها سيكون تعلمنا على جانغو أسهلك أما في حال توفرت لدينا خبرة مُسبقة بأحد أطر العمل، فيمكن تعلم أي إطار عمل بناءً على أهداف ورغبات المتعلم. خاتمة بهذا نكون قد تعرفنا على مفهوم إطاري العمل جانغو وفلاسك ووضحنا ميزات كل واحد منهما، مع توضيح الفروقات الأساسية التي تسمح بالمفاضلة بينهما وانتقاء ما يتوافق مع إمكانيات وخبرات المتعلم بها. نأمل أن نكون قد جعلنا عملية الاختيار أسهل عليك. المصادر Django Vs. Flask: Understanding The Major Differences ?Which Is the Best Python Web Framework: Django, Flask, or FastAPI Differences between Django vs Flask Flask vs Django: Let’s Choose Your Next Python Framework Flask-tastic Admin Panel: A Step-by-Step Guide to Building Your Own SQLAlchemy in Flask اقرأ أيضًا مدخل إلى إطار عمل الويب جانغو Django تعرف على إطار العمل فلاسك Flask تعرف على مفهوم إطار العمل Framework وأهميته في البرمجة
    1 نقطة
  2. يتكون أبسط برنامج يمكن كتابته من سلسلة من بعض التعليمات statements المتتالية، وأصغرها هو الذي يحتوي تعليمةً برمجيةً واحدةً، حيث تُدخَل التعليمة عادةً في سطر واحد، كما يمكن أن تُقسم على عدة أسطر، وتعرَّف التعليمة بأنها مجموعة من الكلمات والرموز المكتوبة بلغة طبيعية، وسننظر الآن في بعضها، إذ تُظهر الأمثلة التالية ما يجب أن نكتبه في محث بايثون ‎>>>‎، كما تُظهر النتيجة، ثم نشرح ما حدث. عرض الخرج يجب أن نتعلم أولًا كيف نجعل بايثون تعرض المعلومات التي نريدها، فإذا لم تعرض لنا اللغة شيئًا، فكيف نعرف ما فعله الحاسوب؟ وما فائدة الجهد الذي نبذله في البرمجة حينها إذا كنا لا نعرف هل أصبنا أم أخطأنا؟ >>> print('Hello there!') Hello there! انتبه إلى الملاحظة الأولى في المثال أعلاه، وهي أن المسافة التي بين المحث وبين أمر print ليست ضرورية، إذ ستضعها بايثون تلقائيًا إذا نسيناها، وما سنكتبه هو السطر الأول فقط؛ أما السطر الثاني فهو نتيجة البرنامج الذي كتبناه في السطر الأول، وقد عرضه لنا المفسر. أما الملاحظة الثانية فهي أن بايثون حساسة لحالة الأحرف، حيث سنحصل على خطأ إذا كتبنا Print بدلًا من print لأن بايثون تراهما كلمتين مختلفتين، وكذلك الحال بالنسبة لجافاسكربت؛ أما لغة VBScript فلا تهتم لهذا، لكن يجب تعويد النفس على الاهتمام بحالة الأحرف كعادة برمجية حسنة لئلا تقع في أخطاء بسببها إذا انتقلت من لغة برمجية لأخرى. وقد عرض لنا المفسر النص المكتوب بين علامتي الاقتباس لأن الدالة print()‎ تخبر بايثون بعرض تسلسل المحارف H,e,l,l,o, ,t,h,e,r,e,!‎، وهو ما يُعرَف في الأوساط البرمجية باسم السلسلة النصية string، أو سلسلة المحارف النصية، حيث يجب أن تكون تلك المحارف داخل أقواس، وندل على السلسلة النصية بوضعها بين علامات الاقتباس، كما يمكن استخدام علامات الاقتباس المفردة أو المزدوجة في بايثون دون حرج، مما يسمح لنا بإدخال أحد نوعي الاقتباس في سلسلة نصية محاطة بالنوع الآخر، وهذا مفيد في حالة الفاصلة الإنجليزية العليا ': >>> print("Monty Python's Flying Circus has a ' within it...") Monty Python's Flying Circus has a ' within it... أما جافاسكربت وVBScript فحساستان لنوع علامات التنصيص التي يجب استخدامها، لهذا يُنصح فيهما بالالتزام بالعلامات المزدوجة ما أمكن. عرض النتائج الحسابية >>> print(6 + 5) 11 يطبع لنا المثال أعلاه نتيجة العملية الحسابية التي في السطر الأول، والتي جمعنا فيها 5 إلى 6، وقد عرفت بايثون أن هذه المحارف أرقام وعاملتها على هذا الأساس، كما تعرفت على علامة الجمع التي بينهما، فجمعت العددين وأخرجت لنا الناتج، لذا يمكن القول أن بايثون مفيدة كحاسبة للجيب، وهو أحد استخداماتها الكثيرة جدًا، جرب الآن بعض الحسابات الأخرى واستخدم العوامل الحسابية التالية: الطرح (-). الضرب (*). القسمة (/). يمكن دمج عدة تعبيرات حسابية كما يلي: >>> print( ((6 * 5) + (7 - 5)) / (7 + 1) ) 4.0 لاحظ الطريقة التي استخدمنا بها الأقواس لوضع الأعداد في مجموعات، لقد رأت بايثون تلك العملية السابقة كما يلي: ((6 * 5) + (7 - 5)) / (7 + 1) => (30 + 2) / 8 => 32 / 8 => 4 فماذا يحدث لو كتبنا نفس العمليات دون الأقواس؟ >>> print(6 * 5 + 7 - 5 / 7 + 1) 37.2857142857 حصلنا على هذه النتيجة لأن بايثون تنفذ عمليتي الضرب والقسمة قبل الجمع والطرح، لذا رأتها على النحو التالي: (6*5) + 7 - (5/7) + 1 => 30 + 7 - 0.7143 + 1 => 37 - 0.7143 + 1 => 38 - 0.7143 => 37.2857... ومع أن ترتيب بايثون لمعالجة العمليات الحسابية هو نفسه الذي تقضيه قوانين الرياضيات، إلا أنه يختلف عما يجب عليك توقعه كونك مبرمجًا، لأن بعض لغات البرمجة لها قوانينها في ترتيب معالجة العمليات الحسابية، وهو ما يعرف بأسبقية العوامل operator precedence، لذا تأكد من النظر أولًا في توثيق لغة البرمجة التي تتعامل معها لترى أسلوبها الخاص؛ أما بايثون فقاعدتها العامة هي ما يقتضيه الحدس والمنطق، لكن هذا له استثناءاته، مما يجعل استخدام الأقواس خيارًا آمنًا لضمان حصولنا على النتيجة التي نريدها، خاصةً عند التعامل مع حسابات طويلة مثل التي رأيناها في المثال السابق، ومن الأمور التي يجب ملاحظتها أننا إذا استخدمنا عامل القسمة / فسنحصل على النتيجة الدقيقة للعملية، كما يلي: >>> print(5/2) 2.5 فإذا أردنا الحفاظ على القسم الصحيح للناتج فقط فنستخدم عامليْ قسمة متتاليين // لنحصل على العدد الكامل في النتيجة، وستطبع بايثون ناتج القسمة كما يلي: >>> print(5//2) 2 أما إذا أردنا الحصول على باقي عملية القسمة فنستخدم محرف النسبة المئوية %: >>> print(5%2) 1 >>> print(7//4) 1 >>> print(7%4) 3 يُعرَف العامل % باسم عامل الباقي modulo، وقد يكون في بعض لغات البرمجة على الصورة MOD أو نحوها، أما في بايثون فنستطيع الحصول على ناتج القسمة والباقي معًا باستخدام الدالة divmod()‎: >>> print( divmod(7,4) ) (1, 3) هذه العمليات الحسابية للأعداد الصحيحة مهمة للغاية في البرمجة، فمنها نستطيع تحديد كون العدد زوجيًا أم فرديًا من خلال قسمته على 2 ورؤية الباقي (يكون زوجيًا إذا كان الباقي صفرًا)، كما يلي: >>> print( 47 % 2 ) 1 فنحن نعلم الآن أن العدد 47 هو عدد فردي، وقد يكون هذا أمرًا بدهيًا إذ يمكن معرفة هذا دون تكبد عناء لغة برمجية وانتظار خرج عملية فيها، لكن ماذا لو كنا نقرأ بيانات من ملف، أو كان المستخدم يدخل تلك البيانات، ثم يكون على برنامجنا معرفة هل العدد فردي أم زوجي من تلقاء نفسه، عندئذ لن نستطيع التدخل هنا لتقرير ذلك بالنظر في كل عدد، بل سنستخدم عامل الباقي كما فعلنا ليتحقق من المطلوب بدلًا منا، وتلك حالة واحدة فقط من الحالات التي تبرز فيها أهمية هذه العمليات، لذا تدرب عليها إلى أن تتقنها. دمج السلاسل النصية والأعداد >>> print( 'The total is: ', 23+45) The total is: 68 لقد طبعنا سلاسل نصيةً أوأعدادًا فيما سبق، أما الآن فسندمج الاثنين في تعليمة واحدة، فاصلين بينهما بفاصلة إنجليزية ,، ويمكن توسيع تلك الميزة بجمعها مع إحدى خصائص بايثون في إخراج البيانات، وهي سلسلة التنسيق format string: >>> print( "The sum of %d and %d is: %d" % (7,18,7+18)) The sum of 7 and 18 is: 25 تحتوي سلسلة التنسيق على علامات %، غير أنها تختلف عن عامل الباقي الذي تحدثنا عنه من قبل، بل يكون لها معنىً خاص حين تُستخدم في سلسلة كالتي بين أيدينا، وحالات الاستخدام المتعددة تلك تعني أن علينا قراءة المكتوب بانتباه لتحديد سياقه، ثم تحديد وظيفة % فيه، حيث يخبر الحرف d الذي بعد محرف % بايثون بوجوب وضع عدد عشري مكانه، والذي نحصل على قيمته -التي سنستخدمها لتحل محله- من القيم الموجودة داخل التعبير الذي بين الأقواس، والذي كتِب بعد علامة % المنفردة في نهاية العبارة، ومن المهم أن يكون عدد القيم التي في القوس النهائي مطابقًا لعدد علامات % الموجودة في السلسلة النصية. توجد حروف أخرى يمكن وضعها بعد علامة %، ويستعمَل كل منها لغرض مختلف، منها: ‎%S للسلاسل النصية. ‎%x للأعداد الست عشرية hexadecimal. %0.2f للأعداد الحقيقية التي لها منزلتان عشريتان كحد أقصى. %04d لإزاحة العدد بأصفار قبله ليكون من أربعة منازل عشرية. انظر توثيق بايثون للمزيد من المعلومات. ونستطيع طباعة أي كائن بايثون باستخدام دالة الطباعة، حتى لو كانت النتيجة على غير ما كنا نريد، فربما تكون وصفًا لنوع الكائن، لكننا نستطيع طباعة ذلك على أي حال. >>> print( "The sum of {:d} and {:d} is: {:d}".format(7,18,7+18) The sum of 7 and 18 is: 25 زيادة إمكانيات اللغة >>> import sys إذا كتبنا السطر أعلاه في محث بايثون ثم ضغطنا على زر الإدخال، فلن نرى شيئًا على الشاشة، غير أن هذا لا يعني عدم حدوث شيء ما في الخلفية، ولشرح ما حدث بعد كتابة هذه الأمر سننظر أولًا إلى معمارية بايثون نفسها، وحتى لو لم تكن تستخدم بايثون فتابع الشرح، إذ ستكون ثمة آليات مشابهة في اللغة التي تستخدمها. عند بدء لغة بايثون تتاح لنا عدة دوال وأوامر، وهذه الأوامر مدمجة في اللغة وتسمى بالمضمَّنات built-ins، لأنها مبنية داخل نسيج اللغة نفسها، غير أن بايثون تستطيع توسيع قائمة الدوال المتاحة بدمج وحدات توسيع extension modules فيها، وهو يشبه شراء المرء لأداة جديدة من متجر العُدد والآلات ليضيفها إلى مجموعته المنزلية، وفي مثالنا فإن الآلة هي sys، وقد وضعتها العملية import داخل صندوق الآلات الذي سنستخدمه؛ أما حقيقة ما يفعله هذا الأمر فهو إتاحة "أدوات" جديدة على شكل دوال للغة بايثون، تُعرَّف داخل وحدة اسمها sys، وتلك طريقة توسيع بايثون لتنفيذ أي شيء غير مدمج في النظام الأساسي، وستجد أكثر من مئة وحدة في المكتبة القياسية standard library التي تحصل عليها مع بايثون، كما يمكنك إنشاء وحداتك الخاصة واستيرادها واستخدامها مثل الوحدات التي وفرتها بايثون عند تثبيتها بالضبط، وسنعود إلى هذا الأمر لاحقًا. كذلك ستجد مزيدًا من الوحدات التي يمكن تحميلها من الإنترنت، فإذا بدأت مشروعًا لا تغطيه الوحدات التي في المكتبة القياسية، فانظر في الإنترنت أولًا فلعلك تجد شيئًا يساعدك. الخروج السريع لننظر الآن في كيفية استخدام تلك الأدوات التي أدخلناها، فإذا كتبنا الأمر التالي في محث بايثون؛ فسنجعل بايثون تنهي نفسها وتخرج، لأننا نكون قد نفّذنا الدالة exit المعرَّفة في وحدة sys. >>> sys.exit() لاحظ أننا نخرج من بايثون عادةً بكتابة محرف نهاية الملف End Of File واختصاره EOF في محث بايثون، وهو CTRL+Z على ويندوز أو CTRL+D على أنظمة يونكس Unix؛ أما إذا كنت تستخدم بيئة تطوير فتخرج من قائمة File ثم Exit، وإذا حاولنا تنفيذ هذا في أداة تطوير مثل IDLE؛ فإن الأداة تنتبه لمحاولة الخروج وتعرض رسالةً تقول شيئًا ما حول SystemExit، لكن لا تشغل بالك بها، فهذا يعني أن البرنامج يعمل وأن الأداة تحاول توفير الوقت عليك لئلا تبدأ من الصفر مرةً أخرى. لاحظ أن exit لها أقواس حولها، وذلك لأنها دالة معرفة في وحدة sys، حيث سنحتاج إلى وضع هذه الأقواس عند استدعاء دالة بايثون حتى لو لم تحتوي الأقواس نفسها على أي شيء، فإذا كتبنا sys.exit دون الأقواس، فستستجيب بايثون لنا بإخبارنا أن exit دالةٌ، بدلًا من تنفيذ الدالة نفسها. أخيرًا، لاحظ أن التعليمتين الأخيرتين مفيدتان عند استخدامهما معًا، أي أننا سنكتب ما يلي للخروج من بايثون بدلًا من EOF: >>> import sys >>> sys.exit() هكذا نكون قد كتبنا تسلسلًا بسيطًا من تعليمتين، ونكون قد خطونا قليلًا نحو البرمجة الحقيقية. استخدام جافاسكربت لا توجد طريقة سهلة في جافاسكربت لنكتب الأوامر ونراها تنفَّذ مباشرةً كما في بايثون، لكن نستطيع كتابة جميع الأوامر البسيطة أعلاه في ملف HTML واحد ثم تحميلها إلى المتصفح، وسنرى كيف تبدو حينئذ في جافاسكربت: <html><body> <script type="text/javascript"> document.write('Hello there!<br />'); document.write("Monty Python\'s Flying Circus has a \' within it<br />"); document.write(6+5); document.write("<br />"); document.write( ((8 * 4) + (7 - 3)) / (2 + 4) ); document.write("<br />"); document.write( 5/2 ); document.write("<br />"); document.write( 5 % 2 ); </script> </body></html> سيكون الخرج كما يلي: Hello there! Monty Python's Flying Circus has a ' within it 11 6 2.5 1 نستخدم document.write لإخراج النص إلى نافذة المتصفح، وهذا يكافئ تقريبًا دالة print في بايثون، وسنرى قريبًا طريقةً مختلفةً قليلًا في VBSCript لعرض المخرجات في المتصفح في المثال التالي. لاحظ كيف اضطررنا إلى كتابة ‎<br />‎ كي نجبر البرنامج أن يعرض الخرج التالي في سطر جديد، وذلك لأن جافاسكربت تكتب مخرجاتها في صورة HTML، والتي تعرض السطر بأقصى عرض تسمح به نافذة المتصفح لديك، فإذا أردنا قسرها على إنهاء السطر وبدء سطر جديد، فسنستخدم رمز HTML الخاص بالسطر الجديد، وهو ‎<br />‎. لاحظ كيف هرّبنا محارف الاقتباس المفردة بوضع شرطة مائلة خلفية \ قبل الاقتباس، سنشرح ذلك بالتفصيل حين نتحدث عن السلاسل النصية في فصل البيانات وأنواعها. VBScript كما ذكرنا بخصوص جافاسكربت؛ فيجب أن ننشئ ملفًا لوضع أوامر VBScript فيها ثم نفتحه في المتصفح، وإذا كتبنا الأوامر السابقة باستخدام VBScript فستبدو كما يلي: <html><body> <script type="text/vbscript"> MsgBox "Hello There!" MsgBox "Monty Python's Flying Circus has a ' in it" MsgBox 6 + 5 MsgBox ((8 * 4) + (7 - 3)) / (2 + 4) MsgBox 5/2 MsgBox 5 MOD 2 </script> </body></html> سنرى في الخرج كثيرًا من الصناديق الحوارية، يعرض كل منها خرجًا من أحد الأسطر التي في البرنامج، فإذا أردنا أن نجعل جافاسكربت تخرج لنا مثل تلك الصناديق الحوارية فسنستخدم alert("Hello There!")‎ بدلًا من document.write("Hello there!<br>")‎، فقد استخدمنا alert هنا بدلًا من MsgBox التي في VBScript. لاحظ أننا لا نستطيع بدء سلسلة نصية باستخدام علامة اقتباس مفردة في VBScript، لكن يمكننا إدراج اقتباسات مفردة داخل سلاسل نصية ذات علامات اقتباس مزدوجة، باستخدام الدالة Chr التي إذا أعطيناها رمزًا لمحرف أعادت لنا ذلك المحرف، وبما أن هذا المثال يبدو فوضويًا للغاية، لنلق نظرةً على المثال التالي الذي يوضح كيفية عملها: <script type="text/vbscript"> Dim qt qt = Chr(34) MsgBox qt & "Go Away!" & qt & " he cried" </script> لمعرفة رمز أي محرف تريده؛ تستطيع الاسترشاد بهذا الموقع، وأخذ الرمز العشري decimal منه، أو بالنظر في خريطة المحارف التي يوفرها نظام التشغيل الخاص بك، إذ توفر أغلب نظم التشغيل المشهورة بريمجًا لذلك؛ أما إذا لم ترد استخدام هذا ولا ذاك لسبب ما؛ فاستخدم الجزء التالي من لغة جافاسكربت واستبدل المحرف الذي تريده بمحرف الاقتباس المزدوج الذي في المثال: <script type="text/javascript"> var code, chr = '"'; // put the character of interest here code = chr.charCodeAt(0); document.write("<br />The character code of " + chr + " is " + code); </script> لا تشغل بالك الآن بمعنى الأرقام التي في المثال، إذ سنعود إليها في الفصل التالي، وإنما سقناها الآن من أجل استخدامها إذا اضطررنا إلى إيجاد قيمة محرف ما. خاتمة تلك كانت نظرتنا الأولى على البرمجة، ولعلها كانت سهلة الفهم والإدراك، لكن سنحتاج إلى أن ننظر في أنواع البيانات التي سنقابلها في البرمجة وسنحتاج إليها قبل الشروع في البرمجة الحقيقية، كما سنرى الأمور والعمليات التي سنجريها على تلك البيانات. وقد عرفنا في هذا الفصل أن البرنامج قد يكون صغيرًا للغاية، لذا فلا مانع من أن يكون مجرد أمر واحد، وأن أسلوب بايثون في إجراء العمليات الحسابية هو نفسه الأسلوب المتبع في الرياضيات، وإذا أردنا الحصول على نتيجة كسرية فيجب أن نستخدم أعدادًا كسريةً كذلك، وأننا نستطيع دمج النصوص والأرقام باستخدام عامل التنسيق %، وأخيرًا عرفنا أننا نخرج من بايثون بكتابة import sys; sys.exit()‎. ترجمة -بتصرف- للفصل الرابع من كتاب Learning To Program لصاحبه Alan Gauld. اقرأ أيضًا المقال التالي: مدخل إلى البيانات وأنواعها: أنواع البيانات الأساسية المقال السابق: بداية رحلة تعلم البرمجة ما هي البرمجة؟ تعلم البرمجة
    1 نقطة
×
×
  • أضف...