JavaRush /مدونة جافا /Random-AR /روبرت مارتن، الكود النظيف. مراجعة كتاب "كود الكونغ فو" لل...
Artem Murk
مستوى
Днепр

روبرت مارتن، الكود النظيف. مراجعة كتاب "كود الكونغ فو" للمطورين

نشرت في المجموعة
مرحبًا يا جافاراشيفيتس! هذه المقالة هي مراجعة لكتاب "الشفرة النظيفة" للكاتب روبرت مارتن. سننظر معًا في طرق لتحسين وتحسين التعليمات البرمجية الخاصة بك، وفي النهاية تنتظرك مهمة صغيرة ولكنها مثيرة للاهتمام.
"الرمز النظيف" لروبرت مارتن.  مراجعة كتاب "كود الكونغ فو" للمطورين - 1
كل يوم، عندما نفتح محرر التعليمات البرمجية الخاص بك، نواجه العديد من الفئات والوظائف والمتغيرات. الخيار الأفضل هو إذا كان هذا هو الكود الخاص بك مكتوبًا من الصفر، ومكتوبًا مرة واحدة، وهناك بضعة أسطر فيه، وأنت تعمل عليه بمفردك، ولا توجد تعديلات ولا مزيد من الدعم من العميل. لكن! كما تظهر الممارسة، نعم، أعتقد أنك تفهم أن هذا لا يحدث. في الأساس، سيتعين علينا التفاعل بطريقة أو بأخرى مع أعضاء فريقنا، والحفاظ على الكود "الهندوسي"، وتحليل المنتجات إلى ملايين الأسطر. لقد سمعت في كثير من الأحيان إجابات مثل هذه من زملائي في التدريب: "لقد كتبت هذا الرمز بواسطتي، ولن أعرضه لأي شخص"، ولكن عندما أرى طلبات للمساعدة في مثل هذا الرمز، يستغرق الأمر وقتًا طويلاً جدًا الوقت (أحيانًا وقت طويل حقًا) للتعمق وفهم ما الذي أراد الشخص أن يخبرني به، حتى أنني أريد أن أقول "امسح وأعد الكتابة مرة أخرى"! قدّر وقت وطاقة الأشخاص الذين يرغبون في مساعدتك، واكتب بشكل صحيح، وإذا كنت لا تعرف كيف، فلم يفت الأوان أبدًا للتعلم. يبرز كتاب روبرت مارتن بين الكتب بهذا التنسيق لأنه يحتوي على العديد من الأمثلة في جافا. قد يكون هذا تصريحًا متعصبًا بعض الشيء من جهتي، لكنه كتب بأسلوب OOP، أي في كتابة الأجزاء والأقسام. من السهل فهمه وقراءته، كما يسهل قراءته أثناء التنقل أو في المساء قبل النوم. الكود النظيف مقسم إلى 3 أجزاء. يطلب منا في الجزء الأول الخوض في نظرية الكتاب والتعرف على أنماط التصميم وقواعد الأخلاق الحميدة. الجزء الثاني يدعونا إلى ممارسة إعادة البناء والكتابة، والجزء الثالث هو الملخص النهائي للكود “الروائح” في الأمثلة. حسنًا، تطرق المؤلف إلى العديد من المواضيع التي ستحتاج فيها بشكل أساسي إلى معرفة Java Core، ولكن هناك أيضًا أقسام مخصصة لاختبارات وحدة JUnit، وتسجيل Log4j، ومعرفة أبسط الأنماط في التصميم (ولكن كما قلت أعلاه، لا يوجد يمكن البحث في Google بنجاح عن الكثير منها، وكل شيء غير مفهوم، نعم وتحليله في دورة JavaRush). جميع فصول الكتاب ليست مرتبطة ببعضها البعض، يمكنك البدء بالقراءة بنجاح من الفصل الذي تفضله. ملخص مختصر للأفكار الرئيسية التي التقطتها من الكتاب. سأكون ممتنًا لتعليقاتك عليها، والتي يمكنك من خلالها مشاركة رؤيتك الخاصة لهذه التصريحات.

1. التعليقات == الشر.

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

2. رمز التعليق، رمز ميت.

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

3. عناوين الأساليب والأصناف والمتغيرات.

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

4. كل طريقة ومتغير له مكانه الخاص في التسلسل الهرمي للفئة.

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

