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

1. استخدم أسماء متغيرات ووظائف صديقة
تكون الشفرة أسهل بكثير عند كتابتها باستخدام أسماء وصفية وواضحة للوظائف والمتغيرات. فيما يلي الرمز غير الواضح:
function avg (a) { let s = a.reduce((x, y) => x + y) return s / a.length }
ستتحسن قابليتها للقراءة بشكل كبير إذا كنت تستخدم الأسماء المألوفة للمتغيرات والوظائف التي تعكس معناها.
function averageArray (array) { let sum = array.reduce((number, currentSum) => number + currentSum) return sum / array.length }
لا تسعى إلى الحد الأدنى عند كتابة نصوص البرنامج. استخدم أسماء المتغيرات الكاملة التي يمكن لأي شخص سيعمل مع التعليمات البرمجية الخاصة بك في المستقبل فهمها بسهولة.
2. كتابة دالات قصيرة تحل مشكلة واحدة
من الأسهل الحفاظ على الوظائف ، وتصبح أكثر قابلية للفهم ، ويمكن قراءتها إذا كانت تهدف إلى حل مشكلة واحدة فقط. إذا واجهنا خطأ ، فعندئذ عند استخدام الوظائف الصغيرة ، يصبح العثور على مصدر هذا الخطأ أسهل بكثير. بالإضافة إلى ذلك ، تم تحسين قدرات إعادة استخدام التعليمات البرمجية. على سبيل المثال ، يمكن
sumAndAverageArray
الوظيفة المذكورة أعلاه
sumAndAverageArray
، حيث إننا نحسب فيها مجموع قيم عناصر المصفوفة باستخدام طريقة
reduce
sumAndAverageArray
، ثم نجد متوسط القيمة ، ونقسم المبلغ الناتج على عدد العناصر في المصفوفة. هنا هي الوظيفة.
function sumAndAverageArray(array) { let sum = array.reduce((number, currentSum) => number + currentSum) return sum / array.length }
يمكن تقسيمها إلى وظيفتين ، ثم يصبح دور كل جزء من التعليمات البرمجية أكثر قابلية للفهم. بالإضافة إلى ذلك ، إذا أنشأنا برنامجًا كبيرًا ، فإن وجود وظيفة
sumArray
يمكن أن يكون مفيدًا للغاية. هنا هو رمز لميزتين جديدتين. واحد يحسب مجموع عناصر المصفوفة ، والثاني إرجاع متوسط قيمتها.
function sumArray(array) { return array.reduce((number, currentSum) => number + currentSum) } function averageArray(array) { return sumArray(array) / array.length }
علامة على أنه يمكن تقسيم الوظيفة إلى قسمين هي إمكانية استخدام كلمة "و" في اسمها.
3. توثيق الكود
اكتب وثائق جيدة للشفرة الخاصة بك - عندها سيتعرف شخص ما عبرها في المستقبل على ما يجري في هذا الرمز ولماذا. فيما يلي مثال على دالة فاشلة. يتم استخدام بعض "الأرقام السحرية" هنا ، ولا يتم توضيح معناها في أي مكان.
function areaOfCircle (radius) { return 3.14 * radius ** 2 }
يمكنك إضافة التعليقات هنا لجعل هذا الرمز أكثر قابلية للفهم لشخص لا يعرف صيغة حساب مساحة الدائرة.
const PI = 3.14 // , function areaOfCircle (radius) { // : // return PI * radius ** 2 }
هذا الرمز مجرد مثال. على الأرجح ، في هذه الحالة ، بدلاً من إدخال التخزين الدائم الخاص بك لرقم Pi ، سيكون من الأفضل استخدام خاصية
Math.PI
القياسية.
يجب أن تجيب التعليقات على الرمز على السؤال "لماذا".
يرجى ملاحظة أنه لغرض توثيق التعليمات البرمجية ، فمن المنطقي استخدام أدوات خاصة وقواعد التعليق على التعليمات البرمجية المقابلة. عند تطبيقه على Python ، أحب
Google Style Docstrings ، وعند تطبيقه على JavaScript ، أحب
JSDoc .
4. فكر في استخدام قواعد ساندي ميتز
ساندي ميتز مبرمج روبي عظيم ، تقدم عروض مثيرة للاهتمام وتكتب كتب. صاغت أربع قواعد لكتابة كود نظيف بلغات موجهة للكائنات. ها هم.
- يجب ألا يزيد طول الفئات عن 100 سطر من التعليمات البرمجية.
- يجب ألا تكون الأساليب والوظائف أطول من 5 أسطر من التعليمات البرمجية.
- يجب ألا تتجاوز الأساليب 4 معلمات.
- يمكن للتحكم تهيئة كائن واحد فقط.
أوصي بمشاهدة
أدائها فيما يتعلق بهذه القواعد.
لقد اتبعت هذه القواعد منذ عامين تقريبًا ، وأصبحت راسخة في ذهني بشدة لدرجة أنني أتبعها ، حرفيا ، "على الآلة". أنا أحبهم ، وأعتقد أن استخدامها يزيد من سهولة الحفاظ على التعليمات البرمجية.
يرجى ملاحظة أن هذه القواعد هي مجرد توصيات ، ولكن استخدامها سيجعل الشفرة الخاصة بك أفضل بكثير.
5. تطبيق القواعد المحددة بالتسلسل
التطبيق المتسق لقواعد كتابة التعليمات البرمجية مهم للغاية بغض النظر عما إذا كنت تكتب رمز المشروع بنفسك أو تعمل في فريق. على وجه الخصوص ، يتم التعبير عن هذا في حقيقة أن أي شخص يقرأ التعليمات البرمجية الناتجة عن تطوير الفريق يجب أن يدركها ككل. باستخدام هذا النهج ، لا يمكن إنشاء تأليف سطور فردية من التعليمات البرمجية إلا من خلال الاتصال بـ Git. إذا كنت في JavaScript تستخدم فاصلة منقوطة - ضعها في أي مكان تحتاج إليه. وينطبق الشيء نفسه على علامات الاقتباس - حدد علامات اقتباس مزدوجة أو مفردة ، وإذا لم يكن هناك سبب وجيه ، فاستخدم دائمًا ما تختاره.
أوصي بتطبيق دليل نمط الكود واللنت ، والذي يسمح لك بإحضار الكود إلى المعيار المحدد. على سبيل المثال ، بالنسبة إلى JavaScript ، أحب قواعد
JS القياسية ، و Python أحب قواعد
PEP8 .
في الواقع ، الشيء الرئيسي هنا هو العثور على قواعد تصميم الكود والالتزام بها.
6. تذكر مبدأ DRY
واحدة من الأفكار الأولى التي يحاول الناس نقلها إلى شخص يريد أن يصبح مبرمجًا هي: "لا تكرر نفسك ، جفف". إذا لاحظت وجود أجزاء مكررة في مشاريعك ، فاستخدم تراكيب البرامج التي ستقلل التكرار من نفس الرمز. كثيرا ما أنصح طلابي للعب لعبة
SET لتحسين مهاراتهم في التعرف على الأنماط.
ومع ذلك ، إذا قررت تطبيق مبدأ DRY بشكل متعصب أو قررت تجريد القوالب المختارة بشكل سيئ ، فقد تتدهور إمكانية قراءة التعليمات البرمجية بشكل خطير ، وفي وقت لاحق ، قد تحتاج إلى اللجوء إلى إنشاء نسخ من نفس التركيبات في كثير من الأحيان. بالمناسبة ، لدى ساندي ميتز مقالة رائعة حول كيف أن ازدواج التعليمات البرمجية أقل شرًا من
التجريد الفاشل .
ونتيجة لذلك ، لا يستحق التكرار ، ولكنه لا يستحق ذلك أيضًا ، في النضال من أجل مراعاة مبدأ DRY ، لتعديل الشفرة إلى الحد الذي يصبح من الصعب فهمه.
7. استخدام أفكار التغليف والنمطية.
تجميع المتغيرات والوظائف ذات الصلة من أجل تسهيل فهم التعليمات البرمجية الخاصة بك وتحسينها من حيث إعادة استخدامها. فيما يلي مثال على رمز غير منظم بشكل جيد للغاية ، حيث يتم تقديم معلومات حول شخص ما في شكل متغيرات منفصلة.
let name = 'Ali' let age = 24 let job = 'Software Engineer' let getBio = (name, age, job) => `${name} is a ${age} year-old ${job}`
إذا كان من الضروري في هذا البرنامج معالجة بيانات العديد من الأشخاص ، فمن الأفضل استخدام شيء مثل البناء التالي فيه.
class Person { constructor (name, age, job) { this.name = name this.age = age this.job = job } getBio () { return `${this.name} is a ${this.age} year-old ${this.job}` } }
وإذا كان البرنامج يحتاج إلى العمل فقط مع بيانات حول شخص واحد ، فيمكن ترتيبها كما هو موضح أدناه.
const ali = { name: 'Ali', age: 24, job: 'Software Engineer', getBio: function () { return `${this.name} is a ${this.age} year-old ${this.job}` } }
بطريقة مماثلة ، يجب على المرء أن يقترب من تقسيم البرامج الطويلة إلى وحدات ، إلى ملفات منفصلة. سيؤدي ذلك إلى تسهيل استخدام التعليمات البرمجية المخصصة في ملفات منفصلة في مشاريع مختلفة. في الملفات الكبيرة التي تحتوي على رمز البرنامج ، غالبًا ما يكون من الصعب التنقل ، والوحدات الصغيرة القابلة للفهم سهلة الاستخدام في المشروع الذي تم إنشاؤها من أجله ، وإذا لزم الأمر ، في مشاريع أخرى. لذلك ، نسعى جاهدين لكتابة كود معياري مفهومة من خلال الجمع بين العناصر ذات الصلة المنطقية.
الملخص
في هذه المقالة ، قمنا بمشاركة بعض التوصيات لكتابة تعليمات برمجية واضحة ومفهومة. ومع ذلك ، هذه مجرد توصيات. هذه نصائح لمساعدتك على كتابة نصوص برامج عالية الجودة. إذا طبقت بشكل منهجي قواعد مشابهة لتلك الموضحة هنا ، فعندئذٍ ، مقارنةً بالكود الذي لا يستخدم شيئًا مشابهًا ، ستكون التعليمات البرمجية المكتوبة باستخدام القواعد أكثر قابلية للفهم ، سيكون من الأسهل تمديدها وصيانتها وإعادة استخدامها.
أعزائي القراء! ما القواعد التي تتبعها لشفرتك؟
