JavaRush /Java blogi /Random-UZ /Robert Martin, toza kod. Ishlab chiquvchilar uchun "kung ...
Artem Murk
Daraja
Днепр

Robert Martin, toza kod. Ishlab chiquvchilar uchun "kung fu kodi" kitobining sharhi

Guruhda nashr etilgan
Salom Javarasheviliklar! Ushbu maqola Robert Martinning "Toza kod" kitobining sharhidir. Biz birgalikda kodingizni yaxshilash va optimallashtirish yo'llarini ko'rib chiqamiz va oxirida sizni kichik, ammo qiziqarli vazifa kutmoqda.
Robert Martin tomonidan "Toza kod".  Ishlab chiquvchilar uchun "kung fu kodi" kitobining sharhi - 1
Har kuni biz sizning kod muharriringizni ochganimizda, biz ko'plab sinflar, funktsiyalar va o'zgaruvchilarga duch kelamiz. Eng yaxshi variant, agar bu sizning kodingiz noldan yozilgan bo'lsa, bir marta yozilgan bo'lsa, unda bir nechta qatorlar mavjud bo'lsa, siz u bilan yolg'iz ishlayapsiz, hech qanday tahrir va mijoz tomonidan qo'shimcha yordam yo'q. LEKIN! Amaliyot shuni ko'rsatadiki, ha, bu sodir bo'lmasligini o'zingiz tushunasiz deb o'ylayman. Asosan, biz qandaydir tarzda jamoamiz a'zolari bilan muloqot qilishimiz, "Hindu" kodini saqlashimiz va mahsulotlarni millionlab qatorlarga ajratishimiz kerak. Men treningdagi hamkasblarimdan shunday javoblarni tez-tez eshitganman: "Ushbu kod men tomonidan yozilgan va men uni hech kimga ko'rsatmoqchi emasman", lekin bunday kod bo'yicha yordam so'rovlarini ko'rganimda, bu juda uzoq davom etadi. vaqt (ba'zan haqiqatan ham uzoq vaqt) o'rganish va tushunish uchun odam menga nimani aytmoqchi edi, men hatto "o'chirish va qayta yozish" demoqchiman! Sizga yordam berishni xohlaydigan odamlarning vaqtini va kuchini qadrlang, to'g'ri yozing va agar qanday qilishni bilmasangiz, o'rganish hech qachon kech emas. Robert Martinning kitobi Java tilidagi ko'plab misollarni o'z ichiga olganligi bilan bu formatdagi kitoblar orasida ajralib turadi. Bu men tomondan biroz fanatik gap bo'lishi mumkin, lekin u OOP uslubida, ya'ni qismlar va bo'limlarni yozishda yozilgan. Tushunish va o'qish oson, kitobni yo'lda yoki kechqurun yotishdan oldin o'qish oson. Toza kod 3 qismga bo'lingan. Birinchi qismda bizdan kitobning nazariyasi bilan tanishish, dizayn naqshlari va yaxshi xulq-atvor qoidalari bilan tanishish taklif etiladi. Ikkinchi qism bizni refaktoring va yozishni mashq qilishga taklif qiladi, uchinchi qism esa misollardagi "hidlar" kodining yakuniy xulosasi. Xo'sh, muallif sizga asosan Java Core haqida ma'lumot kerak bo'ladigan ko'plab mavzularga to'xtalib o'tdi, ammo JUnit Unit Tests, Log4j Logging, dizayndagi eng oddiy naqshlarni bilishga bag'ishlangan bo'limlar ham mavjud (lekin yuqorida aytganimdek, ular yo'q. ularning ko'pchiligi va tushunarsiz narsalarni muvaffaqiyatli google-da qidirish mumkin, ha va uni JavaRush kursida tahlil qilish mumkin). Kitobning barcha boblari bir-biriga bog'liq emas, siz o'zingiz yoqtirgan bobdan muvaffaqiyatli o'qishni boshlashingiz mumkin. Kitobdan olgan asosiy fikrlarimning qisqacha mazmuni. Men sizning sharhlaringiz uchun minnatdor bo'lardim, ularda siz ushbu bayonotlar haqida o'z qarashlaringizni baham ko'rishingiz mumkin.

1. Izohlar == yomon.

Ko'pgina hollarda, sharhlar biz noto'g'ri kodimizni yashirishga harakat qiladigan tayoqchalardir. Va ba'zi hollarda, agar doimiy kodni qayta ishlash mavjud bo'lsa, ular usullar yoki o'zgaruvchilarning maqsadi haqida ham yolg'on gapirishadi.

2. Sharhlangan kod, o'lik kod.

Ilovangizda ushbu kod qismlarini qoldirish axlatga tengdir. Ishlatilmagan kod vaqt o'tishi bilan to'planadi va ilovangizning tozaligiga xalaqit beradi, vaqti-vaqti bilan bunday modullar uchun kodni tekshiring.

3. Usullar, sinflar va o'zgaruvchilar sarlavhalari.

