post

#10 الجملة الشرطية IF – البرمجة بواسطة #C

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

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

الجملة الشرطية if statement:

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ العاشر من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، سنتعرفُ على الجمل الشرطية والتي تعد أهم ركائز البرمجة، وهي ما ستطلق العنان لمخيلتك لكتابة العديد من التطبيقات الحقيقية، فستتعلم كيف تبني منطق logic تكون مخرجاته مختلفة بناءً على قيمةٍ معينة، ويمكن أن تكون هذه القيمة من مدخلات المستخدم بواسطة لوحة المفاتيح، أو قيمة قمنا بمعالجتها بناءً على متغيرات سابقة، وعندما أقول منطق logic، أعني أننا سنقوم بمقارنة شرط معين، وبناءً عليه سنتخذ إجراءات معينة، من خلال تنفيذ قطعة برمجية Code Block مختلفة باختلاف النتيجة.

تطبيق لعبة التخمين:

لإنشاء مشروع جديد، سأقوم بتكرار ما قمنا به في الدروس السابقة، سأذهب إلى قائمة File — > New — > Project، ومن شاشة New Project سأحرص على اختيار Visual C#، ثم اختيار Console Application، سأقوم بعدها بإعادة تسمية هذا المشروع إلى Decisions، ومن ثم نضغط على زر OK، ليبدأ برنامج الـ Visual Studio بتهيئة مشروع جديد، سأقوم بكتابة لعبة بسيطة، وسأبدأ بالكتابة داخل قوسي Static void Main في السطر رقم 13، يمكنك إيقاف الفيديو بعدما أقوم بإنهائه، لتتمكن من متابعتي:

	public static void Main()
	{
		    Console.WriteLine("**Osama's Big Givaway**");
            Console.Write("Choose 1,2 or 3 : ");
            string userValue = Console.ReadLine();

            if (userValue == "1")
            {
                string message = "Wow!! You won a new car";
                Console.WriteLine(message);
            }

            Console.ReadLine();
	}

لا ننسى أن نقوم بحفظ التطبيق، أو يمكننا تجاوز ذلك بتنفيذ التطبيق. لو قمنا بتنفيذ التطبيق، سنجد جوائز قيمة من العم أسامة، ويطلب التطبيق من المستخدم إدخال إحدى الأرقام التالية: 1 أو 2 أو 3، فلو قمتُ بإدخال القيمة 1 والضغط على زر Enter، ستجد رسالة “واو لقد رَبِحْتَ سيارة جديدة”، لا تخف من نفاذ الكمية ستحصل على السيارة الخاصة بك. ثم سأضغط على زر Enter لينتهي التطبيق، سأقومُ بتنفيذه مرةً أخرى فأنا أود الحصول على جوائز كبيرة أخرى، سأدخل الرقم 2، ستجدُ أنه لم يحصل شيء، ولو قمنا بتنفيذه مرة أخيرة وأدخلنا رقم 3 أو أي شيء آخر، ستجد أنه أيضاً لم يطبع أي شيء.

جملةُ اتخاذِ قرار Decision Statement :

دعنا الآن نشرح التطبيق ونتكلم عن الجملة الشرطية if Statement، التي قمت بكتابتها في الأسطر 17 إلى 21، والتي هي هدفنا الأساسي من هذا الدرس، فالجملة الشرطية if Statement، تسمى جملةُ اتخاذِ قرار Decision Statement، لأننا سنتخذ قرار بواسطتها لتنفيذَ أسطرٍ برمجيةٍ داخل الأقواس التالية، بناءً على نتيجة الشرط الموجود بين الأقواس هنا، ففي هذا المثال سيقوم التطبيق بالتحقق من القيمة التي سيدخلها المستخدم، بواسطة الدالة ReadLine التي تعرفنا عليها في الدروس السابقة، ومن ثم إسناد القيمة إلى المتغير userValue من النوع string، وبناءً على القيمة سيقوم التطبيق بعمل مقارنة مع النص “1”، بشكل بسيط هذه الجملة تعني: هل قيمة المتغير userValue تطابق القيمة “1”؟

ستلاحظ أيضاً أنني استخدمت علامتي مساواة، وليس علامة واحدة، ففي الدروس السابقة تعرفنا أن إشارة المساواة المفردة =، هي إشارة إسناد Assignment Operator،  فنحن نقوم بإسناد قيمة ما قام المستخدم بإدخاله، إلى المتغير userValue باستخدام إشارة المساواة. لكننا عندما نقوم باستخدام إشارتي مساواة متتاليتين، فإننا نقوم بعمل مقارنة تطابق بين القيمتين، فإن كانتا متطابقتين ستكون النتيجة صحيحة True، وإن لم تتطابقا فستكون النتيجة خاطئة False. وفي حالة المطابقة، أي أن النتيجة كانت صحيحة True، سيقوم التطبيق بتنفيذ القطعة البرمجية الـ Code Block، التي تتبع الجملة الشرطية مباشرةً، أما إن لم تتطابق القيم وكانت النتيجة خاطئة False، فإن التطبيق سيقوم بتجاهل القطعة البرمجية التي تتبع الجملة if statement، وسيقوم بمتابعة تنفيذ الأسطر بعد أن يتخطاها.

الجملة الشرطية else if :

ستجد أن لعبتنا ناقصة، فلا يوجد جوائز لمن قام بإدخال رقم 2 أو رقم 3، أيضاً ماذا إن قام المستخدم بإدخال قيمة 4 مثلاً أو أي قيمة أخرى؟ نحن بحاجة لضبط كافة الاحتمالات التي سيقوم المستخدم بإدخالها، لذلك دعني أكمل كتابة الأسطر البرمجية، من خلال كتابة else if  أسفل القطعة البرمجية الخاصة بجملة if الأولى، وسأقوم بكتابة ذلك كالتالي:

	public static void Main()
	{
		Console.WriteLine("**Osama's Big Givaway**");
        Console.Write("Choose 1,2 or 3 : ");
        string userValue = Console.ReadLine();

        if (userValue == "1")
        {
			string message = "Wow!! You won a new car";
            Console.WriteLine(message);
        }
		else if (userValue == "2")
        {
			string message = "Wow!! You won a new boat";
            Console.WriteLine(message);
        }
		else if (userValue == "3")
        {
			string message = "Wow!! You won a soup";
            Console.WriteLine(message);
        }

        Console.ReadLine();
	}

