كيف نُبرمج ؟
الكاتب: فراس | 4 يوليو 2008
السلام عليكم و رحمة الله و بركاته :
بعد طول غياب أعود إليكم :) مع موضوع جديد .
في الحقيقة خلال إطلاعي في أحد المواقع التي تهتم بدعم لغة PHP , كانت الكثير من المواضيع تدور حول محور كيف يُمكنني برمجة سكربت لفعل كذا !!للأسف نظرة المُبرمجين دائماً تكون نظرة ذهول لأي شيء يتعرضون له فمثلاً إذا ظهر له خطأ تجده مباشرةً يفتح موضوع خاص من أجل هذا الخطأ ! طبعاً أهلاً و سهلاً به :) ولكن في مثالنا لغة php تُعطيك الخطأ وين موجود , ولو حاول قراءة الكود بشكل جيد لعرف الخطأ من أين ! على العموم لن أُطيل الكلام النظري سأبدء بإذنه تعالى بسرد خطوات العمل .
- حدد وظيفة السكربت الأساسية .
- حدد الوظائف الثانوية .
- مُعالجة الأخطاء البرمجية و أخطاء التشغيل .
سأبدء بإذنه تعالى بشرح خطوة خطوة .
1+2 - تحديد وظيفة السكربت الأساسية و الوظائف الثانوية :
في البداية سأطرح لكم مثال نظري حصل معي شخصياً و من ثم نُحاول اشتقاق فكرته , منذ فترة 5 أشهر تقريباً كنت موجوداً في ألمانيا كنت في منزل أحد أقربائي , المهم بينما كُنا نركن السيارة في الموقف (الكراج) لفت انتباهي الباب الذي يعمل بشكل أوتماتيكي !فكرت أولاً بشكل مُعقد لكيفية عمل هذا الباب ولكن بعد قليل قُلت لنفسي لماذا التعقيد ؟ البداية تكون فتح و إغلاق الباب ! يعني تضغط زر يفتح الباب و زر ثاني يُغلق الباب (مش كيميا :))المهم بعدين فكرت إن الإغلاق يجب أن يكون بشكل آلي بعد 2 دقيقتين , وهذا سهل من خلال تركيب دارة صغيرة تقوم بحساب دقيقتين منذ فتح الباب ومن ثم توصل الكهرباء للدارة المسؤولة عن الإغلاق ! الآن بقي لدينا مشكلة وحيدة ! ماهي ؟ لربما كانت هُناك سيارة واقف تماماً مكان نزول الباب ! هل سيصطدم الباب بالسيارة ؟ أكيد لا :) , دارة جديدة مسؤولة عن التأكد فيما لو كانت الأشعة بين الحائطين مستمرة وهذا يعني أن ليس هُناك أي عائق وغير ذلك يوقف عمل الباب :) هذا بكل بساطة , أتمنى أن تكونو استفدتو :P كفاية لحد هنا .
الآن ننتقل
الآن سننتقل للكلام في البرمجة , لنأخذ مثال كـ برمجة سكربت راسلنا , مارأيكم ؟ في الحقيقة سكربت بسيط جداً جداً ولكن البعض يجده شي مُعقد ! أنا كمُبرمج مُبتدأ سأنظر إلى السكربت و أقول يا إلهي ماهذا والله شيء صعب ! يعني عندنا حقول وإدخال إلى قواعد البيانات ولربما كان هناك حقول فارغة والبريد الإلكتروني غير مكتوب بشكل صحيح و…. غيرها من المشاكل التي سأتعرض ! سأخاف ولن أُكمل ولكن لو نظرنا مثل نظرتي للباب :) , نجد أنه أول شيء سنقوم به هو إنشاء نموذج صغير يحتوي على 4 حقول , الاسم و البريد الإلكتروني و العنوان و محتوى الرسالة صحيح ؟ و من ثم نُنشأ صفحة في ال PHP تقوم فقط بإخذ هذه المحتويات و من ثم حفظها في قواعد البيانات , هذا كل شيء على فكرة (هذه هي الوظيفة الأساسية) !! و برنامجك صحيح 100% , لاتستغرب عزيزي ! فالمُستخدم لو لم يكتب بريده بشكل صحيح ما الفائدة من مُراسلتك أصلاً ؟يعني هو الخسران مش إنت ! ولكن هُناك شيء يُسمى User Friendly ! هذا مايجب أن يكون عليه برنامجك , يجب عليه أن يُصحح كل شيء لكي يكون على أكمل وجه ! الآن نأتي للحالات الإستثنائية ! لربما كانت الحقول فارغة ! سهل جداً هُناك دالة خاصة لهذا الشيء في لغة PHP و في كل لغة هناك طريقة للتأكد ! فقط أضف هذه الدالة للتأكد ! هذا كل شيء و نفس الشيء بالنسبة للتأكد من صحة البريد الإلكتروني(هذه هي الوظائف الثانوية) , إضافات فقط و الآن مبروك عليك البرنامج هل هذا صعب ؟ لاحظ أن تنفيذ الفكرة الأساسية هو أهم شيء لأن ماتبقى يكون شيء ثانوي ولكنه مهم في نفس الوقت .
3- معالجة أخطاء التشغيل و الأخطاء البرمجية :
الآن ننتقل لأهم فكرة في هذه التدوينة لأن كثيراً منا يواجه أخطاء يجلس معها لأكثر من يومين دون فائدة :) , في مثالنا هُنا و هو سكربت راسلني , من المشاكل التي قد تواجهنا هو مثلاً حفظ الحقول فارغة ! في قواعد البيانات , نعم هذا وارد , مع العلم أنني أملأ البيانات بشكل كامل , السبب هنا قد يكون مثلاً أنك أخطأت في كتابة اسماء الحقول التي سيملأ بها حقول قواعد البيانات يعني , أنت لديك الحقل الخاص باسم المُرسل في النموذج باسم “T1″ و في صفحة ال PHP كنت كاتبه “name”في هذه الحالة لن يتعرف إليه لو جلست طول عمرك أمامه :) , مشكلة ثانية هو أنك تضغط على زر أرسل ولكنه لايحفظ شيء في قواعد البيانات !! هُنا أمامك طريقان , أول طريق هو طباعة الإستعلام الذي تعمل عليه أنت ؟ يعني الإستعلام الذي يقوم بإضافة البيانات إلى قاعدة البيانات اعمل له طباعة :) بشكل عادي يعني لاتخاف :) (علمني ياها أخي أشرف السمهوري ) , الطريقة الثانية وبالأخص لمُستخدمي PHP هُناك دالة خاصة لإظهار الأخطاء اسمها “mysql_error()”تعودو على استخدامها في مُفيدة جداً , أيضاً من الأخطاء الشائعة و بعيداً عن السكربت في مثالنا , لو كان مثلاً لدينا حلقة تكرار وظيفتها طباعة مُتغيرات ! ولكنها لاتطبع شيء, هُنا أنت في مواجهة الكثير من الأخطاء رُبما الخطأ من التكرار نفسه ! يعني لايقوم بالتكرار بشكل صحيح , أو من اسم المتغير أو قيمته , لذا الحل الأمثل عزيزي هو طباعة جملة أياً كانت ! مثلاً “تجربة “شوفها تظهر لك وتتكرر ؟ لو عملت بنجاح هذا يعني خطأنا موجود في اسماء المتغيرات و إذا لم تطبع فالمشكلة من حلقة التكرار نفسها .
أيضاً من المشاكل التي قد تواجه المبرمجين بشكل عام , هو مثلاً الشرط ! دالة if يعني , تجدها لاتعمل , والحل الأمثل كما قلت لك الطباعة , اطبع القيمتين اللتان تعمل عليهما شوف هل تحققان الشرط , لو فعلاً كانو يحققو الشرط فالمشكلة ياعزيزي 90% هي عدم كتابتكلشرط التحقق بهذا الشكل “==” يعني وضع إشارتي يساوي للتأكد من أنهما مُتساويتان لأنك ياعزيري لو وضعت واحدة فقط سيفهمها على أنها إسناد ! مثلما هو الحال عادةً عندما نُسند متغير لقيمة مُعنية .نعود معأ لحلقات التكرار مع حلقة while التي قد لاتنتهي مع بعضنا إلى أن يأتي يوم الدين :) طبيعي ! فمثلاً أنت قُلت له طالما قيمة المتغير “i” أكبر من 0 قُم بشيء مُعين ولكنك تجده يكرر العملية دون توقف ! السبب وعلى الأرجح أنك لم تقل له أنه في كل دورة يجب عليه إنقاص رقم واحد من المتغير “i” , نأتي لذكر أكثر خطأ نُعاني منه و هو نسيان وضع “;” في نهاية كل سطر ! تقريباً كل لغات برمجة العالم تستخدم هذا الرمز من أجل الدلالة على أنتهاء هذا السطر البرمجي :) , لاتنساها أبداً , أيضاً تذكر دائماً أنك عندما تفتح أي شيء أغلقه ! يعني لو فتحت بإشارة تنصيص ‘“‘لازم تغلقها حتماً أيضاً نفس الشيء بالنسبة للأقواس .
طبعاً هذه بعض المشاكل الشائعة للمُبرمجين بشكل عام ولو تذكرت أي شيء سأكتبه من خلال ردودي إن شاء الله .
تذكر دائماً نُقاط أساسية وهي عدم النظر إلى البرنامج على أنه اختراع , طالما تملك الخبرة البرمجية أو الأصح كيفية التعبير برمجياً عن مايجول في خاطرك فإن كل شيء بإذن الله سيكون سهل , وتذكر دائماً مُعظم اللغات تُخبرك الخطأ وين موجود اذهب وحاول حله بنفسك ,لأنك إذا لم تحله بنفسك لن تتعلم , أو ابحث عن حل له ,:) لا أقول هذا لكي ارتاح من المشاكل التي يطرحها الأعضاء ولكن لكي تستفادو أنتم في النهائية .
أتمنى أن تكون المقالة مُفيدة , و الحمدلله رب العالمين .
تحياتي
فراس