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

البحث في الموقع

المحتوى عن 'variable'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

تم العثور على 3 نتائج

  1. بعد أن تعرّفنا في الدّرس السّابق على طريقة تنصيب بايثون وكيفيّة العمل معها، سنكمل في هذا الدّرس مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع البيانات مثل المُتغيّرات وأنواعها كالأرقام وإسناد القيم. ولكن قبل ذلك عليك أن تتعرّف على طريقة دعم اللغة العربيّة، ويجب عليك أن تفهم بعض المُصطلحات المتداولة في مجال البرمجة (والتّي اعتَمدتُ عليها في هذا الدّرس). تذكير: نقوم بتنفيذ الأسطر البرمجيّة مُباشرة من مُفسّر بايثون، لمزيد من المعلومات عن المُفسّر راجع الدّرس السّابق. وللتوسع في لغة بايثون وتعلمها أكاديميًا، ننصحك بالانضمام إلى دورة تطوير تطبيقات باستخدام لغة بايثون التي تقدمها أكاديمية حسوب. دعم اللغة العربية في بايثون قد تواجه خطأ إذا حاولت تنفيذ أمر طباعة جملة "مرحبا بالعالم" مُستخدما حروفا عربية، لذلك يجب عليك أن تكتب السّطر التّالي، قبل كتابة أي أمر يحتوي على كلمات عربية: # -*- coding: utf-8 -*- المصطلحات مخرج Output: تعني الجواب أو النّتيجة الذي يُقدّمها مُفسّر بايثون، فمثلا إذا طلبت من مُفسّر بايثون طباعة كلمة Hello، فستستخدم السّطر التّالي: >>> print "Hello" Hello هنا نُسمّي Hello المُخرج الذي يُرجعه البرنامج (أي نتيجة الأمر). مُتغيّر: وهو الاسم الذي نُطلقه على حرف أو “كلمة” تحمل قيمة مُعيّنة، مثلا: >>> name = "abdelhadi" هنا قُمنا بإنشاء مُتغيّر name وأسندنا له القيمة abdelhadi. وإذا أردنا إظهار القيمة abdelhadi فيكفي أن نكتب اسم المُتغيّر في مُفسّر بايثون: >>> print name كما يُمكن أن نضيف تحّية على الشّكل التّالي: >>> print "Hello " + name تُفسّر الشيفرة أعلاه وتكون مُخرجاتها: Hello Abdelhadi يُمكن أن يحمل المُتغيّر عدّة أنواع من القيم، كالأرقام والنّصوص والأحرف… تعيين القيم يُعتبر تعيين قيمة لاسم معيّن من أهمّ أساسيّات البرمجة، وهذا الاسم معروف في البرمجة بالمُتغيّر، وإليك مثالا على ذلك: >>> x = 4 >>> x * x 16 قمنا في المثال أعلاه بوضع القيمة 4 للمتغيّر x، بعبارة أخرى المُتغيّر x يحمل القيمة 4. بحيث يُمكننا استعمال x عوضا عن 4 في باقي الأسطر في برنامجنا. وبعدها قمنا بالعمليّة الحسابيّة x * x أي 4 * 4 وحصلنا على 16 كنتيجة. إذا حاولت أن تستخدم مُتغيّرًا لم يُعرّف من قبل في برنامجك، فستحصل على خطأ كالتّالي: >>> foo Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'foo' is not defined >>> foo = 4 >>> foo 4 حاولنا أعلاه أن نقوم باستخدام المُتغيّر foo الذي لم نعرّفه أساساً، فحصلنا على رسالة من مُفسّر بايثون مفادها بأنّ المُتغيّر foo ليس موجودا. وبعد تعريفه وتعيين القيمة "4" له أصبح بإمكاننا استدعاؤه بدون أي مشكلة. إذا وضعت قيمة مُغايرة لمتغيّر يحمل مُسبقاً قيمة ما، فالقيمة القديمة تُستَبدَل بالقيمة الجديدة، بحيث يحمل المتغيّر القيمة الجديدة. >>> x = 4 >>> x 4 >>> x = 'hello' >>> x 'hello' في المثال أعلاه، قمنا بتحديد القيمة "4" للمتغيّر x ثمّ بعد ذلك قمنا بتحديد "hello" لنفس المُتغيّر فأصبح x يحمل القيمة hello في نهاية المطاف. ويُمكنك تعيين أكثر من قيمة لأكثر من مُتغيّر في آن واحد. >>> a, b = 1, 2 >>> a 1 >>> b 2 >>> a + b 3 ومُبادلة قيمتي مُتغيّرين (بحيث يحمل المُتغيّر قيمة الآخر) سهل جدّا في لغة بايثون: >>> a, b = 1, 2 >>> a, b = b, a >>> a 2 >>> b 1 عند تعيينِ قيمة في بايثون، تكون الأهميّة للجانب الأيمن قبل الأيسر، بحيث يقوم بايثون بالتّعرّف على القيّم في الجانب الأيمن ثمّ يقوم بتعيينها للمتغيّرات في الجانب الأيسر لعلامة = . إذ ما يقع على يسار علامة = هو المُتغير وما يقع على يمينها هو القيمة. التعليقات تُستعمل التّعليقات في البرمجة لشرح وظيفة سطر معين أو لإعطاء فكرة عن برنامجك لمن يقرأ شيفرته، وتكون التّعليقات مسبوقة بعلامة # إما في سطر مستقل أو في نفس سطر الشّيفرة، وتتميّز بأنّها لا تؤثّر على عمل البرنامج إذ يتجاهلها المُفسّر ولا تُنفّذ، وهي عموما اختيارية، لذا فأنت لست مُجبرا على كتابتها، وإليك مثالاً على التّعليقات: >>> # السّطر التّالي عبارة عن تعيين قيمة لمتغيّر >>> x = 'hello' # هذا السّطر عبارة عن تعيين قيمة لمتغيّر الأرقام لقد تعرّفنا من قبل حول كيفيّة التّعامل مع الأرقام بشكل بسيط. >>> 42 42 >>> 4 + 2 6 تدعم بايثون الأعداد العشريّة كذلك. >>> 4.2 4.2 >>> 4.2 + 2.3 6.5 وتدعم العمليّات المُختلفة مثل الإضافة والفرق وغيرهما من العمليّات الحسابيّة: + إضافة - الفرق * الضّرب / القسمة ** الأس (القوة) % باقي القسمة لنجرّب هذه العمليّات على الأعداد الصّحيحة: # عمليّة إضافة >>> 7 + 2 9 # عمليّة فرق >>> 7 - 2 5 # عمليّة ضرب >>> 7 * 2 14 # عمليّة قسمة >>> 7 / 2 3 # الأس >>> 7 ** 2 49 # باقي القسمة >>> 7 % 2 1 إذا تمعّنت في النّظر ستجد أنّ ناتج قسمة 7 على 2 يُساوي 3 وليس 3.5 وهذا لأنّ الرّمز / يُرجع الأرقام الصحيحة فقط عندما يعمل معها، لننظر مالذي سيحدث إذا جرّبنا نفس الأمر لكن بأعداد عشريّة هذه المرّة: >>> 7.0 / 2.0 3.5 >>> 7.0 / 2 3.5 >>> 7 / 2.0 3.5 يُمكن القيّام بالعمليّات الحسابيّة بالاعتماد على أكثر من عامل: >>> 7 + 2 + 5 - 3 11 >>> 2 * 3 + 4 10 هذا مهمّ جدّا وذلك لفهم كيفيّة تعامل لغة بايثون مع العمليّات الحسابيّة، حيث هناك أولويّات للعمليّات وذلك كالقائمة التّالية، من الأقل أولويّة إلى الأه: + - * / % ** ولفهم ذلك أكثر، إليك هذا المثال: عند تنفيذ العمليّة 2 + 3 * 4 في بايثون فالعمليّة الأولى التّي تُنفّذ هي 3 * 4 ، لأن العامل * أكثر أولويّة من عامل +، وبعد ذلك تضاف القيمة إلى 2. >>> 2 + 3 * 4 14 يُمكننا أن نعتمد على الأقواس () لتحديد أولويّات العمليّات، انظر المثال التّالي: >>> (2 + 3) * 4 20 في المثال أعلاه، قمنا بوضع العمليّة 2+3 بين قوسين لإخبار مُفسّر بايثون بأنّ لهذه العملية الأولويّة ويجب حسابها أوّلا، فإن لم نقم بوضع القوسين لقام المُفسّر بحساب العمليّة 4*3 ثم إضافة العدد 2. جميع العمليّات باستثناء ** يبدأ تطبيقها من اليسار ثمّ اليمين. 1 + 2 + 3 * 4 + 5 ↓ 3 + 3 * 4 + 5 ↓ 3 + 12 + 5 ↓ 15 + 5 ↓ 20 تمارين تمرين 1 ما هي مُخرجات (القيّم التّي سيطبعها) البرنامج التّالي: x = 4 y = x + 1 x = 2 print x, y تمرين 2 ما هي مُخرجات (نتيجة) البرنامج التّالي: x, y = 2, 6 x, y = y, x + 2 print x, y تمرين 3 ما هي مُخرجات البرنامج التّالي: a, b = 2, 3 c, b = a, c + 1 print a, b, c ترجمة -وبتصرف- للكتاب Python Practice Book لصاحبه Anand Chitipothu.
  2. نكتُب شفرات برمجيةً أساسا لحلّ مشاكل. مالذي يحدُث عندما تنقر على زرّ؟ هذه أيضًا مشكلة وينبغي علينا - نحن المطورين - حلّها. نبدأ هذا الدّرس بحلّ مشكلة صغيرة. عدّ التفاحات إن كانت لديك 4 تفاحات واشتريت 27 تفاحة أخرى فكم سيكون لديك من تفاحة؟ اكتُب الإجابة في محرّر النصوص. ما هي إجابتك؟ // هل هي هذه؟ 31 // Or أم هذه؟ 4 + 27 الإجابتان صحيحتان، إلا أن الأخيرة أحسن؛ إذ أنك تترك لجافاسكريبت عبْء الحساب وتخبره كيف يصل إلى النتيجة. ولكن لا يزال عندنا مشكلة في الشفرة السابقة. إنْ نظرت إلى 4 + 27 خارج سياق مشكل التفاحات، فهل ستعرف أننا نعدّ التفاحات التي تحملها الآن؟ الأرجح أن الإجابة هي لا. الأفضل هو استخدام الطريقة الرياضية لإحلال متغيّرات مكان الأعداد 4 و27؛ إن فعلنا ذلك فستكون لدينا القدرة على كتابة شفرة برمجية ذات معنى: initialApples + applesBought initialApples: عدد التفاحات الابتدائي. applesBought: عدد التفاحات المشتراة. تُسمّى عمليّة إحلال متغيّر باسم initialApples مكان العدد 4 بتعريف المتغيّر Declaring a variable. تعريف المتغيّرات تُعرَّف المتغيّرات بالصيغة التالية: const variableName = 'value' توجد أربعة أجزاء في الجملة السابقة يجب الانتباه إليها: اسم المتغيّر variableName القيمة Value علامة الإسناد Assignment = الكلمة المفتاحية const اسم المتغيّر تُشير variableName إلى اسم المتغيّر الذي أنت بصدد تعريفه. يمكنك إعطاء المتغيّر أي اسم تريده بشرط: أن يكون كلمة واحدة أن يتكوّن فقط من حروف لاتينية (a-z, A-Z)، أرقام (0-9) أو علامة تسطير سفلي _ ألّا يبدأ برقم ألّا يكون كلمة محجوزة Reserved keywords في جافاسكريبت إن أردت استخدام أكثر من كلمة في اسم متغيّر فستحتاج لإدماج الكلمات معا وكتابة الحرف الأول من كل الكلمات الموجودة بعد الكلمة الأولى بحرف كبير Capital letter، تُسمّى هذه الطريقة بـ Camel case. المتغيّر applesToBuy مثال على كتابة متغيّر باسم مكوّن من كلمات عدّة. القيمة القيمة هي ما تريد أن يكونه المتغيّر. يمكن للقيمة أن تكون بيانات أوليّة Primitives (مثل سلاسل المحارف Strings والأعداد) أو كائنات (مصفوفات ودوالّ). علامة الإسناد = في جافاسكريبت لا تعمل علامة الإسناد = بنفس طريقة عمل التساوي = في الرياضيات. لذا يتوجّب عدم الخلط بينهما. عندما تستخدم العلامة = في جافاسكريبت فأنت تُسنِد قيمة جزء العبارة الموجود يمين العلامة = تُسنده إلى الجزء الموجود يسار العلامة. في المثال أدناه نُسنِد القيمة 4 إلى المتغيّر initialApples. const initialApples = 4 أو بعبارة أخرى نعطي المتغيّر initialApples القيمة 4. إن طلبت طباعة المتغيّر initialApples فستجد أن النتيجة تساوي 4. التقويم قبل الإسناد لا يُخزّن المتغيّر سوى قيمة وحيدة؛ فإذا كانت لديك معادلة على يمين العلامة = فإن مفسّر جافاسكريبت سيُنفّذ المعادلة الموجودة على الطرف الأيمن ثم بعد ذلك يُسنِد القيمة المُتحصَّل عليها إلى المتغيّر. const initialApples = 4 const applesToBuy = 27 const totalApples = initialApples + applesToBuy سيبدأ جافاسكريبت عند تعريف المتغيّر totalApples في المثال أعلاه بتقويم العبارة initialApples + applesToBuy (التي تعطي النتيجة 31) ثم بعد ذلك يُسنِد القيمة 31 إلى المتغيّر totalApples. الكلمة المفتاحية const توجد ثلاث كلمات مفتاحية لتعريف المتغيّرات، const إحداها. الكلمتان الأخريان هما let وvar. تُستخدَم كل من الكلمات الثلاث لتعريف متغيّرات؛ إلا أنه يوجد اختلاف بين عملها. الفرق بين const وlet وvar أُتيح استخدام كلّ من const وlet في الإصدار السادس من جافاسكريبت ES6، ولهما خصوصيّات مقارنة مع var المتاحة منذ إصدارات سابقة، والتي أصبح استخدامها غير منصوح به. يؤدّي تعريف متغيّر بالكلمة المفتاحية const إلى انعدام إمكانيّة إسناد قيمة جديدة للمتغيّر بعد تعريفه. يعني هذا أن الشفرة التالية ستُنتِج خطأ عند تنفيذها: const applesToBuy = 22 // إعادة إسناد قيمة لمتغيّر عُرِّف بـ const يؤدي إلى خطأ أثناء التنفيذ applesToBuy = 27 أما إن عرّفت متغيّرا بالكلمة المفتاحية let فسيمكنك إسناد قيمة جديدة له دون خطأ: let applesToBuy = 22 applesToBuy = 27 console.log(applesToBuy) أيهما يجب أن أستخدم const أم let؟ في البداية سيكون استخدامُ let بدلا من const أسهل وأقل إثارة للأخطاء؛ إلا أنك مع الوقت وبعد كتابة برامج عدّة ستلاحظ أنه من الأحسن لك التقليل من إمكانية إسناد قيم جديدة للمتغيّرات باستخدام const. ليس هذا الدرسُ التقديمي مناسبا للدخول في تفاصيل أسباب استخدام const لتعريف المتغيّرات. لكن بما أنك ستبدأ في استخدام const أكثر من let عند اكتساب الخبرة بكتابة برامج عدّة بجافاسكريبت فمن الأنسب التعوّد من الآن على هذا الأمر. بالنسبة لـvar فليست لك حاجة في استخدامها، const و let أفضل بكثير. الخلاصة تُستخدَم المتغيّرات في جافاسكريبت للاحتفاظ بقيم. يمكن للمتغيّرات تخزين أي نوع من القيم، سواء كانت بيانات أوليّة أو كائنات. تختلف العلامة = في جافاسكريبت عن علامة التساوي = في الرياضيّات، وتدلّ على الإسناد. ابتعد عن الكلمات المحجوزة لتسمية المتغيّرات واكتب أسماء المتغيّرات المكوّنة من عدّة كلمات وفق أسلوب Camel case. توجد ثلاث كلمات مفتاحية لتعريف المتغيّرات في جافاسكريبت وهي const وlet وvar. استخدم let عندما تريد أن تتاح لك إمكانية التعديل على قيمة المتغيّر. لم تعد توجد حاجة لاستخدام الكلمة المفتاحية var في جافاسكريبت. ترجمة - بتصرّف - للمقال What are variables and why use them in JavaScript لصاحبه Zell Liew حقوق الصورة البارزة محفوظة لـ Freepik
  3. رأينا في الدرس السابق كيف كتبنا سكربتًا يولِّد صفحة HTML، لكن هذا ليس كافيًا لنا، فلنقم ببعض التعديلات. #!/bin/bash # sysinfo_page - A script to produce an HTML file cat <<- _EOF_ <html> <head> <title> My System Information </title> </head> <body> <h1>My System Information</h1> </body> </html> _EOF_ هل لاحظت كيف أنَّ العبارة "My System Information" مكررة مرتين في السكربت السابق؟ لنُحسِّنها هكذا: #!/bin/bash # sysinfo_page - A script to produce an HTML file title="My System Information" cat <<- _EOF_ <html> <head> <title> $title </title> </head> <body> <h1>$title</h1> </body> </html> _EOF_ أضفنا سطرًا إلى بداية السكربت ووضعنا ‎$title بدلًا من العبارة "My System Information". المتغيرات ما فعلناه في الأعلى سيمهد لنا الطريق لشرح فكرة أساسية جدًا موجودة في جميع لغات البرمجة تقريبًا: المتغيرات (variables). المتغيرات هي أماكن في الذاكرة يمكن أن تُستعمَل لتخزين المعلومات، ويُشار إليها باسمٍ مُميِّزٍ لها. أنشأنا في السكربت السابق متغيرًا اسمه title ووضعنا العبارة "My System Information" في الذاكرة، ثم استخدمنا ‎$title لإخبار الصَدَفة أننا نريد إجراء "توسعة المعاملات" (parameter expansion) ونضع محتوى المتغير بدلًا من اسمه. عندما ترى الصَدَفة كلمةً تبدأ برمز $ فستحاول معرفة إذا كانت تُشير تلك الكلمة إلى متغير، ثم ستضع القيمة المُخزَّنة فيه -أي المتغير- مكان ورود تلك الكلمة. كيفية إنشاء متغير كل ما عليك فعله لإنشاء متغير هو وضع اسم المتغير في سطرٍ مستقل متبوعًا برمز المساواة (=) دون أيّة فراغات، ثم كتابة المعلومات التي تريد إسنادها بعد رمز المساواة. أسماء المتغيرات حسنًا، أنت من يُسمي المتغيرات، لكن هنالك بعض القواعد التي عليك مراعاتها: يجب أن تبدأ أسماء المتغيرات بحرف. يجب ألّا يحتوي اسم المتغير على فراغات. استخدم الشرطات السفلية (_) بدلًا منها. لا تستطيع استخدام علامات الترقيم. كيف أثر المتغير على السكربت الذي نكتبه سهَّلت إضافة المتغير title الأمر علينا من ناحيتين: الأولى هي تقليل مقدار الكتابة الذي نحتاجه، والثانية (وهي المهمة) هي أننا جعلنا صيانة السكربت أسهل. كلما ازدادت خبرتك في كتابة سكربتات الشِل (أو أي لغة برمجة أخرى)، فستتعلم أنَّك لا تنتهي من كتابة البرنامج في خطوة واحدة، فهنالك تعديلات وتحسينات من قبِل كاتب البرنامج أو من غيره؛ وهذا هو حجر الأساس لعملية تطوير البرمجيات مفتوحة المصدر. فلنقل مثلًا أنَّك تريد تغيير العبارة "My System Information" إلى "Linuxbox System Information"، فكنت تحتاج -في النسخة القديمة من السكربت- إلى تغيير تلك العبارة في مكانين منفصلين، أما في النسخة الجديدة التي فيها المتغير title فلا حاجة إلى تغيير تلك العبارة إلا في مكانٍ وحيد. قد تظن أنَّ هذا التغيير تافه أو ليس له فائدة حقيقية، لكن ذلك لأنَّ السكربت الذي نكتبه ما يزال بسيطًا وقصيرًا؛ لكن التنظيم أساسيٌ جدًا في السكربتات الكبيرة والمعقدة. متغيرات البيئة Environment Variables هنالك بعض المتغيرات المضبوطة في جلسة الصَدَفة من قِبل ملفات البدء التي رأيناها سابقًا. استعمل الأمر printenv لرؤية جميع المتغيرات الموجودة في البيئة عندك؛ يحتوي أحد تلك المتغيرات "اسم المضيف" (hostname) لنظامك؛ ونستطيع أن نُضيف ذاك المتغير إلى السكربت كالآتي: #!/bin/bash # sysinfo_page - A script to produce an HTML file title="System Information for" cat <<- _EOF_ <html> <head> <title> $title $HOSTNAME </title> </head> <body> <h1>$title $HOSTNAME</h1> </body> </html> _EOF_ أصبح السكربت الآن يضع اسم الحاسوب الذي نعمل عليه في صفحة HTML الناتجة. لاحظ أنَّ أسماء متغيرات البيئة (وفق التقاليد البرمجية) تُكتَب بأحرفٍ كبيرة. تعويض الأوامر سنحاول الآن تحسين السكربت بوضع ناتج من أحد الأوامر فيه. كانت آخر نسخة من السكربت قادرةً على إنشاء صفحة HTML تحتوي على أسطر نصية بسيطة تتضمن اسم المضيف لجهازنا المأخوذ من متغير البيئة المسمى HOSTNAME، سنُحدِّث السكربت الآن لإضافة بصمة وقت إلى الصفحة لكي تُشير إلى آخر تحديث لها، مع ذكر اسم المستخدم الذي قام بالتحديث. #!/bin/bash # sysinfo_page - A script to produce an HTML file title="System Information for" cat <<- _EOF_ <html> <head> <title> $title $HOSTNAME </title> </head> <body> <h1>$title $HOSTNAME</h1> <p>Updated on $(date +"%x %r %Z") by $USER</p> </body> </html> _EOF_ كما لاحظت، استعملنا متغير بيئة جديد هو USER لكي نحصل على اسم المستخدم؛ واستعملنا تعبيرًا غريب المظهر: $(date +"%x %r %Z") المحارف ‎$()‎ تقول "يجب وضع ناتج الأمر المُحاط بالأقواس هنا". وأردنا في السكربت السابق وضع ناتج الأمر date +"%x %r %Z"‎ الذي يطبع التاريخ والوقت الحاليين. لدى الأمر date ميزاتٌ وخياراتُ تنسيقٍ كثيرة، نستطيع إلقاء نظرة عليها كالآتي: $ date --help | less لاحظ أنَّ هنالك صيغة قديمة بديلة عن (‎$(command هي استخدام علامة الاقتباس الخلفية "`"، هذه الصيغة القديمة متوافقة مع صَدَفة Bourne Shell الأصلية (sh)؛ لكنني لا أنوي استخدام الشكل القديم لأنني أشرح استخدام bash الحديثة وليس sh. تدعم صَدَفة bash جميع السكربتات المكتوبة لـ sh، ولهذا تكون الصيغتان الآتيتان متكافئتين: $(command) `command` إسناد ناتج أحد الأوامر إلى متغير يمكننا أيضًا إسناد ناتج أحد الأوامر إلى متغير: right_now=$(date +"%x %r %Z") نستطيع أيضًا وضع متغير داخل متغير آخر كما يلي: right_now=$(date +"%x %r %Z") time_stamp="Updated on $right_now by $USER" الثوابت كما يوحي اسم "المتغيرات": قيمة المتغير قابلة للتبديل، وهذا يعني أنَّه من المحتمل أثناء تنفيذ السكربت أن تُعدَّل قيمة المتغير نتيجةً لعمليةٍ قمتَ بها. في المُقابل، هنالك قيم يجب ألّا تتغير بعد ضبطها، وتسمى "الثوابت" (constants). سبب ذكري لهذا الموضوع هو أنَّ مفهوم الثوابت شائعٌ في البرمجة، وتدعمها أغلبية لغات البرمجة، لكن لكي أكون صريحًا معك، لم أشاهد استعمالًا عمليًا لها. فلو كان من المفترض أن تبقى قيم المتغير ثابتةً فسيسمى المتغير بأحرفٍ كبيرة لتذكير المبرمج أنَّ قيمة المتغير ثابتة. تُعتبَر متغيرات البيئة ثوابتَ لأنها نادرًا ما تتغير؛ وتُعطى الثوابت أسماءً ذات أحرفٍ كبيرة عادةً. سأستعمل العرف الآتي في هذا السكربت: الأحرف الكبيرة للثوابت والأحرف الصغيرة للمتغيرات. يبدو السكربت الذي نعمل عليه كالآتي حاليًا: #!/bin/bash # sysinfo_page - A script to produce an HTML file title="System Information for $HOSTNAME" RIGHT_NOW=$(date +"%x %r %Z") TIME_STAMP="Updated on $RIGHT_NOW by $USER" cat <<- _EOF_ <html> <head> <title> $title </title> </head> <body> <h1>$title</h1> <p>$TIME_STAMP</p> </body> </html> _EOF_ ترجمة -وبتصرّف- للمقالَين Variables و Command Substitution And Constants لصاحبهما William Shotts.
×
×
  • أضف...