كما ترى أنه يمكن إستخدام جملة else if في حال أردنا مقارنة قيم أخرى، ففي تطبيقي هنا قمت باستخدام اثنتين منهما، فإن لم يتحقق الشرط الأول،  سيقوم التطبيق بالانتقال إلى الشرط الثاني، وإن لم يتحقق الشرط الثاني، سينتقل إلى الشرط الثالث وهكذا، بحسب عدد جمل else if التي قمتَ بكتابتها، لكن إن تحقق الشرط الأول، فلن يقوم بالتحقق من الشروط اللاحقة، وسيقوم بتنفيذ الأسطر من 18 إلى 21 ومن ثم الانتقال إلى السطر 33 مباشرة، بالمثل إن كان ناتج المقارنة في الجملة الشرطية الأولى في سطر 17 False، سينتقل للتحقق من الشرط الثاني في السطر 22 فإن تحقق الشرط، سيقوم بتنفيذ الأسطر من 23 إلى 26، ثم سيقوم بالانتقال مباشرة إلى السطر 32 وهكذا. دعنا الآن نقوم بتنفيذ التطبيق مرة أخرى لنرى ماذا سنحصل إن أدخلنا الرقم 2، والرقم 3.

أما في حال قمتُ بإدخال رقم 4 أو أي شيء آخر، ستجد أن التطبيق لا يطبع شيء، وهنا يأتي دور الجملة الشرطية else statement، حيث أن التطبيق سينفذها في حال عدم تحقق أي شرط قمنا بكتابته سابقاً، وهي ما نطلق عليه اسم Catch all case.

الجملة الشرطية else :

ولفعل ذلك سأقوم بكتابة جملة else statement، بعد كل الجمل الشرطية التي قمنا بكتابتها، أي في السطر رقم 32 سأقوم بكتابة:

	public static void Main()
	{
		Console.WriteLine("**Osama's Big Givaway**");
        Console.Write("Choose 1,2 or 3 : ");
        string userValue = Console.ReadLine();

        if (userValue == "1")
        {
			string message = "Wow!! You won a new car";
            Console.WriteLine(message);
        }
		else if (userValue == "2")
        {
			string message = "Wow!! You won a new boat";
            Console.WriteLine(message);
        }
		else if (userValue == "3")
        {
			string message = "Wow!! You won a soup";
            Console.WriteLine(message);
        }
		else
		{
			string message = "wrong choice";
            Console.WriteLine(message);			
		}

        Console.ReadLine();
	}

لو قمنا الآن بتنفيذ التطبيق، وأدخلنا أي قيمة خارج الاحتمالات الثلاث السابقة، وضغطنا على زر Enter، سنجد الرسالة التي قمنا بكتابتها في أقواس جملة else statement، الشكل الذي قمنا بكتابته هو شكل الجملة الشرطية if statement، حيث يجب وجود جملة if في بدايتها، وأنت مخير بعدها في إضافة أي عدد تريده من جمل else if، وأيضاً لك كامل الحرية بإضافة الـ else statement، التي اتفقنا أنه يتم تنفيذها في حال لم يتحقق أي شرط قبلها.

أكثر إنتاجية more Efficient :

بعد الانتهاء من شرح الجملة الشرطية if statement، ستجد أني قمت بكتابة العديد من الأسطر المكررة، وقمت بكتابتها بشكل مقصود، لنتعلم معاً كيف يمكنك أن تكون مطوراً أكثر فاعلية more Efficient، في كتابة أسطرك البرمجية، فهناك العديد من الأسطر التي يمكنك تعديلها بل الاستغناء عنها نهائياً،  فأكثر جملة قمتُ بتكرارها هي جملة الطباعة:  Console.WriteLine

حيث أني قمت بتكرارها في الأسطر: 20 و25 و30 و35، ولأنها موجودة في كل الشروط، سيتم تنفيذها على كل الأحوال، بالتالي يمكنني وضعها بعد كل الجمل الشرطية مرة واحدة فقط، سأقوم بوضعها في السطر رقم 38 وحذف كل التكرارات السابقة، لكن بعد فعل ذلك ستجد أن هناك خط أحمر متعرج، ظهر تحت المتغير message في السطر 35، وهو دليل على وجود خطأ في هذا المتغير، ولو قمنا بوضع مؤشر الفأرة عليه، سنحصل على رسالة مفادها أن هذا المتغير غير معرف في النطاق الحالي، سنتحدث عن النطاقات scope في دروس مقبلة إن شاء الله، لكن لتوضيح الخطأ بشكل مبسط، يجب أن تعرف أنه عند حجز متغير داخل قطعة برمجية، لن يكون متاح خارج هذه القطعة، بمعنى آخر أنك لو قمت بحجز متغير داخل قطعة برمجية، تبدأ بقوس وتنتهي بآخر لن يكون هذا المتغير متاح خارج هذه الأقواس، ولحل هذه المشكلة يتوجب علينا تعريف هذا المتغير خارج القطعة البرمجية الحالية، بالتالي سيكون متاح لكل القطع البرمجية الداخلية، لذلك قبل بداية الجمل الشرطية سأقوم بحجز المتغير message، وإسناد قيمة أولية فارغة له،

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

	public static void Main()
	{
		Console.WriteLine("**Osama's Big Givaway**");
        Console.Write("Choose 1,2 or 3 : ");
        string userValue = Console.ReadLine();

		string message;
        if (userValue == "1")
			message = "Wow!! You won a new car";
		else if (userValue == "2")
			message = "Wow!! You won a new boat";
		else if (userValue == "3")
			message = "Wow!! You won a soup";
		else
		{
			message = "wrong choice";	
			message = message + ", You Lose!!";
		}
		
		Console.WriteLine(message);	
        Console.ReadLine();
	}

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

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

الجملة الشرطية المختصرة conditional operator :

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

	public static void Main()
	{
		/*
		Console.WriteLine("**Osama's Big Givaway**");
        Console.Write("Choose 1,2 or 3 : ");
        string userValue = Console.ReadLine();

		string message;
        if (userValue == "1")
			message = "Wow!! You won a new car";
		else if (userValue == "2")
			message = "Wow!! You won a new boat";
		else if (userValue == "3")
			message = "Wow!! You won a soup";
		else
		{
			message = "wrong choice";	
			message = message + ", You Lose!!";
		}
		
		Console.WriteLine(message);	
		*/
		
		Console.WriteLine("**Osama's Big Givaway**");
        Console.Write("Choose 1,2 or 3 : ");
        string userValue = Console.ReadLine();
		
		string message = (userValue == "1") ? "car" : "nothing";
        Console.Write("you won ");
        Console.Write(message);
        Console.Write(".");
		
        Console.ReadLine();
	}

في السطر رقم 40، قمت بحجز متغير وإسناد قيمة له بناء على قيمة userValue، فبعد إشارة المساواة الـ Assignment operator، وضعت مقارنة داخل القوسين بواسطة إشارة المساواة مرتين، حيث سيكون ناتج المقارنة إما صحيح true أو خاطئ false، بعدها بواسطة إشارة السؤال التي تسمى conditional operator، وضعت قيمتين، حيث سيتم إسناد القيمة الأولى إن كان ناتج المقارنة true، أو سيتم إسناد القيمة الثانية إن كان ناتج المقارنة خاطئ false، دعنا ننفذ التطبيق وندخل 1، ستجد أني ربحت سيارة، وإن نفذناه مرة أخرى وأدخلت أي شيء آخر سأربح لا شيء. وهذا هو الشكل المختصر للجملة الشرطية، لكني لا أحبذ استخدامه لأنه مبهم قليلاً، ولأن الجملة if statement أقرب لفهم الإنسان منها، ولكن وجب علي تبيانها لك في حال شاهدتها لاحقاً في أي تطبيق آخر.

الإستبدال بواسطة الـ Replacement code :

الآن في الأسطر 41 و 42 و 43، ستلاحظ أني قمت بطباعة نصوص باستخدام Write method، لتبقى على نفس السطر، وتعمدت فصلها في 3 جمل لأنني سأعلمك طريقة، ستسهل عليك عملية ربط النصوص في حال كان هناك متغير في وسطها، فلا داعي لأن تقوم بربط 3 نصوص باستخدام إشارة الربط + مرتين، فيمكنك إستخدام الـ Replacement code ، حيث سيتم استبدال الرقم صفر مع القوسين بالقيمة التي تتبع الفاصلة، ولو قمت بتنفيذ التطبيق ستجد نفس القيمة المتوقعة. بإمكانك أيضاً طباعة قيمتين، فلو قمت بالتنفيذ، ستجد أنه قام باستبدال {0} بقيمة المتغير userValuse، وبالمثل قام باستبدال {1} بقيمة المتغير message، كما يمكنك إضافة العدد الذي تريد من الـ Replacement code.

لعلك تسأل الآن: لماذا بدأنا بالرقم صفر بين الأقواس؟ أليس الأصح أن نبدأ من الرقم واحد؟ الحقيقة أن لغة السي شارب تبدأ العد من الرقم 0، وتستخدم ذلك في كثير من الأمور كما سنتعلم في دروس متقدمة إن شاء الله، لذلك يطلق على لغة الـ C# اسم Zero based Language، أي أن نقطة العد فيها يبدأ من 0 وليس 1.

تهنئة وطلب :

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

مهمة لك :

في الختام، سأطلب منك كتابة تطبيق يسأل المستخدم عن فئة عمره، حيث ستجعلهُ يختار من 4 فئات ( يعني يدخل “1” أو “2” أو “3” أو “4” ):
الفئة الأولى: إن كان عمره 15 سنة أو أقل،
الفئة الثانية: إن كان عمره بين 16 و 25،
الفئة الثالثة: إن كان عمره بين 26 و 40،
والفئة الأخيرة: إن كان عمره 41 أو أكثر،
وبناءً على فئته ستقدم له نصيحة مناسبة له، فمثلاً لو كان عمره أقل من 15 سنة وأدخل الرقم “1” ستنصحه بالإكثار من تناول الشوربة اللذيذة وهكذا. قم بإرفاق النتيجة على حسابك الشخصي مع عمل Mention لحسابي الشخصي وإرفاق #طورني. نصل إلى نهاية هذا الدرس، ألقاك في الدرس التالي إن شاء الله.

 

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

if Statement : الجملة الشرطية التي تنفذ أسطر معينة إذا تحقق الشرط
Conditional Operator : شكل مختصر جداً للجملة الشرطية والمعامل يكون علامة ( ؟ ) بدلاً من كلمة if
 Logic : جملة منطقية بمعنى الناتج إما ( صحيح ) أو ( خاطئ)
Decision Statement : جملة قرار تنفذ شء إذا كان الشرط صحيح
Code block : قطعة برمجية تبدأ بقوس وتنتهي بقوس آخر، وفي بعض الأحيان يكون لها إسم
static void Main : الدالة الرئيسية التي يقوم التطبيق بالبدء منها
Assignment Operator : عامل المساواة وال1ي يقوم بعملية إسناد القيمة على اليسار إلى القيمة التي على اليمين
True : شرط صحيح
False : شرط خاطئ
evaluation : تقييم ومحاولة مساواة
else if: جملة تأتي بعد جملة if لتضع شرط ثاني في حال لم يتحقق الشرط الأول
else : الجملة التي يتم تنفيذها إذا لم يتحقق كل الشروط التي قبلها
catch all cases : وهي جملة else
 Efficient : طريقة نموذجية
Replacement Code : طريقة لإضافة متغير داخل نص بدلاً من إضافة رمز الوصل +

post

#7 ملفاتُ المشروعِ Project Files – البرمجة بواسطة #C

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

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

 >>>تحميل مشروع الدرس<<<

هيكلية المشروع

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ السابعِ من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، في هذا الدرسْ سنتكلمُ عن كيفيةِ تنظيمِ ملفاتِ العمل، وكيفَ أنَّ البرنامجَ يقومُ بتنظيمها، تحتَ مشروعْ Project وتحتَ Solution، وسنتعرفُ أيضاً على كيفيةِ إيجادها على الـ Hard Disk Drive، وسنشاهدُ لمحةً عن محتوياتِ هذهِ الإعدادات. فعندما نقومُ بإنشاءِ مشروعٍ جديد، يقومُ برنامجُ الـ Visual studio تلقائياً بتهيئةِ المشروع، حيثُ يقومُ بإنشاءِ جميعِ الإعداداتِ والملفاتِ والمصادرِ المهمة، الخاصةِ بالنوعِ الذي اخترناه، فإعداداتِ مَشروعِ الـ Web Development، تختلفُ عنْ إعداداتِ مشروعِ الـ Console، وهكذا.

 

نافذة Solution Explorer

حيثُ أنَّ أهمَّ ملفٍ في مشروعنا الأولِ هو ملفُ Program.cs، الذي نراهُ في وَسطِ الشاشة، فإذا نَظرتَ إلى القِسمِ الأيمنِ مِنَ الشاشة، ستجدُ قائمةَ Solution Explorer، تحتوي على كافةِ عناصرِ المشروعِ، وهذهِ القائمةُ تعتبرُ أهمَّ نَافذةٍ بعدَ مُحررِ النصوص، وستلاحظُ أنَّ هناكَ ملفاً يحمل الاسم Program.cs، وهوَ الملفُ الذي قمنا بكتابةِ أسطُرِنا الأولى عليه، حيثُ إنْ قمتَ بإغلاقِ شاشةِ الملفِ الموجودِ في وسطِ الشاشة، يمكننا فتحهُ منْ جديدٍ بالضغطِ على اسمهِ في قائمةِ المشروع. وستلاحظُ أنَّ الـ Solution الخاصَّ بنا، يحتوي على Project واحدٍ فقط، واسمُهُ HelloWorld وأنهُ مِنَ النوعِ #C، وبإمكانكَ إضافةُ عِدةِ مشاريعٍ تَحتَ Solution واحد، فالـ Solution هُوَ الحاويةُ لجميعِ المشاريعِ المترابطةِ ببعضها، وهوَ أكبرُ مِنَ المشروعِ Project، فإن قمنا مثلاً بالضغط على اسمِ الـ Solution بالزرِّ الأيمن، واخترنا Add –> New Project، سنتمكنُ مِنْ إضافةِ مشروعٍ جديد، مع إمكانيةِ تغييرِ نوعِ المشروعِ الجديدِ بلْ حتى تغييرَ لُغةِ بَرمجته.

 

مجلد ملفات المشروع

بَعدَ التعرُفِ على نافذةِ الـ Solution Explorer، لعلكَ تتساءلُ حولَ مكانِ ملفاتِ هذا المشروعِ على الـHDD ، ولمعرفةِ ذلكَ يجبُ عليكَ تَذكُرُ مَسارِ المشروع، وهُوَ المكانُ الذي قمنا باختيارِهِ عِندَ إنشاءِ المشروع، حَيثُ لو تَذكرْ أننا قُمنا في مَشروعنا الأول، باختيارِ إنشاءِ مُجلدِ المشروعِ في المسارِ الافتراضيِّ للبرنامج، ألا وهوَ مُجلدُ My Document الموجودُ في جهازنا، ولو قُمنا بالذهابِ هناك،  ستجدُ مجلداً باسمِ البرنامجِ مَعَ رَقمِ إصداره، كما هو ظاهِرٌ عنديْ هنا: Visual Studio 2017 ، إن قمتَ بفتحهِ ستجدُ مجلداتٍ كثيرة، سنختارُ مُجلدَ Projects منها، لنَجِدَ مُجلدَ المشروعِ الخاصِ بنا،

وتَجدُرُ الإشارةُ هنا إلى أنهُ مِنَ الأفضل، أنْ تَقومَ بإنشاءِ مُجلدٍ خاصٍ يحتوي على كلِّ مشاريعك، حيثُ تَقومُ بفرزِ مَشاريعِكَ المستقبليةِ حَسبَ نوعها، والأفضلُ أنْ تضعُهُ في Drive غير الـ OS Drive، لضمانِ سلامتهِ في حالِ حُدوثِ أيِّ خَلَلٍ في نظامِ التشغيلِ الذي تمتلكه. أما الآنْ ولهدفِ الدراسةِ والتعلم، فلا بأسَ في وضعِ المشاريعِ في المكانِ الافتراضيِّ للبرنامج، وأيضاً سيكونُ المكانُ الذي ستقومُ بنقلِ المشاريعِ التي قمتُ بكتابتها، لتقارِنَها بتطبيقكَ في حالِ حدوثِ أيِّ مشكلةٍ عندك، حيثُ كما ذكرتُ في بدايةِ السلسلة، أني سأقومُ بإرفاقِ ملفاتِ العملِ مَعَ النسخةِ النصيةِ للدرس، ولكيْ تقومَ بفتحِ الملفِ يُمكننا أخذَ المثالِ التالي،  فبعدَ تَحميلِ الملفِ قُمْ بفكِ ضغطه،  وقمُ بوضعِ المجلدِ الناتجِ بجانبِ المشاريعِ الأخرى، وقم بالرجوعِ إلى البرنامج، ومنْ قائمةِ File –> Open –> Project/Solution، قُم باختيارِ المشروعِ المستهدف، وتأكدْ مِن فتحِ الملفْ .sln الخاصِ به، وسيظهرُ لكَ المشروعُ بملفاتهِ الرئيسية.

 

محتوى ملف المشروع

بالعودةِ إلى مُجلدِ المشاريع، ستجد مجلد HelloWorld ، الخاص بالـ Solution الذي قمنا بكتابتِه في تطبيقِنا الأول، بالدخولِ إليه ستجدُ ملفَ HelloWorld.sln وهو ملفُ المشروعِ الكامل، إن قمتَ بفتحِه بأيِ محررِ نصوص، مثلَ الـ Notepad ++،  ستجدُ أنهُ يحتوي على معلوماتٍ خاصةٍ بهيكليةِ المشروع، بالطبعِ لن نقومَ بتعديلِ أيِ شيءٍ هنا، لكن من بابِ الإحاطةِ بالشيء، أحببتُ أنْ أريكَ محتوياتِ هذا الملف، وبالمثلِ أيضاً إن قمتَ بالدخولِ إلى مجلدِ المشروعِ Project، سنجد ملفَ HelloWorld.csproj، وهو الملفُ الذي يحتوي على كافةِ إعداداتِ المشروعِ أيضاً، قم بفتحِه وستجدُ العديدَ من المعلومات، لن نقومَ بتعديلِ أيِ شيءٍ، ولكن من بابِ الإحاطةِ بالشيءِ أيضاً.

 

مخرجات المشروع

وأخيراً ستجدُ مجلداً يحملُ الاسمَ Bin، اختصاراً لكلمةِ Binary، وستجدُ جميعَ مخرجاتِ المشروعِ هنا، لأن عمليةَ البناء Process of Compilation،  تأخذُ أسطرَك البرمجيةِ المقروءةِ للبشر، وتقوم بتحويلِها إلى صيغةٍ مفهومةٍ للحاسوب. إن قمتَ بتصفحِ المجلدِ سنجدُ أن هناك مجلداً أخراً يحملُ الاسمَ Debug، ويظهرُ هذا المجلدُ في حالِ قيامِك بتنفيذِ التطبيقِ من داخلِ البرنامج، حيث أن هناك وضعيتين للمخرجات، الأولى هي وضعيةُ اكتشافِ الأخطاءِ Debug Mode، حيث يقومُ البرنامج ُببناء ِالتطبيق، وتخصيصِه لإمكانيةِ اكتشافِ الأخطاءِ ومتابعتِها، والوضعيةُ الثانيةُ هي وضعية ُالنشرِ Release Mode، وهي النسخة ُالنهائيةُ الجاهزةُ للتصدير، سنتكلم عن الوضعيتين أكثرَ في الدروس المتقدمة.

الآن عند الدخولِ إلى مجلدِ الـ Debug، ستجدُ أن هناك ملفاً تنفيذياً اسمُه HelloWorld.exe، وهو من النوعِ exe المختصرِ من Executable File، لو قمتَ بتشغيلِه ستجدُ نفسَ مخرجاتِ ما كان يظهرُ في داخلِ البرنامج. هذا الملفُ تقريباً يمكنك نقلَه لأيِ جهازٍ آخر، مع ملاحظةِ أنه نسخةُ Debug Version، فإنْ قمتَ بنقلِ هذا الملفِ إلى جهازِ صديقك، سيعملُ غالباً منْ غيرِ مشاكل، مَعَ مراعاةِ أنَّ هذا النوعَ خاصٌ بنظامِ التشغيلِ ويندوز.

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

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

Solution : الحل البرمجي وهو أعلى وأكبر حاوية للمشروع، ويمكن أن يتكون من أكثر من Projects

Project : المشروع الذي نقوم بتطويره ويكون تحت Solution واحد فقط

Hard Disk Drive : القرص الصلب ويسمى إختصاراً HDD والذي يحتوي على جميع ملفات النظام والمشاريع

Web Development : تطوير تطبيقات الويب ممثلة بصفحات الويب ومواقعه

Console : شاشة سوداء تطبع أسطر متتالية وتتميز بسهولتها وقوة أداءها

Program.cs : هو الملف الرئيسي الذي نقوم بكتابة أسطرنا البرمجية الأولى عليه ويحتوي على الدالة الرئيسية Main

Solution Explorer : نافذة تقوم بعرض جميع مكونان الحل البرمجي، من مشاريع ومكتبات ودوال

OS Drive : قرص ال HDD الذي يحتوي على نظام التشغيل Operating System

SLN : هو إمتداد الملف Extension  الخاص بالمشروع Solution

Process of Compilation : عملية تحويل الأسطر البرمجية التي تقوم بكتابتها إلى تطبيق مخرجات ( EXE أو حسب نوع المشروع) يمكن نشره للزبائن.

Debug : عملية إستكشاف الأخطاء

Debug Mode : نظام مخرجات ومعالجة يحتوي على معلومات إضافية من هدفها إستكشاف الأخطاء وإعطاء تقارير

Release Mode : نظام مخرجات نهائي يتم إرساله للزبائن مباشرة

EXE : ملف تنفيذي Executable File يعمل على نظام Windows

Virus Total : موقع إلكتروني يمكنك رفع ملفات لإستكشاف إن كانت تحتوي على برامج خبيثة؟

 

 

 

post

#6 فهمُ التطبيقِ الأول – البرمجة بواسطة #C

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

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

لماذا قمنا بكتابةِ ذلك؟

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

في هذا الدرسِ سنقومُ بالتعرفِ أكثر، على الأسطرِ البرمجيةِ التي كتبناها في تطبِيقِنا الأول، سابقاً كنْتُ أريدُ مِنكَ التركيزَ على، ماذا كتبنا وكيفيةِ الكتابة، لكنْ الآن سنقومُ بالتركيزِ على لماذا قُمنا بكتابةِ ذلك، وبما أننا قُمنا بالتعرفِ على بعضِ قواعدِ الكتابة، ستكونُ متهيئاً لكافةِ المعلوماتِ التي سنتعلمها في هذا الدرس.

إجادة لغات البرمجة :

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

وتقدمُ لنا شَركةُ Microsoft شيئاً يدعى Dot Net Framework ، الذي يُقدمُ مَجموعةً مِنَ المكوناتِ لتسهيلِ عمليةِ التطوير، وسنقومُ بشرحِ بعضٍ مِنْ مُكوناته، بما يتناسبُ مَع مُستوى هذهِ السلسلة، فالعنصرُ الأولُ هوَ المكتباتُ البرمجية Class Library، حيثُ قامتْ الشركةُ بكتابةِ العديدِ مِنَ المكتباتِ البرمجية، التي يَحتاجُها تَطبيقنا بشكلٍ أساسي، مِثلَ التعاملِ مَعَ المعادلاتِ الرياضية، والتعامُلِ مع النصوصِ، والتعاملِ مع التاريخِ والوقتِ، وإظهارِ المعلوماتِ على الشاشة، وأمورٍ كثيرةٍ سنتعرفُ عليها مُستقبلاً، كل هذهِ المكتباتِ كانَ منَ الصعبِ علينا كتابتُها، خصوصاً أنها أساسيةٌ في كلِّ تطبيق.

والمُكونُ الثاني مِنْ مُكوناتِ الـ .Net Framework هو ، الـ Runtime والمعروفُ بـ CLR، المختصرُ مِنَ المصطلحِ Common Language Runtime، ويمكنَ تشبيهَهُ بالفقاعةِ التي تُحيطُ بتطبيقَك، حيثُ يعيشُ تطبيقُكَ داخلَ هذهِ الفقاعةِ وتقومُ بحمايته، وتتكفلُ بالعديدِ منَ التفاصيلِ ذو المستوى المتدني Low Level، لتدعكَ تركزُ بشكلٍ أساسيٍ على هدفِ التطبيق، ولا تقلقْ بشأن أمورٍ مثلِ نوعِ نظامِ التشغيلِ، أو إدارةِ الذاكرةِ المستخدمة Memory Usage، أو حتى بطريقةِ التعاملِ مع الملفاتِ في القرصِ الصلب، وفي نفسِ الوقت، يقوم الـ CLR، بتقديمِ طبقةِ حمايةٍ للزبونِ نفسه، حيثُ يَمنعكَ كمطورٍ للتطبيقاتِ بالحصولِ على معلوماتهم الخاصة، أو بالعبثِ بأجهزتهم دونَ أخذِ إذنٍ مسبقٍ منهم، حيثُ تظهرُ رسالةٌ للزبونِ تخبرُهُ أنكَ تحتاجُ هذهِ الصلاحية.

الدوال Methods :

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

 جمل الملاحظات Comment : 

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

إن حاولتَ تنفيذَ التطبيق الآن، ستجدُ أنَّ هناكَ شاشةً ظهرتْ ثم اختفتْ بسرعة، وذلكَ لأن التطبيقَ قامَ بتنفيذِ الأسطرِ على التوالي، فقامَ بطباعةِ الجملةِ ثم وصلَ إلى نهايةِ التطبيق، وخرجَ من التطبيقِ ليعودَ مرةً أخرى إلى برنامج الـ Visual Studio، أما إن تراجعنا عنْ جملةِ الملاحظة،  وقمنا بتشغيلِ التطبيق، سنرى جملةَ Hello World، وسينتظرُ البرنامجُ مِنَّا إدخالَ أيِّ حرفٍ لينتهي مِنَ التطبيق، ويَجدرُ بالذكرِ أنَّ هناكَ كلمةً مرادفةً لـ ReadKey، إلا وهي ReadLine، وتقومُ بانتظارِ مدخلاتٍ ثم زر Enter، حيثُ لو قمنا باستبدالها الآن، وقمنا بتشغيلِ التطبيق، يمكننا كتابةُ الكلماتِ التي نريد، ويجبُ أن ننهِيَها بزرِّ الإدخال Enter منْ لوحةِ المفاتيح.

القطع البرمجية Code Block :

في درسنا السابق تعرفنا بشكل بسيط، على مفهوم الـ Code Block، وتعرفنا أنها عبارةٌ عنْ قطعةٍ برمجيةٍ تبدأُ بقوسٍ وتنتهي بآخر، وفي هذا التطبيقِ هناكَ العديدُ مِنَ القطعِ البرمجية، و تحملُ القطعةُ البرمجيةُ غالباً اسماً، ففي مثالنا هنا، هذهِ القطعةُ البرمجيةُ تحملُ اسم Main، وهذهِ القطعةُ البرمجيةُ تُسمى داله Method، ومن المتعارفِ عليهِ أنَّ الـ Main Method، هيَ الدالةُ التي يَبدأُ بها التطبيقُ في كلِّ مرةٍ تَقومُ بتشغيله، ولا أريدكَ أنْ تقلقَ بشأنِ الكلماتِ الموجودةِ قبلَ كلمةِ Main، لأننا سنتكلمُ عنها لاحقاً إن شاء الله، ولو لاحظتَ معي أيضاً، أنَّ الـ Main Method موجودةٌ داخلَ قطعةٍ برمجيةٍ أخرى، اسمها Program وهي من النوع Class، وهي المكانُ الذي سيحوي كلَّ الـ Methods التي سنكتُبُها لاحقاً، ولهُ الكثيرُ من الخصائِصِ والميزاتِ التي سنتكلمُ عنها لاحقاً، وستلاحظُ أيضاً أن الـ Class موجودٌ في قطعةٍ برمجيةٍ أخرى، اسمها HelloWorld وهي مِنَ النوع namespace، وهيَ الحاويةُ لجميعِ الـ Classes الموجودةِ بداخلِ برنامجك، وستجدُ أنَّ اسمَها مُطابقٌ لاسمِ المشروعِ الذي أنشأناه سابقاً.

لو لاحظت في تطبيقنا الأول، أننا قمنا باستدعاءِ مكتبات Classes، واستخدمنا بعضَ الدوالِ Methods الموجودةِ ضِمنها، فقدْ قمنا باستدعاءِ الـ Console Class، واخترنا الـ WriteLine Method منه، فبمجردِ كتابةِ اسم الـ Class وإتباعهِ بنقطه، سترى جميعَ الـ Methods المتوفرةِ بداخله، وهذه النقطةُ Dot بعد اسم الـ Class، تَعملُ عَمَلَ فهرس الكتابِ الذي يسمحُ لكَ بمعرفةِ الوحداتِ الموجودةِ فيه، ويطلقُ عليها اسم Member Accessor، ونلاحظُ أنَّ جميعَ الدوال Methods، تبدأ بقوسٍ وتنتني بآخر، وبعضُها تحتوي على قيمٍ بداخلِ الأقواسِ كما WriteLine، تستخدمها الدالةُ في إجراءِ وظيفتها، وبعضها الأخرْ لا يحتاجُ لتلكَ القيمِ مثل ReadLine، وسنقومُ لاحقاً بالحديثِ أكثرَ عنْ هذهِ القيمِ التي تتواجدُ بينَ الأقواس، وكلْ ما عليكَ معرفتهُ الآن، هو أنَّ استدعاءَ الدالةِ يتمُّ بذكِرِ اسمها وكتابةِ أقواسها، وإعطاءِها قيماً إنْ كانتْ تَحتاجُ ذلك.

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

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

Syntax : التركيب الإصطلاحي للسطر البرمجي، أو منطق السطر البرمجي الواحد
Class Library : مجموعة من الدوال Methods التي تقوم بأعمال معينة تحت حاوية واحدة ألا وهي الـ Class
Dot Net FrameWork : المكون الرئيسي الذي يعتمد عليه برنامج Visual Studio ويتكون من العديد من الطبقات الخدمية
Keywords : كلمة محجوزة
Runtime : المعروف أيضاً بالمختصر CLR  القادم من Common Language Runtime وهو وسيط بين أسطرك البرمجية وبين لغة الآلة
Low Level : مستوى متدني وهنا نستخدمه للدلالة على لغة الآلة Assembly Language
Memory Usage : إدارة حجم الذاكرة المستخدمة
Method : دالة تحتوي على مجموعة من الأسطر البرمجية التي تقوم بوظيفة معينة
ReadKey : تقوم بقراءة حرف من لوحة المفاتيح
Double Slash :  // يتم إستخدامها لتحويل السطر البرمجي إلى سطر ملاحظة غير قابل التنفيذ
ReadLine : تقرأ جملة كاملة بشرط أن تنتهي بزر الإدخال Enter
Code Blocks : قطعة برمجية تحتوي على أسطر برمجية تبدأ بقةس وتنتهي بآخر وفي بعض الأحيان تحمل إسم
Main Method : الدالة الرئيسية التي يبدأ تنفيذ التطبيق منها ( يمكن تغييرها لاحقاً )
Program : البرنامج أو التطبيق الذي تقوم بتطويره
NameSpace : مكتبة ومجموعة من ال Classes التي تؤدي وظائف مختلفة
Class : مجموعة من الدوال Methods تحتوي على أسطر برمجية تؤدي وظائف معينة
Console : شاشة سوداء تقوم بطباعة أسطر متتالية وتتميز ببساطتها وقوة أداءها
Member : عضو ، لكن المقصود بها هنا هو جميع التوابع الخاصة بدالة أو ب Class أو ب Namespace معين
Member Accessor : وهي أداة ال النقطة ( . ) حيث بمجرد وضعها يقوم برنامج Visual Studio من خلال ال Intellisense بعرض جميع المحتويات الداخلية
WriteLine : دالة Method تقوم بطباعة سطر كامل ثم تنزل سطر جديد

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

#4 كتابةُ التطبيقِ الأول – البرمجة بواسطة #C

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

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

بدء التطبيق العملي :

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرس الرابع من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، أو كما أحب أن أناديها بالسي شوربة، بعدَ المقدمةِ النظريةِ الثقيلةِ في المحاضراتِ السابقة، أنا متأكدٌ أنكَ متشوقٌ للبدءِ الفعلي بكتابةِ الأسطرِ البرمجية، فلقد جُبلنا على حُبِّ التطبيقِ العملي، بعيداً عنِ المعلوماتِ النظريةِ المملة، وفي هذا الدرسِ سنقومُ بكتابةِ برنامجٍ بسيط، يقومُ بطباعةِ جملةٍ بسيطةٍ على شاشةِ الـ Console،

