تنسيق الشيفرة البرمجية Coding Style
بسم الله الرحمن الرحيم
اللَّهُمَّ لك الحَمْدُ كُلُّهُ، وإلَيْك يَرْجِعُ الأمْرُ كُلُّهُ، عَلانِيَتُهُ وسِرُّهُ. فَحَقٌّ أنْتَ أنْ تُعْبَد، وحَقٌّ أنْتَ أنْ تُحْمَد، وأنْتَ على كُلِّ شَيْءٍ قَديْر.اللَّهُمَّ لك الحَمْدُ كالَّذِي تَقُولُ، وخَيْرًا مـِمَّا نَقُولُ، اللَّهُمَّ لك الحَمْدُ بِجَمِيْعِ المَحَامِد كُـلِّهَا، الحمد لله رب العالمين.
تنسيق الشيفرة البرمجية (Coding Style)
عليك أن تعلم أخي المبرمج, أنك مهما امتكلت من تقنيات برمجيةٌ، ومهارات في استخدام ال PHP syntax (على سبيل المثال لا الحصر)،هذا لا يعني أنك كتبت شيفرة برمجية محترفة!، ولا يعني هذا أبدا أن هذه الشيفرة البرمجية سهلة التعديل والتطوير من قبلك ذاتيا أو من قبل الآخرين، بل يجب أن تقترن المهارة السابقة بمهارة أخرى مهمة، وهي مهارة ال Coding Style، بحيث تقوم على تنسيق الشيفرة البرمجية التي قمت بكتابتها ضمن قواعد معينة (رئيسية) يتفق على بعضها، ويتنوع أساليب بعضها، ويختلف في بعضها، لكنها في المحصلة، مجموعة من المعايير التي تعطي للشيفرة البرمجية رونقها الخاص والجذاب ^_^، وبهذا فلا يوجد شكل لتنسيق الشيفرة البرمجية يقال عنه " مثالي " وإنما يقال شيفرة برمجية أقرب للمثالية أو تعطي جانب من المثالية...
ملاحظة 1: عليك كتابة الشيفرة البرمجية بأبسط أسلوب ممكن، وهذا لا يعني أن يكون بسيطا بقدر لا يلبي إحتياجاته أو إمكانيات تطوريه الممكنة، ولا يعني معقد يتم برمجته بشكل لا أحتاجه أصلا ! ..يجب أن تكون الشيفرة البرمجية مرنة ^^.
والآن، ما هي الأمور التي يجب مراعاتها حتى يتسنى لنا كتابة شيفرة برمجية واضحة وجميلة:
1) المسافة البادئة: وهي المسافة التي تسبق أي سطر برمجي، ومع أنها بسيطة، لكنها مهمة جدا، فيكفيك مثلا أهميتها في تتبع التداخل في ال block {} مثل ال if أو ال function ...الخ، ويمكنك طبعا إنشاء هذه المسافات من خلال ال Tab أو من خلال ال Spaces.
2) طول السطر البرمجي: دائما لا تجعل الأسطر البرمجية الخاصة بك طويلة جدا، بل عليك تقليص حجم السطر، ليصبح السطر البرمجي كله ظاهرا أمامك وواضح وسهل التتبع، وفي مجمل الأمر يجب أن لا يزيد طول السطر البرمجي عن 80 حرف مع فراغ.
3) الفراغات: ويقصد بها هنا هي الأسطر الفارغة التي تترك لتفصل بين كل فكرة برمجية وأخرى، وتفصل بين كل مهمة وأخرى، هذا الأمر البسيط يعطي أريحة للعين لقرائة الفكرة وتتبعها، ومعرفة أن هنالك فكرة جديدة أخرى ^_^
4) مراعاة البنية التركيبية والطريقة القواعدية ل(SQL): إن ال SQL تستخدم في العديد من لغات البرمجة، ومنها ال PHP، وطبعا لأهمية ال SQL، فإن معظم المبرمجين يعطونها أهمية خاصية، خصوصا إن كانت ال query التي سيتم استخدامها كبيرة نوعا ما أو معقدة، ويهمهم هنا أن تبقى جمل الإستعلام هذه واضحة وسهلة التحديث والتعديل والتتبع، ولهذا فإن ما ذكرناه من النقاط السابقة 3 سيتم إسقاطه واستخدامه هنا ^_^، ونضيف عليها بعض القواعد الخاصة بكتابة جمل الإستعلام الخاصة بال SQL ..فمثلا يجب أن تكتب الكلمات المحجوزة Capital ويجب أن يتم كتابة أول أسماء الأعمدة ب small، بالإضافة الى استخدام ال alias name للجداول بدلا من استخدام اسم الجدول بذاته...(ولا تنسى أن تسقط ما تعلمناه سابقا هنا) ^_^
5) استخدام ال {} Braces: جميعنا نعرف استخدام ال Braces لتحديد أن شيفرة برمجية معينة تندرج ضمن نطاق هذا ال block أم لا ..(block مثل if, for, function...الخ)، ولكن لاستخدام هذه ال Braces أيضا تنسيق يتبع لثلاثة مدارس وهي:
أ) ال BSD: يتم هنا وضع ال Braces على سطر جديد، وتغلق بسطر جديد بحيث يكون Braces أسفل ال block مباشرة.
ب) ال GNU: يتم هنا وضع ال Braces على سطر جديد أيضا، وتغلق بسطر جديد، لكن يختلف هذا الأسلوب عن الأول بأن ال Braces يجب أن يكون قبلها مسافة معينة تقدر عادة بين الإسم المحجوز والإسم الذي يليه أو الأقواس، مثل if(x...) تكون موقع ال Braces بين ال if وال ) ... وهناك آخرون يعتمدون على المسافة الناتجة من ال tab بحيث يتم الحفاظ على هذا النسق بمقدار 4 أو 8 أو حسب تخصيصهم...
ج) ال K&R: ويكون ال Braces هنا على نفس السطر، والنهاية على سطر لوحده مثل if(x....){ ...
والآن السؤال القوي، أي هذه التصاميم أستخدم ؟! وأيها أفضل؟
أيها أفضل، فقلنا أنه لا يوجد مثالية، ويمكنك اختيار ما تشاء، لكني شخصيا، وكثير من المبرجين الآخرين قد يفضلون استخدام نوعين معا، فمثلا أستخدم أنا ال K&R وأعتبره الأفضل مع معظم ال block، وأستخدم ال BSD مع ال function (كاستثناء عن ال block) وبهذا تصبح الشيفرة البرمجية سهلة التتبع ...ولك الحرية أنت فيما تختار..
6) تجنب الحلقات المتداخلة: حاول دائما قدر الإمكان تجنب إستخدام ال Insted Loop أو ال insted if ..خصوصا إذا كان التداخل يتعدى 2-3 ...لأن هذا يزيد الأمر صعوبة وتعقيدا، وفي غالب الأمر يمكنك تحويل هذا التداخل الى جمل عادية في إعادة الصياغة بشكلها الصحيح ...
7) التسمية: من الأمور المهمة جدا هي تسمية المتغيرات وال function وال class بشكلها الصحيح..ويدخل في مجال تنسيق التسمية أيضا نقطة مهمة وهي: ما هي طريقة التسيمة التي يجب أن أعتمدها في حال تعدد المقاطع مثل Get Count ؟
الجواب هنا يكون من خلال طريقتين إثنتين:
أ) camel caps: وهنا يتم وضع الفواصل بين الكلمات على شكل Capital، وهذا يعني كلمة جديدة، مثال: getCountByAnees
ب) a.k.a. studly caps (Using underscores ( to break word: هذه المدرسة تقول أنه يجب عليك الفصل بين الكلمات من خلال ( _ ) مثل:
get_count_by_anees
وطبعا ..لن أقول من الأفضل هنا ..، ولكل أسلوب قوته الخاصة، وتقاس المقارنة من خلال مقارنة التسيمة بين الأصناف والمتغيرات والكلاس، وفهم المتحدث بلغات أخرى..الخ من النقاط ...
8) من النقاط المهمة في تنسيق الشيفرة البرمجية، تناسق التسمية ؟!
ماذا يعني هذا الكلام؟
يعني أن تسمية المتغيرات التي ستتكفل بمهمة معينة، يجب أن تدل عليها، وبشكل يوضح أن هذه المتغيرات موجودة لإنجاز نفس الهدف بوظائف مختلفة مثل
$next_page, $prev_page, $curr_page
9) التوثيق (Documentation): يعد التوثيق من الأمور المهمة جدا لأي شيفرة برمجية، والتي تقدم خدمة لشرح الشيفرة البرمجية، وإمكانية تتبعها، وتحديثها، واستخدامها ..الخ من قبل المبرمج نفسه في المستقبل، أو من قبل مبرمجين آخرين، ويمكن تقسيم التوثيق الى نوعين وهما:
أ) inline-comments: باختصار فهذا النوع من التوثيق يستخدم في شرح التعليمات البرمجية التي تم كتابتها في المشروع. (يهتم بالمسار الخاص بالتعليمات البرمجية تحديدا)
ب) API Documentation: هذا التوثيق هو اختصار ال Application Programming interface وهذا يعني أنها إشارة تدل على محتوى مكتبة أو فانكشن أو كلاس، وطريقة استخدامه، ويحتوي تفاصيل المهمات التي يمكن تنفيذها من خلال استخدام برنامج معين، والمتغيرات التي يمكن أن يستقبلها..ويمكن أن نقول هو وصف عام لمكتبة ما، لمشروع ما، لكلاس ما ..
والآن، بعد حديثنا الموجز عن هذا الموضوع، فإني أحب أن أقول لكم، أن هذه الشيفرة البرمجية التي سيتم كتابتها كما ورد ذكره، هي شيفرة برمجية رائعة ^_^، وجذابة، ومن الممتع قرائتها..فما رأيك أن تقوم أنت بتجربتها ؟ فنتشاهد إبداعك.
*) ملاحظة: يمكنكم الإطلاع على مزيد من التفاصيل من خلال دورة ال PHP adv101.
الحمد لله رب العالمين، الحمد لله الكريم، الحمد لله العظيم الغفور الشكور، الحمد لله رب العالمين.
أخوكم: أنيس حكمت أبوحميد.
16-09-2015