الكود النظيف (Clean Code)

مقدمة

"أي شخص يستطيع كتابة كود يفهمه الحاسوب، ولكن المبرمج الجيد وحده من يكتب كود يفهمه البشر"
عالم الحاسوب - Martin Fowler

يمكن كتابة الكود بكثير من الطرق لتحقيق نفس النتيجة، كلهم سيتمكن الكمبيوتر من تفسيرهم وتنفيذهم، ولكن يُصبح الكود جيداً ونظيفاً فقط إذا اهتمّ المبرمج بقواعد كتابة الكود النظيف، وهذا اﻷمر من أهم اﻷمور التي يجب أن تهتم لها أثناء كتابتك للأكواد البرمجية، لماذا؟

  • لتتمكن من تعديل الكود بسهولة
  • ليتمكن أي مبرمج آخر من فهم الكود الخاص بك والتعاون معك فيه
  • ليُصبح البرنامج قابل للتطوير مستقبلاً، فربما يبدأ المشروع ببعض المميزات البسيطة ثم تطرأ عليه تطويرات ضخمة مستقبلاً
  • لتختصر وقت تطوير وصيانة البرنامج، فبدلاً من أن تستغرق أياما في حل مشكلة بسيطة، تقوم بحلها في دقائق!
  • لتتجنب الكثير من اﻷخطاء البرمجية
  • لتتمكن من إيجاد المشكلات البرمجية بسهولة
  • ليكون حل المشكلات واﻷخطاء البرمجية أسهل!

استخدم التعليقات (comments)

استخدام التعليقات (comments) أثناء كتابة الكود من أهم القواعد التي يجب أن تتبعها، استخدم التعليقات بكثرة لشرح الكود الخاص بك والخوارزمية المتبعة وشرح أي أمور معقدة مما سيسهل عليك وعلى غيرك مستقبلاً فهم الكود وآلية عملة.

var width = 10;
var height = 20;
// طباعة مساحة المستطيل عن طريق ضرب الطول * العرض
console.log(width * height);

اكتب كود سهل القراءة (readable)

يجب أن يكون الكود الخاص بك منسّق وسهل القراءة، ابتعد عن كل ما يجعل الكود غير منسق وصعب القراءة

استخدم المسافات البادئة

المسافات البادئة شيء أساسي عند كتابة الكود، ويساعدك محرر النصوص على اﻹلتزام بها، فاحرص دائماً على تنسيق الكود بالمسافات البادئة، انظر الفرق بين الكودين:

for (var i = 0; i <= 5; i++){
if (i == 3){
console.log("OK");
}
console.log(i);
}

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

for (var i = 0; i <= 5; i++){
  if (i == 3){
    console.log("OK");
  }
  console.log(i);
}

اﻵن يمكنك بالعين معرفة أن if داخل for، وأن أمر الطباعة الثاني خارج كتلة if وهكذا...

استخدم أسماء معبرة

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

var x = 10;
var y = 20;
var z = x * y;

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

var width = 10;
var height = 20;
var area = width * height;

اﻵن أصبح الكود أكثر قابلية للقراءة والفهم!

إذا كان اسم المتغير أو الدالة متعدد الكلمات، اتبع اﻷسلوب الذي يتبعه المجتمع البرمجي للغة التي تستعملها، تحدثنا عن ذلك في درس المتغيرات (مستوى متوسط)

تجنب التكرار

مبدأ "لا تكرر نفسك"

مبدأ "لا تكرر نفسك" باﻹنجليزية "DRY" أو "Don't Repeat Yourself"

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

في المثال التالي نريد حساب مساحة المستطيل ثلاثة مرات بأبعاد مختلفة، يمكن تنفيذها بالطريقة التالية:

var width = 10;
var height = 20;
var area = width * height;

var width2 = 15;
var height2 = 30;
var area2 = width2 * height2;

var width3 = 20;
var height3 = 40;
var area3 = width3 * height3;

لاحظ أن الكود السابق مكرر، وإذا أردنا حساب مساحة مستطيل آخر سنكرر أكثر، ولنفرض أننا نريد تغيير العملية من ضرب إلى جمع مثلاً؟ سنمر على جميع مواضع التكرار لنغير علامة الضرب إلى علامة جمع! هذا غير مقبول إطلاقاً في البرمجة، يجب عليك أن ﻻ تُكرر، وأن تسهل عملية التطوير والتعديل وحل المشكلات، واﻵن يمكننا استخدام الدوال في كتابة الكود بطريقة أفضل:

function calcArea(width, height){
  return width * height;
}
var area = calcArea(10, 20);
var area2 = calcArea(15, 30);
var area3 = calcArea(20, 40);

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

اختصر الكود قدر اﻹمكان

احرص على الوصول للحل باتباع الطريق اﻷسرع واﻷكثر اختصاراً، لا تكتب أي سطر بلا فائدة، ولا تتبع طريق أطول للوصول لهدفك في حين أن لديك طريق أسرع وأكثر اختصاراً، مثال على اختصار الكود:

function check(num){
  if (num > 50){
    return true;
  }else{
    return false;
  }
}

الدالة السابقة تتحقق من أن العدد أكبر من 50، وإذا كان أكبر تقوم بإرجاع true غير ذلك ترجع false

function check(num){
  return num > 50;
}

ستقوم الدالة بإرجاع إما true أو false ﻷن تعبير المقارنة ينتج عنه قيمة منطقية، بالتالي لا داعي لاستخدام if، أصبح الكود أكثر اختصاراً وقابلية للقراءة.

ولكن لا تختصر على حساب القواعد السابقة، أي لا تختصر الكود مثلاً ليُصبح غير قابل للقراءة.


يمكنك زيادة معرفتك عن موضوع الكود النظيف بالبحث على جوجل عن "الكود النظيف" أو "Clean Code" وإن كانت انجليزيتك قوية ابدأ اﻵن بقراءة كتاب "Clean Code - by Robert C. Martin" لتتعمق أكثر وأكثر في فن كتابة الكود النظيف.

المساهمين

وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github