تعريف الـ Console :

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

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

لذلكَ، لا تقلقْ إنْ لمْ تستوعبْ جزئيةً معينةً في هذهِ اللحظةِ؛ لأنَّ كلَّ الدروسِ اللاحقةِ ستتكفلُ بالردِّ على تساؤلاتِكَ الحاليةِ. سنغوصُ في بحرِ البرمجة، فهل أنتَ مستعدٌ لتعلمِ السباحةِ الآن؟

إنشاء مشروع جديد :

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

File –> New –> Project ،

حيثُ ستظهرُ لكَ نافذةٌ جديدةٌ بعُنوان New Project، بها قائمةٌ مِنَ الاختياراتِ قدْ تختلفُ منْ نُسخةٍ لأُخرَى، لكنْ ستجدُ بالتأكيد #Templets –> Visual C، بعدَها قمْ باختيارِ النَّوعِConsole Application ، وقمْ أيضاً بإعادةِ تسميةِ المشروعِ إلى  HelloWorld، لاحظ أني قمتُ باختيارِ اسمِ مشروعٍ مطابقٍ لوظيفته، وهذَا سيساعدُنِي لاحقاً في معرفةِ وظيفةِ هذا المشروعِ، وأنَا أوصِي شخصياً بهذهِ الطريقةِ في كُلِّ مشاريعِكَ المُستقبليةِ، لكي تتذكرَ منَ الاسمِ فقطْ، لِمَ قمتَ بكتابةِ هذا التَّطبيقِ. ولاحظْ أيضاً أنِّي قمتُ باستخدامِ حروفٍ كبيرةٍ، ببدايةِ كلِّ كلمةٍ من كلمات الاسم، وقمتُ بلصقِ الكلمتينِ معاً ولمْ أضعْ مسافةً بينَهما، وذلكَ لاستخدامِها لاحقاً في أمورٍ معينة. بعدَ ذلكَ سأقومُ بالضغطِ على زرِّ التأكيدِ OK، لتختفِي شاشةُ الأنواع، ويظهَرَ أمامَنا المشروعُ بمكوناتِهِ،

والمنطقةُ الأكثرُ اتساعاً في شاشةِ البرنامَجِ، هيَ المكانُ المخصصُ لكتابةِ الأسطرِ البرمجيَّةِ، حيثُ تمَّ إنشاءُ ملفٍ يحملُ الاسم program.cs ، يحتوِي على بعضِ الأسطرِ البرمجيَّةِ التي تمَّ إنشاءُهاً تلقائياً، لتساعدَنا في البدءِ الفعليِّ لكتابةِ مضمونِ التَّطبيقِ. حيثُ إنَّنا سنتجاهلُ مبدئياً كلَّ هذهِ السطورِ، إلا المنطقةَ الموجودةَ بداخلِ الأقواسِcurly braces  هنا، وتجدرُ الإشارةُ هنا أنَّهُ يجبُ التَّمييزُ بينَ أنواعِ الأقواسِ، فهناكَ :
الأقواسُ المربعةُ brackets،
وهناكَ الأقواسُ الحادةُangle brackets ،
وهناكَ الأقواسُ الدائريةُ Round brackets .

كتابة التطبيق الأول :

لكتابةِ الأسطُرِ البرمجيَّةِ سأقومُ بحجزِ مساحةٍ كافية، وذلكَ بالضغطِ على زِرَّEnter ، بعدَ نهايةِ القوسِ في السطرِ رَقَمِ اثني عشرَ، وسأبدأُ بكتابةِ الآتي: Console منَ الانتباهِ الحادِّ أنَّها تبدأُ بحرفٍ كبيرٍ، ولاحظْ ظهورَ نافذةٍ صغيرةٍ مساعدةٍ خلالَ كتابتِي، سأتجاهلُهَا الآنَ لكنْ لاحقاً ستصبِحُ أعزَّ أصدقاءِك، ثمَّ سأقومُ بإتباعها بالنقطةِ dot، وكتابةُ كلمةِ WriteLine ملتصقتينِ معاً، معَ الانتباهِ أيضاً إلى أنَّ حرفي الدبليو والإل سيكونانِ بحروفٍ كبيرةٍ، ثمَّ سأقومُ بفتحِ أقواسٍ دائريةٍ (Round brackets)، وانتبهْ هُنا إنَّنا نحتاجُ أقواساً دائريةً وليسَ أقواساً مُربعةً، وبداخلِ هذهِ الأقواسِ سأقومُ بإضافةِ علامَتَي تنصيصٍ ثُنائيةٍ “، وانتبه لاستخدامَ علامتي تنصيصٍ وليسَ علامةٌ واحدة، وسأقومُ بكتابةِ الجملةِ Hello World ، بداخلِ علامتيِّ التَّنصيصِ وليسَ في أيِّ مكانٍ آخرَ، وفي نهايةِ السطرِ سأقومُ بإضافةِ فاصلةٍ منقوطةٍ ( semicolon ; ) ، وسأقومُ بالضغطِ على زرِّEnter للانتقالِ إلى السطرِ التالِي وكتابةِ:

 Console.ReadLine(); 

ولضمانِ عدمِ ضَياعِ ما قُمنا بكتابتهِ، سنقومُ بحفظِ البرنامجِ منْ قائمةِ File –> Save All، أو بإمكانكَ الضغطُ على هذهِ الأيقونةِ ( شكل القرصين ). الآنَ سأطلبُ منكَ إيقافَ الفيديو، وكتابةَ السطرينِ السابقينِ، وأتمنَّى منكَ التَّأكدَ منِ استخدامِ حروفٍ كبيرةٍ في بدايةِ الكلماتِ، ونفسِ علاماتِ الترقيمِ والأقواسِ الَّتي استخدمتُها هنا.

تنفيذ التطبيق للحصول على المخرجات :

أنَا مُتأكدٌ أنَّكَ متشوقٌ لرؤيةِ نتيجةِ ما قُمنَّا بكتابتَه، ولفعلِ ذلكَ قمْ بالضغطِ على المُثلثِ الأخضرِ، الموجودِ في الأعلى بجانبِ كلمةِ Start، أو إنْ لمْ تجدْهُ لسببٍ ما يمكنُكَ الذَّهابُ إلى قائمةِ Debug –> Start Debugging، أو بإمكانِكَ الضغطُ على مفتاحِ F5 إنْ كنتَ منْ مُحبيّ الاختصاراتِ السَّريعةِ. بتنفيذِ التَّطبيقِ سنلاحظُ ظهورَ نافذةٍ سوداءَ، مكتوبٌ فِيها Hello World وتحتَهَا مُؤشرٌ يظهرُ ويختَفِي، وعندَ الضغطِ على زرِّEnter منْ لوحةِ المفاتيحِ، ستختفِي شاشةُ ال Console، وسيعودُ برنامجُ Visual Studio إلى شكلهِ السابقِ.

تهانينا لكَ، فلقدْ نجحتَ بكتابةِ تطبيقِكَ الأولِ. قُمْ الآن بطباعة جملةٍ تعرفنا فيها عن نفسك، وتضع فيها هواياتك، وشاركها معنا بهاش تاق #طورني، ولا تنسى أن تقوم بعمل Mention لحسابي الشخصي، لأقوم بالرد عليك، أراك في الدرس التالي إن شاء الله.

ملاحظة هامة : 

إن واجهتك مشكلة مفادها : Visual Studio cannot start debugging because the debug target ‘c:\XXXXXX’ is missing ، قم بالتأكد من أن مسار المخرجات صحيح وذلك بالذهاب إلى قائمة : Project > Properties > Build > Output path ثم بعد ذلك قم بالتأكد من أن ال main/entry للمشروع في نافذة Build > Configuration Manager تم إختيار عمل Build له، إذا لم يكن قد تم إختياره قم بوضع علامة صح عليه.

 

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

Console : شاشة سوداء تقوم بطباعة أسطر متتالية، تتميز ببساطتها وقوة بنيتها
File : ملف
New : جديد
project : مشروع
Templets : نوع مشاريع معد مسبقاً يحوي إعدادات خاصة
#Visual C : لغة #C المرئية
Console Application : تطبيقات من النوع Console
Hello world : هو أول مشروع يتم تعليمه في كل اللغات لسهولته، حيث تقوم بتعلم كيفية طباعة جملة
Program.cs : الملف الرئيسي الذي يتم بدء تنفيذ التطبيق منه
WriteLine : دالة تقوم بطباعة نص معين ثم النزول إلى سطر جديد
semicolon : الفاصلة المنقوطة ;
ReadKey : دالة تقوم بقراءة مدخلات من المستخدم، وتمنع تطبيقات الـ Console من الوصول إلى نهاية التطبيق والخروج دون رؤية النتائج
Save All : حفظ جميع الملفات التي تم تعديلها سابقاً
Start : بدء تنفيذ التطبيق وهي بمثابة تشغيله بعد إنهاء ترجمته
Debug : تصحيح الأخطاء
Start Debugging : بدء تصحيح الأخطاء
Mention : تنويه وذكر

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 : الفئة المطلوبة لتطوير التطبيقات للنوافذ 

post

#2 لماذا السي شارب – البرمجة بواسطة #C

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

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

مهارات تطوير التطبيقات :

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

مثال واقعي :

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

البرمجة موجودة حولنا :

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

أفكار تسهل حياتك :

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

خصائص لغة السي شارب #C :

والسي شارب لغةٌ مِن لغاتِ برمجةِ الحاسوب، تَسمحُ لكَ بتطويرِ أنواعِ تطبيقاتٍ مختلفة، قامَتْ شَركةُ Microsoft بتطويرها، لتعتمِدَها بشكلٍ أساسيٍ في إنتاجِ تطبيقاتٍ لمِنَصَاتها المختلفة.

1 – مناسبةٌ للمبتدئين:

لأنها لغةٌ بسيطةٌ وسهلةُ الاسِتخدام، ولأنَّها تُعتبرُ لغةً عاليةُ المُستوى High Level Language، فيمكنُ للإنسانِ الذي يُتقنُ اللغةَ الإنجليزية، فهمَ مُعظمِ مصطلحاتها، لأنها تُوفِرُ كلماتٍ مَحْجوزةٍ مَفهومة، تَضعُها بينَ يَديكَ لأداءِ إجراءاتٍ معينة، ثمَّ تُحوِلُها إلى لُغةٍ وسيطة Intermediate Language، ثمَّ إلى لغةِ الآلة Machine Language، فكلُ كلمةٍ مِن كلماتِ لغةِ السي شارب، يُقابِلها عَشراتُ الجُملِ في لغةِ الألة، مما يَدَعُكَ تُركِزُ على فِكرةِ تطبيقك، ولا تقلقُ بِشأنِ الإجراءات المُعَقدَةِ تلك، فمثلاً استِخدامُكَ للكلِمَةِ المَحجوزَةِ Write، يُخِبر الحاسوبَ بِأنْ يَقومَ بِطِباعَةِ جُملةٍ على الشاشة، فنحنُ هنا لا نَهتمُّ أبداً كيفَ قامَ بالطباعة، بلْ نَهتمُ أنَّهُ قامَ بِذلكَ فقط، الأمرُ الذي إن حاولتَ كتابتَهُ بِلُغَةِ الألة، قَدْ يَستغرقُ مِنكَ عَشراتِ الجمل، فضلاً عَنِ الوَقتِ المهدور.

2 – تَزيدُ مِن إنتاجيَتِك :

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

3 – عددُ مُستخدميها كبير :

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

4 – اللغةُ الأساسيةُ في مُحركِ الألعاب Unity:

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

أفضل نسخة :

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

سي شارب أم جافا :

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

تمرين الدرس :

وأخيراً، قم بالإجابةِ عَنِ السؤالِ التالي، وطرحِ الإجابةِ على شبكاتِ التواصلِ الاجتماعي، معْ عَمل Mention لحسابي الشخصي :

ما هُوَ التطبيقُ الذي تَعتقدُ أنَّكَ لو قُمْتَ ببرمجتِهِ سَتصْبِحُ حَياتُكَ أسْهل؟

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

 Macro : أسطر برمجية متتالية تقوم بعمل وظائف، وهي مستخدمة بكثرة في برامج Microsoft Office
 High Level Language : لغة عالية المستوى أي أنها أقرب للإنسان فهماً وقراءةً
 Intermediate Language : لغة وسيطة بين اللغة العالية المستوى واللغة المتدنية المستوى
 Machine Language : لغة الآلة ( الحاسوب ) وهي لغة بها أوامر بسيطة لكنها معقدة يصعب فهمها بلغة Assembly Language .
Write : دالة تقوم بطباعة جملة على شاشة الـ Console.
Static Type : نظام كتابة يتيح لك إكتشاف الأخطاء الإملائية آنياً.
Unity : محرك ألعاب تستطيع بواسطة تطوير ألعاب ثلاثية البعد وثنائية البعد.