post

#9 المتغير النصي String – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : ZRO

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  المتغيرات الجزء الثاني

المتغيرات Variables

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ التاسع من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، في الدرس الماضي تحدثنا عن المتغيرات الـ Variables، وتعرفنا على النوع العددي Integer من خلال الكلمة المحجوزة int، الآن سنتعرف على نوع جديد من المتغيرات، تجدون على الشاشة المثال الذي قمنا بكتابته في الدرس السابق، لا أريد حذف الجمل التي قمت بكتابتها، فبدلاً من ذلك، سأقوم بتحويل الأسطر التي كتبتها إلى جمل ملاحظات، ولكننا سنتعلم طريقة أسرع من كتابة // في بداية كل سطر، مما يوفر الكثير من الوقت، وذلك من خلال طريقتين:

* الأولى من خلال الأيقونة المتاحة في برنامج الـ Visual Studio، فبعد اختيار جميع الأسطر المراد تحويلها إلى جمل ملاحظات، قم بالضغط على الأيقونة في الأعلى، التي تحمل الاسم Comment out the selected lines، وستجد أن جميع الأسطر تحولت إلى جمل ملاحظات ذو لون أخضر، ولإرجاع الجمل لوضعها الطبيعي، يمكنك الضغط على الأيقونة المجاورة للأيقونة السابقة على اليمين.

* والطريقة الثانية وهي الأكثر شيوعاً، هي إضافة / واحدة ثم إتباعها بنجمة، لتحديد بداية فقرة الملاحظة، ثم في النهاية سأقوم بإضافة نجمة أولاً ثم / لإنهاء تحديد الفقرة.

 

النوع النصي string variables :

الآن سأقوم بكتابة مثال جديد للتعرف على نوع آخر من أنواع بيانات المتغيرات، وللسرعة سأقوم بكتابة المثال كاملاً، ثم سنقوم بتفصيله بعد الانتهاء منه، يمكنك إيقاف الفيديو لكتابة المثال حال ما أنتهي منه:

Console.WriteLine("What is your name?");
Console.Write("Enter your first name: ");
string myFirstName;
myFirstName = Console.ReadLine();
string myLastName;
Console.Write("Enter your last name: ");
myLastName = Console.ReadLine();
Console.WriteLine("Hello " + myFirstName + " " + myLastName);
Console.ReadLine();

قبل البدء بشرح الأسطر التي قمتُ بكتابتها، لا ننسى أن نقوم بحفظ الملف لنتأكد من عدم ضياع أي شيء، وذلك من قائمة File — > Save All، مع ملاحظة أن البرنامج يقوم بالحفظ التلقائي كل مرة تقوم بتنفيذ التطبيق.

قراءة مدخلات نصية من المستخدم :

التطبيق التالي يسأل المستخدم عن اسمه الأول، واسم عائلته ومن ثم يطبع جملة ترحيبية به، وإن قمنا بتنفيذ التطبيق، ستجد أنه يسألني عن اسمي الكامل ثم يطلب مني إدخال الاسم الأول، سأقوم بإدخال Osama ، وبعد الانتهاء سأضغط Enter من لوحة المفاتيح للانتقال إلى السؤال الثاني، الذي يسألني عن اسمي الأخير، وسأقوم بإدخال Deep والضغط على زر Enter، لأجد بالنهاية أنه طبع جملة Hello Osama Deep، سأضغط أخيراً على زر Enter للخروج من التطبيق.

الآن لو نظرت إلى بعض الأسطر ستجدها مألوفة لديك، ففي السطر الأول استخدمنا الدالة WriteLine Method، لطباعة جملة السؤال الموجودة بين أقواس الدالة، ولاحظ أننا استخدمنا WriteLine وليس Write، لأننا نريد طباعة السؤال ثم الانتقال إلى سطر جديد، ثم في السطر التالي قمنا باستخدام الدالةWrite Method ، الموجودة في الكلاس Console ، وسنتعرف عن مفهوم الكلاس أكثر في الدروس المقبلة إن شاء الله،

والـ Write Method تقوم بطباعة الجملة وتبقى في نفس السطر، لأننا نريد من المستخدم إدخال الاسم الأول في نفس السطر، في السطر التالي قمنا بتعريف متغير اسمه myFirstName، وهو من النوع string، وهو نوع جديد سنستخدمه كثيراً في تطبيقاتنا المستقبلية، ويتيح لك هذا النوع وضع مجموعة من الخانات الموجودة على لوحة المفاتيح، سواءُ كانت حروفاً أو أرقاماً أو حتى إشارات، وكما تعلمنا قبل قليل بخصوص حجز المتغيرات، فإننا نقوم هنا بحجز موقع في الذاكرة يتناسب مع النوع string،

الدالة ()ReadLine  :

وفي السطر التالي ستجد تركيبةً جديدةً عليك، ولتفسير هذا السطر سنقوم بتفكيكه إلى ثلاثة أقسام:

فالقسم الأول هو اسم المتغير الذي نريد إسناد قيمة جديدة له، ألا وهو المتغير myFirstName،

والقسم الثاني هي إشارة المساواة الـ Assignment operator، التي تحدثنا أنها تأخذ كل ما على يمينها وتضعه في يسارها،

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

وفي الأسطر التالية يقوم بتكرار ما قمنا بفعله مع المتغير myFirstName، عدا أنه يسأل المستخدم عن اسم عائلته، ويقوم بوضع القيمة المدخلة في المتغير النصي myLastName. وفي الجملة قبل الأخيرة، وبعد إسناد قيم للمتغيرين myFirstName و myLastName، سنقوم بتركيب جملة جديدة نرحب فيها بالمستخدم، وهنا إستخدامٌ جديدٌ لإشارة الجمع +، ففي المثال الأول الذي كتبناه في بداية الدرس، قمنا باستخدام إشارة الجمع لإيجاد حاصل جمع عددين من منظور حسابي، لكن في مثالنا الأخير ، استخدمنا إشارة الجمع لربط نص مع نص آخر، فأنا أود وصل كلمة Hello مع ناتج قيمة الاسم الأول، يجب أن نتعلم كيف تقوم نفس الإشارة Operator، بالتعامل مع أنواع المتغيرات المختلفة، لأننا سنلاحظ أهمية ذلك، كلما تقدمنا في دروس هذه السلسلة إن شاء الله.

لاحظ أيضاً أني قمت بإضافة مسافةٍ واحدةٍ بين الاسم الأول والاسم الأخير، فأنا لا أريد الحصول على الاسمين ملتصقين معاً، وفي السطر الأخير قمنا باستخدام الدالة ReadLine، لتمنع التطبيق من الخروج مباشرة، ولتعطينا مهلة لمشاهدة النتائج. لنقم مرة أخرى بتشغيل التطبيق.

الـ variables سلاح قوي :

بعد الانتهاء من الأمثلة السابقة، أصبحت تمتلك سلاحاً قوياً خلال مسيرتك لتعلم تطوير التطبيقات، فمعرفة التعامل مع المتغيرات سواءً كانت بحجز مكان له، أو باختيار نوع مناسب لما سيحتويه أو بكيفية إعطاءه قيم واستدعاءه، هي أهم ركائز تطوير التطبيقات، فلا يخلوا أي تطبيق من استعمال المتغيرات، وبما أنك أصبحت قادراً على أخذ قيم من المستخدم، أصبح بإمكانك الآن البدء بكتابة تطبيقات تقوم بمعالجة هذه القيم، لإخراجها بصيغة تتناسب مع ما يحتاجه المستخدم من التطبيق.

ملاحظات حول إستخدام المتغيرات variables :

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

وهو أمر في غاية الأهمية، وهو ما يحدد إن كنت ستصبح مطور عادي أم ستصبح مطور منظماً في شؤونك، فلو رجعنا إلى المثال الأول، ستلاحظ أني قمت باستخدام متغيرات x وy، وهي متغيرات قد استخدمناها في حل المعادلات الرياضية في دراستنا. لذلك قد تبدوا مفهومةَ المعنى إن قمت بالنظر لها للوهلة الأولى، لكن عند البدء بكتابة المشاريع الكبيرة، يجب أن نكون حريصين على إعطاء المتغير، اسماً يدل على وظيفته أو على طبيعة القيم التي سيحتويها، فلو قمنا مثلاً بتغيير اسم المتغير myFirstName إلى x ، وتركت مشروعك فترة،  ثم عدت إليه ستسأل نفسك مستغرباً: ليس لدي أي فكرة عن القيمة التي ستكون بداخل هذا الـ x، مما يضطرك للعودة إلى الأسطر السابقة لتتبع استخداماته، لعل تطبيقنا الحالي بسيط وقصير، لكن تخيل غداً عندما يحتوي تطبيقك على مئات الأسطر، سيكون من الصعب عليك تتبع الأسطر البرمجية لإيجاد وظيفة متغير ما، لذلك احرص من الآن على انتقاء اسمٍ مناسبٍ لمتغيرك، وحاول قدر الإمكان أن يكون سهل القراءة ومفهوماً لأي شخص يقرأ أسطرك، بحيث لو اضطررت للاستعانة بمساعدة صديق، لا تدعه يعاني كثيراً لحل مشكلتك، لقد عانينا كثيراً من هذه المشكلة، وهذه النقطة مهمة جداً، وهي فعلاً ما يميزك عن غيرك من المطورين، الذين تجد أسطرهم البرمجية مليئة بـ، r , b , xx , yy, ccc وهكذا.

قم بإرجاع المتغير x إلى اسمه السابق myFirstName، وستلاحظ وجود خاصية جميلة في برنامج الـ Visual Studio، والتي تسهل لك تعديل المتغيرات وتجعلك أسرع في إنتاج وتطوير التطبيق، فبعد تغيير اسم أي متغير، ستلاحظ وجود مصباح صغير بجانب هذا المتغير يسمى Quick Action، حيث إن ضغطت عليه ستجد أنه يطرح عليك، إن كنت تريد تغيير هذا المتغير في كل مكان قمت باستخدامه، حتى على صعيد جميع ملفات مشروعك، سأضغط عليه وسأجد أنه قام بتعديل المتغير في السطرين التاليين.

الملاحظة الثانية: Camel Casing

لربما لاحظت أني قمت باستخدام شكل غريب للمتغير myFirstName، فهو يحتوي على أحرف كبيرة في وسط الكلمات، للوهلة الأولى يبدوا شيئاً غريباً، ولكنك بعد فهمه ستعتمده بشكل كبير لما فيه سهولةٌ لقراءة أسماء المتغيرات، وهذه الطريقة تسمى Camel Casing، حيث أقتبس المطورين شكل سنم الجمل للاستعانة به في تسمية المتغيرات، فتجد أن اسم المتغير myFirstName يحتوي على ثلاث كلمات،  my و first و name ، ولأنه من قواعد كتابة المتغيرات، عدم وجود مسافات في وسطه، فلو قمت بكتابة الكلمات ملتصقةً معاً بأحرف صغيرة، سيكون من الصعب عليك إيجاد بدايات الكلمات، بالتالي قمنا بجعل أول حرف من كل كلمة حرفاً كبيراً ما عدا أول حرف.