5. مستويات تجريد الأساليب.

بالنسبة لي كان هذا الاكتشاف رقم 1. تحتوي كل طريقة على عوامل تشغيل على مستوى واحد فقط من التجريد. لا يجب أن تخلط العمليات متعددة المستويات معًا.

6. معالجة الأخطاء.

الاستثناءات المحددة أو غير المحددة، أيهما أفضل للاستخدام في المشروع (ما رأيك؟، اكتب التعليقات)؟ أنا من مؤيدي التحقق، لكن الكتاب يساعد في إلقاء نظرة على الاستثناءات غير المحددة من الخارج. في الواقع، الاستثناء الذي لم يتم التحقق منه لا يشوه توقيع الطريقة، لا سيما بالنظر إلى أن الاستثناءات "تخترق" عدة طبقات في وقت واحد. يؤدي إزعاج أصغر تغيير إلى إعادة تعريف سلسلة الأساليب بأكملها قبل اللحاق بها، وهو أمر غير مريح للغاية للتطوير في كثير من الحالات.

7. تنسيق الكود.

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

8. النفي في الشرط.

حاول تجنب الإنكار في الظروف، فهذا عامل نفسي أكثر، فعقلنا لا يدرك الإنكار جيدًا، ونعم! قبل قد لا يكون لاحظت التعبير. على سبيل المثال، إلغاء ما إذا كان (! condition.isTrue) أفضل لإعادة كتابة الطريقة، سيجعل الأمر أسهل بكثير مثل هذا (condition.isFalse)

9. يجب أن تؤدي الوظائف عملية واحدة.

إذا كانت طريقتك تنفذ العديد من العمليات، فقم بتقسيمها إلى طرق عملية واحدة. من السهل جدًا دعم هذه الأساليب واختبارها واستبدالها أو إزالتها إذا لزم الأمر.

10. لا تكرر نفسك.

لا تكرر الكود DRY (لا تكرر نفسك). هذه إحدى القواعد الأساسية التي ستقلل من التعليمات البرمجية الخاصة بك بشكل كبير، ضعها في اعتبارك. حاول وضع جميع أجزاء التعليمات البرمجية المتكررة في وظيفة منفصلة. بالطبع، يمكننا التحدث كثيرًا عن DRY، وKISS (أبقِ الأمر بسيطًا غبيًا)، و SOLID ، وYAGNI. هذه المصطلحات ضرورية للفهم والتصميم. إنهم يستحقون مقالة منفصلة، ​​ربما سأكتب عنهم مرة أخرى، لأن هذه المقالة مخصصة لمراجعة كتاب "الرمز النظيف".
"الرمز النظيف" لروبرت مارتن.  مراجعة كتاب "كود الكونغ فو" للمطورين - 2
كما وعدتك، مهمة صغيرة وسهلة بالنسبة لك. يجب أن يقوم البرنامج بحساب مؤشر السمنة بناءً على البيانات المقدمة. اكتب في التعليقات عدد الأخطاء والإصلاحات في الكود. ملاحظة. الكود يعمل ويؤدي وظيفته إذا تم استخدامه بشكل صحيح.
//Weight in kg.
//Height in metres.
public class sample {
    public static void main (String[] args) {
        humanIMB humanIMB = new humanIMB(80,1.52);
        System.out.println(humanIMB.Result());
    }
}
class humanIMB {
    public double W; //Weight Human
    public double H; // Height Human
    private static double imb;
    public humanIMB(double w, double h) {
        W = w;
        H = h;
        imb = W / (H * H);
    }
    public double takeW() {
        return W;
    }
    public void putW(double w) {
        W = w;
        imb = W / (H * H);
    }
    public double takeH() {
        return H;
    }
    public void putH(double h) {
        H = h;
        imb = W / (H * H);
    }
    public static double takeImt() {
        return imb;
    }
    public static String Result() {
        String  string = null;
        if (imb >=18.5 & imb <25) {
            string ="Норма, ты в форме!";
        }
        if (imb >=25 & imb <30) {
            string ="Предожирение. Эй, поосторожнее с пирожными ";
        }
        if (imb >=30) {
            string ="Ожирение. SCHWEINE! Хватит жрать, иди на треню!";
        }
        if (imb <18.5) {
            string ="Дефицит массы тела. В модели решил переквалифицироваться?";
        }
        return string;
    }
}
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION