102 lines
6.1 KiB
Markdown
102 lines
6.1 KiB
Markdown
---
|
|
title: Clean Code Guidelines
|
|
localeTitle: تعليمات كود نظيفة
|
|
---
|
|
# تعليمات كود نظيفة
|
|
|
|
عند الترميز ، يمكن أن يكون نمط الترميز الذي تتابعه مهمًا حقًا. خاصة عندما تعمل مع فريق أو تخطط لمشاركتك الشفرة. معظم هذه الإرشادات قياسية ويمكن تطبيقها على معظم لغات البرمجة ، ومع ذلك ، هنا لديك تطبيقات و مقتطفات مع رمز c ++ ، حتى تتمكن من التعرف عليها بسهولة. تذكر أن هذه ليست سوى توصيات لتحقيق الوضوح ، والتي يمكن أن تكون شخصية ، لذا خذ هذه النصائح في الاعتبار ولكن لا تأخذها إلى الرسالة. في بعض الأحيان قد يؤدي كسر بعض هذه القواعد إلى جعل الشفرة أكثر نظافة.
|
|
|
|
## استخدم أسماء المتغيرات الجيدة وقم بالتعليقات
|
|
|
|
تأكد من إنشاء أسماء متغيرة جيدة ، على سبيل المثال ، إذا كنت تقوم بإنشاء لعبة ، تجنب استخدام المتغير "a" استخدم شيئًا مثل "p1" يشير إلى اللاعب 1. إن [الترميز الهنغاري](https://en.wikipedia.org/wiki/Hungarian_notation) منتشر بشكل شائع ويمكن أن يعطيك بعض الخطوط الجانبية للإعلان المتغيرات.
|
|
|
|
أيضا ، يرجى استخدام التعليقات ، أنا لا أمزح حتى ، مجرد محاولة قراءة بعض المشاريع القديمة التي قمت بها دون تعليقات ... الآن تخيل كونه شخص آخر لم يقم حتى برمجته.
|
|
|
|
## المتغيرات العالمية
|
|
|
|
يمكن أن تكون المتغيرات العالمية سهلة الاستخدام ، ومع القليل من التعليمات البرمجية قد تبدو وكأنها حل رائع. ولكن عندما يصبح الرمز أكبر وأكبر ، يصبح من الصعب معرفة متى يتم استخدامه.
|
|
|
|
بدلاً من استخدام المتغيرات العامة ، يمكنك استخدام المتغيرات التي تم الإعلان عنها في الوظائف والتي يمكن أن تساعدك في تحديد القيم التي يتم تمريرها وتحديد الأخطاء بشكل أسرع.
|
|
|
|
`#include <iostream>
|
|
using namespace std;
|
|
|
|
// Global variables are declared outside functions
|
|
int cucumber; // global variable "cucumber"
|
|
`
|
|
|
|
## استخدام الانتقال والمتابعة وما إلى ذلك.
|
|
|
|
هذا هو النقاش المعتاد بين المبرمجين ، تماما مثل المتغيرات العالمية ، وعادة ما تعتبر هذه الأنواع من البيانات ممارسة سيئة. تعتبر سيئة لأنها تؤدي إلى ["رمز spaguetti"](https://en.wikipedia.org/wiki/Spaghetti_code) . عندما نبرمج نحن نريد التدفق الخطي ، عند استخدام هذه العبارات يتم تعديل التدفق ويؤدي إلى تدفق "ملتوي ومتشابك".
|
|
|
|
تم استخدام Goto في الماضي عندما ، بينما ، إذا ، إذا كانت الوظائف ، مع ذلك ، تم إنشاء مقدمة هذه البرمجة المنظمة. بشكل عام ، تجنب استخدام goto ما لم تكن متأكدًا من أنها ستجعل رمز نظافتك وأسهل في القراءة. مثال قد يكون استخدامه في حلقات متداخلة.
|
|
|
|
استخدام الفاصل والمتابعة من الناحية العملية هو نفسه. استخدمها في المحولات ومحاولة جعل الوظائف ذات غرض وحيد بحيث يكون لديك نقطة خروج واحدة فقط.
|
|
|
|
![IMG](https://imgs.xkcd.com/comics/goto.png)
|
|
|
|
## تجنب تغيير متغير التحكم داخل حلقة for
|
|
|
|
عادة ما تكون هناك أعمال حول هذا تبدو أكثر وضوحا وأقل إرباكا ، على سبيل المثال. بينما الحلقات. فعل:
|
|
|
|
`int i=1;
|
|
while (i <= 5)
|
|
{
|
|
if (i == 2)
|
|
i = 4;
|
|
|
|
++i;
|
|
}
|
|
`
|
|
|
|
بدلا من:
|
|
|
|
`for (int i = 1; i <= 5; i++)
|
|
{
|
|
if (i == 2)
|
|
{
|
|
i = 4;
|
|
}
|
|
// Do work
|
|
}
|
|
`
|
|
|
|
## أعلن الثوابت وأنواع في الجزء العلوي
|
|
|
|
عادة ما يتم الإعلان عنها بعد المكتبات ، وهذا يجعلها أكثر سهولة وقراءة أسهل. بالنسبة للمتغيرات المحلية ، يحدث الأمر نفسه ، وتعلن عنه في الأعلى (يقوم الآخرون بإعلانه بشكل أكبر في وقت لاحق من أجل توفير الذاكرة انظر: [cplusplus.com](http://www.cplusplus.com/forum/general/33612/)
|
|
|
|
## استخدم وظيفة إرجاع واحدة فقط في النهاية
|
|
|
|
وكما قلنا من قبل ، فإننا نميل إلى إدخال مدخل وخروج واحد فقط لجعل التدفق أكثر وضوحًا.
|
|
|
|
## استخدم الأقواس المتعرجة حتى عند كتابة إحدى الخطوط
|
|
|
|
سيساعدك جعلها بشكل منتظم على القيام بها بشكل أسرع وفي حالة رغبتك في تغيير الشفرة في المستقبل ، ستتمكن من القيام بذلك دون قلق.
|
|
|
|
بدلا من:
|
|
|
|
`for (int i = 1; i <= 5; i++)
|
|
//CODE
|
|
`
|
|
|
|
فعل:
|
|
|
|
`for (int i = 1; i <= 5; i++)
|
|
{
|
|
//CODE
|
|
}
|
|
`
|
|
|
|
## توصيات أخرى
|
|
|
|
* #### استخدمه عندما تعرف عدد التكرارات ، بينما تفعل عندما لا تفعل ذلك.
|
|
|
|
* #### استخدم const ، مررًا حسب القيمة / المرجع عندما يكون مناسبًا. هذا سوف يساعد في توفير الذاكرة.
|
|
|
|
* \#### كتابة const في أحرف استهلالية ، أنواع البيانات تبدأ بـ T والمتغيرات في الحالة الصغيرة.
|
|
|
|
|
|
`const int MAX= 100; //Constant
|
|
typedef int TVector[MAX]; //Data type
|
|
TVector vector; //Vector
|
|
` |