الملاحظة الثالثة: لغة الـ #C لغةٌ حساسةٌ للأحرف Case Sensitive

وللتأكيد على حساسية لغة الـ C# لحالة الحروف، فلو قمت بتغيير الاسم myFirstName، إلى الاسم myfirstname بحروف صغيرة، ستلاحظ أن برنامج الـ Visual Studio أظهر أخطاء في الأسطر التالية، لأننا تكلمنا أن لغة الـ C# لغةٌ حساسةٌ للأحرف Case Sensitive، بالتالي فإن المتغير myFirstName بصيغة الـ Camel Casing، يختلف عن المتغير myfirstname ذو الأحرف الصغيرة.

الملاحظة الرابعة: لا يمكن إستخدام كلمات محجوزة

فلا يمكنك تعريف اسم لمتغير مرتين، ولا يمكنك إستخدام اسمٍ مطابقٍ لكلمات لغة الـ #C المحجوزة، ولكي تفهم ما أقصد، لنفترض أني احتجت لحجز متغير جديد في ذاكرة الكمبيوتر، ويحمل نفس الاسم myFirstName،  لاحظ ظهور خط أحمر متعرج تحت الاسم الجديد، وكأن المترجم يقول لك:
المعذرة، لن أسمح لك بالمرور يا سيدي، لأن البطاقة التي تحتوي هذا الاسم، قد تم أخذها مسبقاً.ولو قمنا بالنظر إلى قائمة الـ Error List، أو وضع مؤشر الفأرة على الخط الأحمر، سنجد رسالة مفادها، بمعنى أن هذا الاسم موجود مسبقاً في هذا النطاق. كما أنه لا يمكنك تعريف متغير اسمه int أو string.

الملاحظة الخامسة: حجز وإسناد قيمة في نفس السطر

يمكن حجز مساحة للمتغير وإعطاءه قيمة أولية في نفس السطر، فيمكننا الاستغناء عن السطر رقم 29 وتعريف نوع المتغير في السطر 31، وهذه الطريقة تسمى Initialization، وهي مهمة لأنه يتوجب عليك إعطاء قيمة أولية للمتغير في أقرب فرصة سنحت لك، وبذلك تضع المتغير في وضع صحيح، أيضاً أغلب المطورين يميلون للتقليل من حجم الأسطر البرمجية، لتسريع كتابة التطبيق ولسهولة قراءته أيضاً.

هل يتوجب علينا حفظ أسماء المتغيرات؟

الآن بعد التعرف على طريقة الـ Camel Casing، وبعد تأكيد أن لغة الـ C# لغة حساسة للأحرف، لعلك تقع في حيرة وتسأل نفسك:
هل فعلاً يتوجب أن أقوم بحفظ كل هذه المتغيرات؟ وبما أن الحرف الكبير يختلف عن الحرف الصغير، هل سأحفظ كل هذا المتغيرات بحروفهم الكبيرة والصغيرة؟ والحقيقة أن الجواب على هذين السؤالين، يعتمد على طبيعة محرر النصوص الذي تقوم بكتابة أسطرك البرمجية عليه، فسبب تشديدي منذ بداية السلسلة على اختيار برنامج الـ Visual Studio، هو أنه يحتوي على خاصية الـ IntelliSense في محرر نصوصه، فهناك العديد من الميزات التي تسهل عليك الكتابة، فلو حاولت كتابة كلمة my ، ستجد نافذة صغيرة ظهرت أسفل الكلمة التي أقوم بكتابتها، وتحتوي على أقرب احتمال لما أقوم بكتابته، فيمكننا الاختيار بالأسهم ثم الضغط على مفتاح Enter، أو كتابة الشيء الذي يلي الكلمة ألا وهو إشارة المساواة في حالتنا هنا، ليقوم البرنامج تلقائياً بإكمال الكلمة كاملة. هذه الخاصية تمنعك في الوقوع في الأخطاء الإملائية Syntax Error، وتزيد من كفاءتك كمطور للتطبيقات، ولو رجعت بالفيديو لوجدتني خلال كتابتي الأسطر البرمجية، أستخدم هذه الخاصية بشكل أساسي، ولا أقوم بكتابة كل حرف لكل المتغيرات والكلمات المحجوزة.

تحويل قيمة نصية إلى قيمة عددية :

الآن ماذا إن أردت معالجة البيانات التي يدخلها المستخدم؟ لنقم بكتابة تطبيق يطلب من المستخدم إدخال عددين، حيث سنقوم بطباعة حاصل جمعهما، بالبداية سأقوم بجعل الأسطر السابقة جمل ملاحظات، وذلك باستخدام نجمة فقرة الملاحظة، ثم سأقوم بكتابة التالي:

Console.Write("Enter #1: ");
int myFirstNumber = Console.ReadLine();
Console.Write("Enter #2: ");
int mySecondNumber = Console.ReadLine();
int sum = myFirstNumber + mySecondNumber;
Console.WriteLine("The Summation is: " + sum);
Console.ReadLine();

ستلاحظ وجود أخطاء برمجية في السطرين 39 و 40، وإن حاولت وضع مؤشر الفأرة عليهم ستجد جملة: Cannot implicitly convert type string to int  ، ومعناها أنه لا يمكنك وضع قيمة نصية في متغير عددي، فالدالة ReadLine تقوم بإرجاع قيمة نصية، وبالتالي لا يمكننا وضع القيمة النصية في المتغير العدي من النوع Integer، ولحل هذه المشكلة، سنحاول تحويل القيمة المدخلة إلى قيمة عددية، من خلال الدالة int.Parse() ، لاحظوا الآن أن الخطأين قد إختفيا، وإن حاولنا تنفيذ التطبيق سيعمل من غير أي مشاكل،  لاحظ إن قمت بإدخال حرف بدلاً من رقم، سيظهر لك خطأ أثناء التنفيذ  ، وهذا موضوع متقدم سنتعرف عليه في دروس قادمة إن شاء الله،

قواعد تسمية المتغيرات :

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

DataType VarName ;
DataType VarName = Value;

أما بالنسبة لقواعد تسمية المتغيرات، فيمكن تلخيصها بالنقاط التالية:

* أن يبدأ بحرف، ويمكن إستخدام الحروف العربية ولكن لا أنصح بذلك
* يجوز إستخدام الرمز _ Underscore في البداية أو أي مكان آخر
* لا يجوز إستخدام المسافات في وسط الاسم.
* يجوز إستخدام الأرقام ما عدا أول خانة.
* ألا يكون اسم المتغير محجوزاً سابقاً، أو من أسماء كلمات اللغة المحجوزة.
* لغة الـ #C لغة حساسة فالمتغير Age يختلف عن AGE.

النهاية والواجب :

إلى هنا نكون قد وصلنا إلى نهاية درسنا، لكني سأطلب منك أن تقوم بكتابة تطبيق يسأل المستخدم إدخال عددين، وتقوم بتخزين هذين العددين، لأنك ستقوم بطباعة خمس جمل حسابية،
الجملة الأولى ستظهر حاصل مجموع العددين،
والجملة الثانية ستظهر حاصل طرح العددين،
والجملة الثالثة ستظهر حاصل ضرب العددين،
والجملة الرابعة ستكون حاصل قسمة العددين،
والجملة الأخيرة قم بكتابة: This Program Developed By وأضف اسمك إليه،

مع العلم أن إشارة العمليات التي ستحتاجها هي ( + – * / ) ، الموجودة على لوحة المفاتيح والظاهرة على الشاشة، قم بكتابة التطبيق وبعد الانتهاء منه، قم بأخذ صورة للمخرجات من شاشة الـ Console، وأضف الصورة إلى حسابك على تويتر أو الفيسبوك، ولا تنسى أن تقوم بعمل Mention لحسابي الشخصي، وإرفاق هاشتاق #طورني، لأقوم بإلقاء نظرة عليه.

حسابات الأستاذ أسامة الشخصيةFacebook , Twitter

هناك من سيقوم بعمله بشكل بسيط، لكني متأكد أن هناك من سيقوم بإضافة لمسات خاصة تميزه عن غيره. نصل إلى نهاية درسنا، ألقاك في الدرس التالي إن شاء الله.

مصطلحات الدرس :

string : متغير نصي يحتوي على كل خانة من خانات لوحة المفاتيح سواءاً الحروف الإنجليزية أو العربية أو الرموز والأرقام
int : إختصار لـ Integer  أي عدد صحيح لا كسور فيه مثل 25
Comment Out The Selected Lines : تحويل الأسطر المظللة إلى جمل ملاحظة
Uncomment The selected Lines :  تحويل الأسطر المظللة من جمل ملاحظة إلى أسطر برمجية يتم تنفيذها
File : ملف
Save All : حفظ جميع المستندات والملفات المفتوحة على البرنامج
What is Your Name : ما هو إسمك
Enter Your First / Last Name : أدخل إسمك الأول والأخير
WriteLine : دالة Method تقوم بطباعة سطر كامل ثم تنزل سطر جديد
Console Class : كلاس يحتوي على مجموعة من الدوال يمكن إستخدامها للتعامل مع الشاشة السوداء
Assignment Operator : علامة المساواة (=) وتقوم بإسناد قيمة ما على الطرف الأيمن إلى مكان ما على الطرف الأيسر
ReadLine : دالة تقرأ جملة كاملة بشرط أن تنتهي بزر الإدخال Enter
Quick Action : شكل مصباح أصفر يمكن الضغط عليه لإختيار مقترحات أو تعديلات سريعة وهو مفيد جداً
Camel Casing : طريقة تسمية متعارف عليها للكلمات الملتصقة، بحيث يكون كل أول حرف من الكلمة حرف كبير
Case Sensitive : لغة حساسة للأحرف، فالحرف الصغير يختلف عن الحرف الكبير مثل go تختلف عن Go
A Local Variable Or Function Named “myFirstNAme” is already Defined In This scope : المتغير معرف مسبقاً 
Initialization : إعطاء قيمة أولية للمتغير
IntelliSense : ميزة ذكية تقدم لك إقتراحات وتصويبات للوضع الحالي 
Syntax Error : وهو خطأ في تركيبة السطر البرمجي، وغالباً يكون خطأ إملائي في شكل الأحرف
Enter number 1 : أدخل الرقم الأول
Summation : حاصل الجمع
myFirstNumber : رقمي الأول
mySecondNumber : رقمي الثاني
Cannot implicitly convert type string to int : لا يمكن تحويل النوع النصي إلى عددي ضمنياً
Method : دالة تحتوي على مجموعة من الأسطر البرمجية التي تقوم بوظيفة معينة
Parse : دالة لتحويل نوع إلى نوع آخر
Underscore : علامة ( _ )
Age : عمر
Mention : ذكر وتنويه
This Program Developed By : هذا البرنامج تم تطويره بواسطة

post

#5 قواعدُ الكتابةِ Syntax – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : MTQ

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  قواعدُ الكتابةِ

قواعدُ الكتابةِ في لغةِ الـ #C :

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرس الخامس من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، كما أني أخطأتُ في نطقِ ترتيبِ اسمِ السلسلةِ في المقطعِ السابق، هناكَ أخطاءٌ شائعةٌ يقعُ بها المطورونَ في بدايةِ طريقِهمْ، سنقومُ في هذا الدرسِ بالتَّعرفِ على أهمِّا، وستكونُ أيضاً فرصةً ممتازةً لكَ، لتتعلمَ بعضاً منْ قواعدِ كتابةِ الأسطرِ البرمجيَّةِ الخاصةِ بلغةِ الـ #C، فكمَا هناكَ قواعدٌ للغةِ العربية، يُوجدُ أيضاً قواعدٌ للغةِ الـ #C يجبُ الالتزامُ بها، لذلكَ سأقومُ بإدراجِ أمثلةٍ تحتوي على أخطاءٍ برمجيةٍ، لنقومَ بحلها ونتعرفَ على قواعدِ هذهِ اللغة.

الخطأ الأول :

إنْ حاولتَ تنفيذَ التطبيقِ التَّالي، ستجدُ رسالةً مُفادُها أنَّ هنالكَ أخطاءً أثناءَ عمليةِ البناءِ، ويسألُكَ البرنامجُ عمَّا إن كنتَ تريدُ تكرارَ، أخِرِ مرةٍ كانَ التطبيقُ فيهِ خالياً مِنَ الأخطاءِ، دائماً اختر لا لهذهِ الرِّسالةِ، لأنَّنا نهتمُ بالتعديلاتِ الحاليَّةِ لا التعديلاتِ السابقة. ولو قُمتَ بالنَّظرِ إلى أسفلِ الشَّاشةِ، ستجدُ أنَّ هناكَ قائمةً بالأخطاءِ الموجودةِ Error List، غالباً سيكونُ محتَوى الرِّسالةِ مفهوماً لكَ، لكنْ في بعضِ الأحيانِ ستجدُ صُعوبةً في فَهمِهَا، خصوصاً في مرحلةِ البدايةِ، أيضاً يُمكنُكَ تحريكُ مؤشرِ الـ Mouse، على الجملةِ الخاطئةِ في نافذةِ الأسطرِ البرمجيَّةِ، وستظهرُ لكَ رسالةٌ صغيرةٌ تحتوي على ملخصِ الخطأ، ليسَ هذا فحسبٌ، بلْ إنَّ برنامجَ الـ Visual Studio، يساعدُكَ في كثيرٍ منَ الأحيانِ على اكتشافِ موضِعِ الخطأِ، بوضعِ خطٍ أحمرٍ متعرجٍ تحتَهُ، وأحياناً يكونُ الخطُ أزرقَ اللونِ أو أخضرَ حسبَ طبيعةِ الخطأِ، وسنهتمُ حالياً بالخطِ المتعرجِ ذي اللونِ الأحمرِ، لأنَّهُ دليلٌ على أنَّ هذهِ الجملةَ بالتَّحديدِ، تحتاجُ اهتمامَكَ لأنَّ فيها شيئاً يجبُ إصلاحُهُ.

فيتَّضحُ في مثالِنَا هذَا، أنَّ المشكلةَ هيَ أنَّ الأسطرَ البرمجيَّةَ خارجُ نطاقِ الأقواسِ المطلوبةِ، أو ما يطلقُ عليها اسمُ الـ Code Blocks، أيْ القطعةُ البرمجيةُ الَّتي تبدأُ بقوسٍ وتنتهِي بقوسٍ آخرَ، وسنتعرفُ أكثرَ على هذا المصطلحِ في الدُّروسِ المقبلةِ إن شاء الله، ولإصلاحِ هذا الخطأِ، يجبُ علينا سحبُ الأسطرِ البرمجيَّةِ، ووضعُهَا داخلَ المكانِ المخصصِ لها، بعدَ القيامِ بذلكَ ستجدُ أنَّ التَّطبيقَ أصبحَ خالياً منَ الأخطاءِ، وبإمكانِكَ تنفيذهُ بدونِ أيِّ مشاكلٍ، منْ خلالِ المثالِ السَّابقِ تعلمْنَا قاعدةً منْ قواعدِ لغةِ ال C#، ألا وهيَ أنَّ هنالِكَ اختلافاً في النتيجة، بناءً على مكانِ كتابةِ الأسطرِ البرمجيَّةِ.

الخطأ الثاني :

في هذا المثالِ أيضاً نجدُ أنَّ هنالِكَ أخطاءً في نافذةِ Error List، وهناكَ خطٌ متعرجٌ ذو لونٍ أحمرٍ تحتَ كلمةِ Console، وخطٌ متعرجٌ في نهايةِ السطرِ أيضاً، عدَا أنَّ رسالةَ الخطأِ هذهِ يمكنُ فهمُ محتواها، فالرسالةُ تُخبرنَا أنَّنا نسينَا وضعَ فاصلةٍ منقوطةٍ semicolon  في نهايةِ الجملةِ، فكمَا يجبُ أنْ تنتهيَ الجملةُ بعلامةِ ترقيمٍ في قواعدِ اللغاتِ، فمنْ قواعدِ لغةِ الـ #C، وضعُ فاصلةٍ منقوطةٍ في نهايةِ كلِّ سطرٍ برمجيٍّ، وتجدرُ الإشارةُ هنا إلى أنَّهُ إنْ قمتَ بوضعِ الجملتينِ في نفسِ السطرِ، فلنْ يظهرَ أيُّ خطأٍ لأنَّ كلتا الجملتينِ تنتهيانِ بالفاصلةِ المنقوطة، وسيقومُ المترجمُ بمعرفةِ أنُهما منفصلتان، حتى إن كانتا في نفسِ السطر، ولكنْ منْ بابِ التَّرتيبِ وسهولَةِ القِراءةِ، فالأفضلُ أنْ نضعَ كلَّ جملةٍ في سطرٍ منفصلٍ، منَ المثالِ السابقِ تعلمنا القاعدةَ الثانيةَ منْ قواعدِ لُغةِ الـ #C، ألا وهيَ وجوبُ وضعِ فاصلةٍ منقوطةٍ في نهايةِ كلِّ سطرٍ برمجيٍّ.

الخطأ الثالث :

في هذا المثالِ لمْ يقمِ المترجمُ بالتعرفِ على الكلماتِ الَّتي فوقَ الخطِ المُتعرجِ، لأنَّهُ اعتبرها كلماتٍ محجوزةً أو مُتغيراتٍ لا نصٍ، وتعرفنَا سابقاً أنَّهُ لكتابةِ أيِّ نصٍ يجبُ أنْ نضعَهُ بينَ علامتي تنصيصٍ، لكي نُخبرَ المترجمَ أنَّ هذهِ الجملةَ هيَ جملةٌ نصيَّةٌ، والرَّجاءُ طباعتُهَا كمَا هيَ، ولإصلاحِ هذا الخطأِ قمْ بوضعِ علامتيِّ تنصيصٍ كالتالي: (ضعْ علامتيِّ التَّنصيصِ) ، منَ المثالِ السابقِ تعلمنا القاعدةَ الثالثةَ منْ قواعدِ لُغةِ الـ #C ، ألا وهيَ أنَّهُ في حالِ طباعةِ نصٍ يجبُ وضعهُ بينَ علامتيِّ تنصيصٍ.

الخطأ الرابع :

أمَّا في المثالِ التالِي، فسنتعرفُ هنا على أكثرِ الأخطاءِ شيوعاً، ألا وهيَ صيغةُ أحرفِ الكلماتِ المحجوزةِ، حيثُ ستجدُ رسالةً مفادُها أنَّ المترجِمَ لمْ يَقمْ بالتَّعرفِ على كلمةِ console، وستسألُ نفسكَ: لقد قمتُ بكتابتِهَا بشكلٍ صحيحٍ فلِمَ الخطأُ؟

والجوابُ هوَ أنكَ لو لاحظتَ أثناءَ كتابتِنا للَّتطبيقِ الأوَّلِ، أنَّي قمتُ بالتَّنويهِ على ضرورةِ كتابةِ الكلمةِ بحرفٍ كبيرٍ في بدايتِها، ولحلِّ هذهِ المشكلَةِ يجبُ تغييرُ كلمةِconsole  إلى Console ،

أعلمُ أنَّكَ ستجدُ صعوبةً في تقبُّلِ هذهِ النقطةِ بالتحديدِ، لأنَّنا لمْ نتعودْ على هذهِ الدقةِ في كتاباتِنَا أو في حياتِنَا العمليةِ، ولكنْ عندَ التَّعاملِ معَ الحاسوبِ يجبُ عليكَ أنْ تكونَ بتلكَ الدِّقةِ، وستتعودُ على هذا الأمرِ خلالَ ممارستكَ للبرمجةِ أكثرَ فأكثرَ.

ومنَ المثالِ السابقِ تعلمنا القاعدةَ الرابعةَ منْ قواعدِ لُغةِ الـ #C ، ألا وهيَ أنَّ هذهِ اللغةَ حساسةٌ لصيغةِ أحرفِ الكلمةِ Case Sensitive  ، بمعنَى أنَّ الحرفَ الصغيرَ small letter c، والحرفَ الكبيرَ capital letter C، تعنِي أنَّكَ تقومُ بكتابةِ كلمتينِ مختلفتينِ كُلياً.

الخطأ الخامس :

وفي مثالِنَا الأخيرِ ، ستجدُ أنَّ المشكلةَ مشابهةٌ تماماً للمثالِ السابقِ، حيثُ أنَّنا لمْ نراعِ الحروفَ الكبيرةَ في الكلمتينِread key، والجميلُ في الأمرِ أنَّهُ إنْ لمْ تكنْ بتلكَ الدِّقةِ، أو لمْ تكنْ قادراً على حفظِ هذهِ الكلماتِ بشكلٍ صحيحٍ، فإنَّ برنامجَ الـ Visual Studio سيساعدُكَ في ذلكَ، ليسَ في اقتراحِ إكمالِ الكلمةِ فحسب، بلْ بكتابتِها بشكلٍ صحيحٍ أيضاً، فلو قمتَ بكتابةِ الكلمةِ readkey بأحرفٍ صغيرةٍ، ستلاحظُ أنَّ البرنامجَ وبمجردِ فتحِ الأقواسِ قامَ بإصلاحِها تلقائياً، بالتالي قامَ بتقليلِ الأخطاءِ الَّتي قدْ تقعُ فيها مُستقبلاً، ولعلَّهُ يتبادرُ إلى ذهنكَ الآنَ، أنَّهُ إنْ كانَ البرنامجُ يقومُ بالإصلاحِ تلقائياً، فلِمَ تقومُ بالتركيزِ على ضرورةِ الانتباهِ إلى صيغةِ أحرفِ الكلماتِ؟

والحقيقةُ أنَّي أريدُ تثبيتَ هذهِ القاعدةِ، لأنَّكَ إنِ اضطررتَ لاستخدامِ محررٍ للنصوصِ غيرَ برنامج الـVisual Studio ، ولمْ يكنْ بهِ خاصيةُ إصلاحِ الأخطاءِ أوتوماتيكياً، أنْ تكونَ قادراً على تذكُّرِ صيغةِ الكلماتِ المحجوزةِ.

فوائد معرفة قواعد الكتابة :

لو قمتَ بكتابةِ تطبيقِنَا الأوَّلِ بشكلٍ صحيحٍ، فلقدْ اجتزتَ أوَّلَ وأهمَّ مرحلةٍ لبناءِ وتطويرِ التَّطبيقاتِ. أمَّا إنْ واجهتكَ مشكلةٌ ولمْ تستطعْ حلَّهَا، فقمْ بمقارنَةِ ما قمتُ بكتابتهِ حرفاً حرفاً، وخذْ وقتكَ الكافِي حتَّى تكتشفَ طريقةَ حلِّهَا، لأنَّهُ معَ مرورِ الوقتِ ستقفزُ عينُكَ مباشرةً إلى مكانِ الخطأِ، وستكونُ قادراً على التَّنبؤِ بطريقةِ حلِّها بشكلٍ سريعٍ. أيضاً سأقومُ بإرفاقِ التَّطبيقِ الَّذي كتبناهُ معاً، لتتمكنَ منْ مقارنتهِ بما قمتَ أنتَ بكتابتهِ.

أراك في الدرس التالي إن شاء الله.

مصطلحات الدرس :

Error List : قائمة تحتوي جميع الأخطاء الحالية في التطبيق المفتوح
Code Blocks : قطعة برمجية تبدأ بقوس وتنتهي بقوس آخر وأحياناً يكون لها إسم في أولها
Semicolon : فاصلة منقوطة
Console : شاشة سوداء تطبع أسطر ممالية وتتميز بسهولتها وقوتها
Case  Sensitive : أي أن حالة الأحرف تختلف فالكلمة go تختلف تماماً عن الكلمة Go وعن gO
IntelliSense : ميزة ذكية تقدم لك إقتراحات وتصويبات للوضع الحالي 

post

#3 تنصيب Visual Studio – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : BFV

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  تنصيب الـ Visual Studio

روابط البرنامج :
رابط موقع الـ Visual Studio
رابط نسخة الـ Community لنظام الويندوز
لتحميل آخر نسخة الرجاء التوجه للصفحة الرئيسية هنا ، أو يمكنك الحصول على نسخة أقدم في حال لم تكن تمتلك آخر نسخة ويندوز  هنا 
رابط نسخة الـ Visual Studio لنظام الماك
رابط نسخة الـ Visual Studio Code لكافة الأنظمة
رابط الـ MonoDevelop البديل للفيجوال ستوديو لكافة الأنظمة
رابط موقع Fiddle محاكي أونلاين ، يمكن تشغيله على كافة الأنظمة
رابط لتطبيق Compiler محاكي على الأندرويد *لا ينصح به لأن كتابة الأسطر البرمجة من خلال الهواتف صعب ويضيع وقت

بيئةُ تطويرٍ تكاملية :

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ مجدداً في دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب.
لكي تقوم بكتابة الأسطر البرمجية، أنت بحاجة إلى بيئة تجعلك قادراً على فعل ذلك، والبَرنامجِ الرئيسيِّ الذي سوفَ نستخدمُهُ في هذهِ السِّلسلةِ، هوَ برنامجُ الـ Visual Studio المُقدمُ منْ شركةِ Microsoft، وهذا النَّوعُ منَ البرامجِ يُطلقُ عليهِ، بيئةُ تطويرٍ تكامليَّةٍ (IDE)، المُشتقُ منَ المُصطلحِ integrated development environment، منَ الأفضلِ اصطلاحاً أنْ نُطلقَ على الـ Visual Studio اسمَ: بيئةُ تَطويرٍ تكامُلية، ولكنْ منْ بابِ الاختصارِ والمجاز، سَنُطلِقُ عليهِ اسمَ برنامج. ويمكنُ تعريفُ الـ IDE بشكلٍ مُبسطٍ على أنَّهُ، تطبيقٌ برمجيٌ يُقدمُ حُلولاً مُتكاملةً تُسهلُ عَملَ المطورينَ.

أقسام ال IDE :

ويتكونُ غالباً منْ أقسامٍ رئيسيَّةٍ أهمها:

1 – محرِرٌ للنُّصوص: (Code Editor)

وهو المكانُ المُخصصُ لكتابةِ الأسطرِ البَرمجيَّةِ، ويمتلكُ العديدَ منَ الميزاتِ أهمها، خاصية الـ IntelliSense، التي تقوم بإظهار نافذة تقترح عليك الأوامر المطابقة لما تكتب، وتقوم أيضاً بتصحيح الكلمات إن نسيت حرفاً، وتقوم بإعطائك معلومات عن الأمر الذي قمت بكتابته.

2 – المُصَحِّحُ: (Debugger)

ويقومُ بترجمةِ التطبيق ليساعِدَكَ على إيجادِ الأخطاء، لتتمكن من إصلاحها قبل الانتقالِ إلى المرحلة النهائية،

3 – أدواتٍ مُساندةٍ: تُسهِّلُ بناءَ واجهاتِ التَّطبيقِ GUI،

أيضاً لديهِ القدرةُ على تشغيلِ أدواتٍ خارجيةٍ Plug-ins، تزيدُ من فعاليتهِ على كافةِ الصُعُد.

يدعم الفيجوال بيسك لغات برمجة عديدة :

C, C++, VB.NET, C#, F# ، Python, Ruby, Node.js, M ، XML/XSLT, HTML/XHTML, JavaScript, CSS

الحصول على البرنامج :

ولكي نحصلَ على البَرنامجِ سنقومُ بتصفُّحِ موقعِ visualstudio.com، حيثُ أنَّنا سنجدُ زرُ الحُصولِ على النُّسخةِ المجانيَّةِ منَ البرنامجِ. وبعدَ الضغطِ عليهِ سَتلاحظُ أنَّ هنالِكَ ثلاثةُ أنواعٍ رئيسيةٍ قدْ يَختلفُ عددُها مُستقبلاً،

فالنوعُ الأوَّلُ هو نسخةُ Visual Studio Community، وهي التي سَنستخدمها في هذهِ السِّلسلة، وتحتوي على كل الميزات التي تساعدك في إنجاز تطبيقك.

أما النسخةُ Visual Studio Team services، فهي نسخةٌ مُتقدمةٌ لإدارةِ المشاريعِ الكبيرةِ. وبواسطتها يمكنُكَ تنظيمُ مشروعٍ كبيرٍ وإدارتهِ بشكلٍ دقيقٍ ومُفصّلٍ، حيثُ تُجَزِّءِ المشروع إلى مهام صغيرة، وتُسندها إلى فريقِكَ ليتم برمجتها ثم تجميعها لاحقاً.

أمَا الـVisual Studio Code، فهو نُسخةٌ خفيفةٌ جداً منْ الـ Visual Studio، وهو يعتمد على نظام الإضافات، فمثلاً لجعله يقوم بمعالجة أسطر لغة السي شارب، أنت بحاجة لإضافة extension من داخل البرنامج، بحيث يقوم البرنامج بتنزيل ما يحتاجه فقط، وهو متميز جداً وستعتمده مستقبلاً، لكن لا ينصح به في هذه السلسلة، لأنه متقدم ويفتقر للواجهة الرسومية المبسطة، ومنْ أهمِّ ميِّزات هذه النسخة، أنَّهُ يمكنكَ تشغيلها ليسَ فقطْ على نظامِ الـ Windows، بلْ أنظمةٍ أُخرى مثل نظام الـ Mac.

النسخة المعتمدة في هذه السلسلة :

ننوه هنا أننا سنعتمد نظام Windows لهذه السلسلة أيضاً، ففي حال امتلاكك لنظام Mac يمكنك زيارة الرابط أسفل الفيديو، أو في حال استخدامك لنظام آخر يمكنك اختيار برنامج آخر، كما ويمكنك تتبع الدروس من الهاتف المحمول، بتطبيق الدروس أونلاين على الموقع أسفل الفيديو، لكن يفضل التطبيق المباشر على نسخة Community، وننوه أيضاً أنني سأقوم باستخدام نسخة 2017، فإن كان جهازك لا يدعم هذه النسخة، يمكنك تحميل إصدار أقدم مثل 2015 أو 2012.

تنصيب البرنامج :

بعد تحميل نسخة Community، ستقومُ شاشة التنصيب بإظهارِ مجموعات Workloads، تم تجميعها مسبقاً من شركة Microsoft، تسألك عن المنصة المستهدفة التي تود تطويرها، حيث ستجد 3 أقسام رئيسية وهي:

Windows و Web & Cloud و Mobile & gaming.

وبما أننا في هذه السلسلة سنهتم بأساسيات البرمجة، فسنقوم بالتعامل مع تطبيقات الـ Console، لذلك سنقوم باختيار .Net Desktop Development فقط، ثم تقوم بتنصيبها، وبعدَ الانتهاءِ منْ تنصيبِ البَرنامجِ، ستكون جاهزاً لكتابةِ الأسطُرِ البرمجيَّةِ. أراكَ في الدرسِ التالي إنْ شاءَ الله.

مصطلحات الدرس :

IDE : بيئة تطوير تكاملية وهو إختصار لـ Integrated Development Environment ويتيح لك الحصول على ميزات تساعدك في التطوير
Code Editor : محرر للنصوص، تستطيع بواسطته كتابة الأسطر النصية ( الأسطر البرمجية في حالنا هنا )
IntelliSense : ميزة ذكية تعطيك مساعدات وملاحظات حول ما تقوم بكتابته
Debugger : المصحح ويقوم بإستكشاف الأخطاء
Tools : أدوات مساعدة
GUI : الواجهات الرسومية وهي إختصار لمصطلح Graphic User Interface
Plug-ins : تطبيقات وبرامج مساعدة يتم إضافتها للبرنامج لتعطي إمكانيات أكثر
Visual Studio Community : نسخة البرنامج المجانية التي تستطيع تطوير التطبيقات بها
Visual Studio Team services : نسخة البرنامج التي تستطيع تطوير التطبيقات بها، وهي متقدمة حيث يمكنك العمل مع فريق عن بعد بإعطاء وظائف مجزئة
Visual Studio Code : نسخة البرنامج المجانية التي تستطيع تطوير التطبيقات بها، وهي قليلة الحجم وقوية ولكنها تعتمد على الإضافات plugins
extension : إضافات إلى البرامج تزيد من إمكانيته، وهو مصطلح مشابه لـ Plug-ins
Workloads : مجموعات تم تحضيرها مسبقاً متواجدة داخل إعدادات تنصيب برنامج Visual Studio مناسبة لتحديد الفئة المستهدفة للتطوير، سواء للويندوز أو للموبايل أو للويب
Windows : تطبيقات النوافذ لنظام Windows
Web and Cloud : نطبيقات صفحات الإنترنت وما يتعلق بها
Mobile and Gaming : تطبيقات للهواتف الذكية وتطوير الألعاب
Console : شاشة سوداء تقوم بطباعة أسطر متتالية
Net Desktop Development : الفئة المطلوبة لتطوير التطبيقات للنوافذ