تقريبا نص سكان شبكات الإنترنت منتظرين شرح بالعربى لكورس كلين كوود باللغة العربية واليوم ستكون ترجمة عربية لكتاب Clean Code الشهير للكاتب Robert Cecil Martin المعروف ايضا بـ Uncle Bob
الكورس ده عايز يقولك في سببين يخلوك تقرا الكتاب دا ا هو انك بالفعل مبرمج او عاوز تبقي مبرمج شاطر
You are reading this book for two reasons.
First, you are a programmer.
Second, you want to be a better programmer
معلومات هامة حول الكورس
اذا كنت تريد ان تكون سريعا وان تجعل كتابة الكود سهلة اجعله سهل القراءة.
اتبع قاعدة فتى الكشافة: اترك المكان انظف مما وجدته عليه.
اختر اسماء ذات دلالة:اسماء تكشف الغرض من المسمى (class, function, variable)
اجعل اسماء الـ objects, classes جمل اسمية او اسماء.
اجعل اسماء الـ Methods افعال او جمل فعلية.
اتبع نمط تسمية موحد naming convention.
اتبع تنسيق (format) موحد لـ ( indentations, whitespaces, parentheses, new lines, grouping ), انا افضل استخدام اداة لذلك مثل Visual Studio Format, Clang Format.
يفضل استخدام الـ Polymorphisms على if/else, switch/case لانها تقلل من التفرع branching بالكود بشكل كبير.
تجنب التكرار (duplication) do not repeat yourself (التكرار موطن الكثير من الشرور)
يفضل استخدام الـ exceptions على ارجاع قيم تدل على نوع الخطأ الحاصل.
غلف سلوك try/catch في functions لكي لا تشوش على هيكلية الكود الاساسية.
اتبع قواعد Kent Beck الاربع للتصميم البسيط:شغل جميع الـ tests
تخلص من التكرار.
عبر عن المقصود اثناء البرمجة ( classes/functions صغيرة, اسماء ذات دلالة, اتبع المعايير, اكتب tests )
قلل من عدد الـ classes/methods لا تعارض مع النقطة السابقة فليس كل class يحتاج لـ interface وليس دائما كتابة data class افضل من object class.
Function Writingالـ Funstions يجب ان تقوم بمهمة واحدة فقط وفقط واحدة.
قلل من عدد الـ parameters الخاصة بـ function قدر المستطاع.
لا تمرر او ترجع null.
Class Designقم باخفاء الـ internal states واجعل فقط الـ methods قالبة للوصول الخارجي.
في الانظمة التي تميل الى اضافة انماط معطيات data types اكثر من اضافة functions يفضل استخدام الـ OOP بحيث يمكن للـ class ان يحتوي على functions تقوم بعمليات على المعطيات الخاصة بها, أما في الانظمة التي تميل الى اضافة functions اكثر من اضافة انماط معطيات data types فيفضل استخدام classes فقط للمعطيات دون اي عمليات عليها ومن ثم عمليات (functions) على تلك data classes .
Law of Demeter للتقليل من الارتباط بين الوحدات بحيث كل وحدة تتصل بالوحدات التي لها اتصال المباشر بها فقط.
يجب اتباع مبدأ Single Responsibility في تصميم الـ class.
من الافضل رفع درجة الـ cohesion في الـ class (زد من عدد متحولات الـ class المستخدمة في الـ methods الخاصة به), الكتاب ايضا يشير الى ان تحقيق اعلى درجة من الـ cohesion لايمكن الوصول لها ولا ينصح بذلك.
يجب اتباع مبدأ Open-Close Principle.
يجب اتباع مبدأ Separation of Concerns في التصميم بشكل عام عن طريق استخدام بعض التقنيات مثل استخدام الـ design patterns و dependency injection.
Commentsلا تستخدم التعليقات لشرح كود معقد, الكود يجب ان يشرح نفسه, التعليقات تكون لـ:شرح بعض المظاهر التقنية.
شرح الـ returned value
TODO Comments
شرح بعض اجزاء الكود الهامة التي لا تبدو كذلك.
احذف الكود غير المستخدم ولا تعمل له فقط comment out .
Third-Party Packagesاستخدم thrid-party interfaces فقط داخليا.
تغليف thrid-party libs افضل من السماحية بالوصول المباشر لها للتقليل من الاعتماد عليها.
قم بكتابة tests لتلك thrid-party libs.
Testsالـ tests مهمة بأهمية المشروع نفسه, اهمال الـ tests يسبب فشل المشروع.
كود الـ test يجب ان يكون بنظافة كود المشروع.
كل test يجب ان يختبر مفهوم واحد فقط.
قلل من الـ asserts في الـ test.
كلما زادت درجة تغطية الـ tests ازداد الشعور بالامان.
الـ tests يجب ان تكون سريعة, مستقلة, قابلة للتكرار, سهلة التقييم (نجاح/فشل).
Concurrencyافصل الكود الخاص بالـ concurrency عن بقية الكود.
استخدم تقنيات اللغة قبل تطوير خاصتك.
اجعل القطاعات المتزامنة صغيرة.
فكر بشروط التوقيف مبكرا واجعلها تعمل.
اختبر الكود الخاص بالـ threads:اعتبر الاخطاء التي لا يمكن ان تحدث في الكود غير الحاوي على threads كأخطاء محتملة في الـ threads.
اجعل الكود غير الحاوي على threads يعمل مسبقا.
اجعل الكود الـ threads pluggable.
اجعل الكود الـ threads قابل للتعديل.
شغل threads اكثر من عدد المعالجات المتوفرة.
شغل threads على اكثر من منصة.
حاول تعمد انتاج الاخطاء.
اتبع قاعدة فتى الكشافة: اترك المكان انظف مما وجدته عليه.
اختر اسماء ذات دلالة:اسماء تكشف الغرض من المسمى (class, function, variable)
اجعل اسماء الـ objects, classes جمل اسمية او اسماء.
اجعل اسماء الـ Methods افعال او جمل فعلية.
اتبع نمط تسمية موحد naming convention.
اتبع تنسيق (format) موحد لـ ( indentations, whitespaces, parentheses, new lines, grouping ), انا افضل استخدام اداة لذلك مثل Visual Studio Format, Clang Format.
يفضل استخدام الـ Polymorphisms على if/else, switch/case لانها تقلل من التفرع branching بالكود بشكل كبير.
تجنب التكرار (duplication) do not repeat yourself (التكرار موطن الكثير من الشرور)
يفضل استخدام الـ exceptions على ارجاع قيم تدل على نوع الخطأ الحاصل.
غلف سلوك try/catch في functions لكي لا تشوش على هيكلية الكود الاساسية.
اتبع قواعد Kent Beck الاربع للتصميم البسيط:شغل جميع الـ tests
تخلص من التكرار.
عبر عن المقصود اثناء البرمجة ( classes/functions صغيرة, اسماء ذات دلالة, اتبع المعايير, اكتب tests )
قلل من عدد الـ classes/methods لا تعارض مع النقطة السابقة فليس كل class يحتاج لـ interface وليس دائما كتابة data class افضل من object class.
Function Writingالـ Funstions يجب ان تقوم بمهمة واحدة فقط وفقط واحدة.
قلل من عدد الـ parameters الخاصة بـ function قدر المستطاع.
لا تمرر او ترجع null.
Class Designقم باخفاء الـ internal states واجعل فقط الـ methods قالبة للوصول الخارجي.
في الانظمة التي تميل الى اضافة انماط معطيات data types اكثر من اضافة functions يفضل استخدام الـ OOP بحيث يمكن للـ class ان يحتوي على functions تقوم بعمليات على المعطيات الخاصة بها, أما في الانظمة التي تميل الى اضافة functions اكثر من اضافة انماط معطيات data types فيفضل استخدام classes فقط للمعطيات دون اي عمليات عليها ومن ثم عمليات (functions) على تلك data classes .
Law of Demeter للتقليل من الارتباط بين الوحدات بحيث كل وحدة تتصل بالوحدات التي لها اتصال المباشر بها فقط.
يجب اتباع مبدأ Single Responsibility في تصميم الـ class.
من الافضل رفع درجة الـ cohesion في الـ class (زد من عدد متحولات الـ class المستخدمة في الـ methods الخاصة به), الكتاب ايضا يشير الى ان تحقيق اعلى درجة من الـ cohesion لايمكن الوصول لها ولا ينصح بذلك.
يجب اتباع مبدأ Open-Close Principle.
يجب اتباع مبدأ Separation of Concerns في التصميم بشكل عام عن طريق استخدام بعض التقنيات مثل استخدام الـ design patterns و dependency injection.
Commentsلا تستخدم التعليقات لشرح كود معقد, الكود يجب ان يشرح نفسه, التعليقات تكون لـ:شرح بعض المظاهر التقنية.
شرح الـ returned value
TODO Comments
شرح بعض اجزاء الكود الهامة التي لا تبدو كذلك.
احذف الكود غير المستخدم ولا تعمل له فقط comment out .
Third-Party Packagesاستخدم thrid-party interfaces فقط داخليا.
تغليف thrid-party libs افضل من السماحية بالوصول المباشر لها للتقليل من الاعتماد عليها.
قم بكتابة tests لتلك thrid-party libs.
Testsالـ tests مهمة بأهمية المشروع نفسه, اهمال الـ tests يسبب فشل المشروع.
كود الـ test يجب ان يكون بنظافة كود المشروع.
كل test يجب ان يختبر مفهوم واحد فقط.
قلل من الـ asserts في الـ test.
كلما زادت درجة تغطية الـ tests ازداد الشعور بالامان.
الـ tests يجب ان تكون سريعة, مستقلة, قابلة للتكرار, سهلة التقييم (نجاح/فشل).
Concurrencyافصل الكود الخاص بالـ concurrency عن بقية الكود.
استخدم تقنيات اللغة قبل تطوير خاصتك.
اجعل القطاعات المتزامنة صغيرة.
فكر بشروط التوقيف مبكرا واجعلها تعمل.
اختبر الكود الخاص بالـ threads:اعتبر الاخطاء التي لا يمكن ان تحدث في الكود غير الحاوي على threads كأخطاء محتملة في الـ threads.
اجعل الكود غير الحاوي على threads يعمل مسبقا.
اجعل الكود الـ threads pluggable.
اجعل الكود الـ threads قابل للتعديل.
شغل threads اكثر من عدد المعالجات المتوفرة.
شغل threads على اكثر من منصة.
حاول تعمد انتاج الاخطاء.