Ushbu mavzuni muhokama qilish uchun alohida maqolalarga arziydi. Dangasa bo'lmang va ularning maqsadi haqida gapiradigan nomlarni yozing. Imlo sarlavhalarida ba'zi standartlarni bilib oling. Ushbu mavzu batafsil o'rganish uchun "bo'lishi kerak".

4. Har bir usul va o‘zgaruvchi sinf ierarxiyasida o‘z o‘rniga ega.

Odatda, sinf o'zgaruvchilari va usullari (statik va statik bo'lmagan), konstruktor, ichki va ichki sinflar va raqamlarga ega bo'lishi mumkin. Muxtasar qilib aytganda, juda ko'p ma'lumotlar mavjud va har bir kishining sinfdagi o'rnini aniqlash kerak. Agar siz java asosiy sinflarini ko'rib chiqsangiz, strukturaning aniq tuzilganligini ko'rasiz, biz har bir qismni o'z o'rnida ko'rishimiz mumkin, albatta sizning loyihalaringizda u loyiha doirasida o'zgarishi mumkin, lekin har bir sinfda emas. Men o'zim uchun quyidagi qurilish tuzilmasini belgilab qo'ydim: Sinf boshida menda statik o'zgaruvchilar, keyin ob'ekt o'zgaruvchilari + Enums mavjud bo'lsa. O'zgaruvchilardan keyin men sinf konstruktorlarini aniqlayman. Keyin sinf bilan ishlash usullarini yozaman. Usullardan keyin men getters va setterlarni yozaman. Va oxirida menda ichki darslar bor. Siz mening tuzilishimdan foydalanishingiz yoki sharhlarda o'zingizni yozishingiz mumkin.

5. Usullarni abstraksiyalash darajalari.

Men uchun bu №1 kashfiyot edi. Har bir usul faqat bitta abstraktsiya darajasidagi operatorlarni o'z ichiga oladi. Ko'p darajali operatsiyalarni bir-biriga aralashtirmaslik kerak.

6. Xatolarni hal qilish.

Belgilangan yoki Tekshirilmagan istisnolar, qaysi loyihada foydalanish yaxshiroq (siz nima deb o'ylaysiz?, sharhlar yozing)? Men tekshirilganlar tarafdoriman, lekin kitob Tekshirilmagan Istisnolarga tashqaridan qarashga yordam beradi. Haqiqatan ham, belgilanmagan Istisno usul imzosini buzmaydi, ayniqsa istisnolar bir vaqtning o'zida bir nechta qatlamlarni "teshilishini" hisobga olsak. Eng kichik o'zgarishning noqulayligi uni qo'lga olishdan oldin barcha usullar zanjirini qayta belgilashga olib keladi, bu ko'p hollarda rivojlanish uchun juda noqulay.

7. Kodni formatlash.

To'g'ri formatlangan kod nafaqat aniq, balki juda o'qilishi mumkin. Siz darhol qavslar va ichidagi harakatlar haqida tasavvurga ega bo'lasiz. If, else konstruksiyalaridagi shartlar misolidan foydalanib, siz hamma narsani bir qatorga yozmasligingiz kerak, uzoq zanjirlarni siljitish yaxshiroqdir.

8. Shartdagi inkorlar.

Sharoitlarda rad etishdan qochishga harakat qiling, bu ko'proq psixologik omil, bizning miyamiz rad etishni yaxshi qabul qilmaydi va ha! ifoda oldin sezilmasligi mumkin. Misol uchun, agar (!condition.isTrue) usulini qayta yozish yaxshiroq bo'lsa, inkor qilish, bu kabi (condition.isFalse) buni ancha osonlashtiradi.

9. Funksiyalar bitta amalni bajarishi kerak.

Agar sizning usulingiz ko'p operatsiyalarni bajarsa, ularni bitta operatsiya usullariga ajrating. Ushbu usullarni qo'llab-quvvatlash juda oson, sinovdan o'tkazish oson va agar kerak bo'lsa, almashtiriladi yoki olib tashlanadi.

10. O'zingizni takrorlamang.

DRY kodini takrorlamang (o'zingizni takrorlamang). Bu sizning kodingizni sezilarli darajada kamaytiradigan asosiy qoidalardan biridir, uni yodda tuting. Barcha takrorlangan kod qismlarini alohida funktsiyaga qo'yishga harakat qiling. Albatta, biz DRY, KISS(Keep it simple Stupid), SOLID , YAGNI haqida ko'proq gapirishimiz mumkin . Ushbu atamalar tushunish va dizayn uchun zarurdir. Ular alohida maqolaga arziydi, ehtimol men ular haqida yana yozaman, chunki bu maqola "Toza kod" kitobini ko'rib chiqishga bag'ishlangan.
Robert Martin tomonidan "Toza kod".  Ishlab chiquvchilar uchun "kung fu kodi" kitobining sharhi - 2
Va'da qilinganidek, siz uchun kichik va oson vazifa. Dastur berilgan ma'lumotlar asosida semirish indeksini hisoblashi kerak. Izohlarda koddagi xatolar va tuzatishlar sonini yozing. P.S. Kod ishlaydi va to'g'ri ishlatilsa, o'z vazifasini bajaradi.
//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;
    }
}
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION