JavaRush /Java блогы /Random-KK /Роберт Мартин, Таза код. Әзірлеушілер үшін «кунг-фу коды»...
Artem Murk
Деңгей
Днепр

Роберт Мартин, Таза код. Әзірлеушілер үшін «кунг-фу коды» туралы кітапқа шолу

Топта жарияланған
Сәлеметсіздер ме Яравашевтіктер! Бұл мақала Роберт Мартиннің «Таза code» кітабына шолу. Біз бірге codeты жақсарту және оңтайландыру жолдарын қарастырамыз, соңында сізді шағын, бірақ қызықты тапсырма күтеді.
Роберт Мартиннің «Таза code».  Әзірлеушілер үшін «кунг-фу codeы» туралы кітапқа шолу - 1
Күн сайын, біз сіздің code редакторыңызды ашқанда, біз көптеген сыныптармен, функциялармен және айнымалылармен бетпе-бет келеміз. Ең жақсы нұсқа - егер бұл сіздің codeыңыз нөлден жазылған болса, бір рет жазылған болса, онда жолдар аз болса, сіз онымен жалғыз жұмыс істеп жатырсыз, ешқандай өңдеулер жоқ және тұтынушыдан қосымша қолдау көрсетілмейді. БІРАҚ! Тәжірибе көрсеткендей, иә, сіз мұның болмайтынын өзіңіз түсінесіз деп ойлаймын. Негізінде, біз қандай да бір түрде біздің топ мүшелерімен өзара әрекеттесуге, «индус» codeын сақтауға және өнімдерді миллиондаған жолдарға талдауға тура келеді. Тренингтегі әріптестерімнен: «Бұл codeты мен жаздым, мен оны ешкімге көрсетпеймін» деген жауаптарды жиі естідім, бірақ мұндай codeпен көмек сұрауын көргенде, бұл өте ұзақ уақыт алады. Уақыт (кейде шынымен ұзақ) тереңдеп, түсіну үшін Адам маған не айтқысы келді, мен тіпті «өшіру және қайта жазу» деп айтқым келеді! Сізге көмектескісі келетін адамдардың уақыты мен күш-қуатын бағалаңыз, дұрыс жазыңыз, ал егер қалай екенін білмесеңіз, үйренуге ешқашан кеш емес. Роберт Мартиннің кітабы осы форматтағы кітаптардың ішінде Java тіліндегі көптеген мысалдарды қамтитындығымен ерекшеленеді. Бұл менің тарапымнан аздап фанатикалық мәлімдеме болуы мүмкін, бірақ ол OOP стилінде, атап айтқанда бөліктер мен бөлімдерді жазуда жазылған. Түсіну және оқу оңай, кітапты жолда немесе кешке ұйықтар алдында оқу оңай. Таза code 3 бөлікке бөлінген. Бірінші бөлімде бізге кітаптың теориясынан өту, дизайн үлгілері мен әдептілік ережелерімен танысу ұсынылады. Екінші бөлім бізді рефакторинг пен жазуды жаттықтыруға шақырады, ал үшінші бөлім мысалдардағы «иіс» codeының соңғы қысқаша мазмұны болып табылады. Author сізге негізінен Java Core туралы білім қажет болатын көптеген тақырыптарды қозғады, бірақ сонымен қатар JUnit Unit Tests, Log4j Logging, дизайндағы қарапайым үлгілерді білуге ​​арналған бөлімдер бар (бірақ жоғарыда айтқанымдай, жоқ. олардың көпшілігі, және барлық түсініксіз нәрселерді сәтті Google іздеуге болады, иә және оны JavaRush курсында талдау). Кітаптың барлық тараулары бір-бірімен байланысты емес, сіз өзіңізге ұнаған тараудан сәтті оқуды бастай аласыз. Кітаптан алған негізгі ойлардың қысқаша мазмұны. Осы мәлімдемелер туралы өз көзқарасыңызбен бөлісе алатын олар туралы пікірлеріңізге ризамын.

1. Пікірлер == зұлымдық.

Көп жағдайда түсініктемелер біздің жаман codeымызды жабуға тырысатын балдақ болып табылады. Кейбір жағдайларда, егер codeты рефакторинг тұрақты болса, олар әдістердің немесе айнымалылардың мақсаты туралы өтірік айтады.

2. Түсініктеме берілген code, өлі code.

Бұл code бөліктерін қолданбаңызда қалдыру қоқыспен бірдей. Пайдаланылмаған code уақыт өте келе жинақталып, қолданбаңыздың тазалығына кедергі келтіреді, мұндай модульдердің codeын мезгіл-мезгіл тексеріп тұрыңыз.

3. Әдістердің, класстардың және айнымалылардың тақырыптары.

Бұл тақырыпты талқылау үшін бөлек мақалалар қажет. Жалқау болмаңыз және олардың мақсаты туралы айтатын атауларды жазыңыз. Емле тақырыптарындағы кейбір стандарттарды біліңіз. Бұл тақырып егжей-тегжейлі зерттеу үшін «болуы керек».

4. Әрбір әдіс пен айнымалының класс иерархиясында өз орны бар.

Әдетте сыныпта айнымалылар мен әдістер (статикалық және статикалық емес), конструктор, кірістірілген және ішкі сыныптар және сандар болуы мүмкін. Бір сөзбен айтқанда, ақпарат өте көп және әркімнің сыныптағы орнын анықтау керек. Егер сіз java негізгі сыныптарына қарасаңыз, құрылымның анық құрылымдалғанын көресіз, біз әрбір бөлікті өз орнында көре аламыз, әрине сіздің жобаларыңызда ол жоба ішінде өзгеруі мүмкін, бірақ әр сыныпта емес. Мен өзім үшін келесі құрылыс құрылымын анықтадым: Сыныптың басында менде статикалық айнымалылар бар, содан кейін an objectінің айнымалылары + бар болса Enums. Айнымалылардан кейін мен класс конструкторларын анықтаймын. Содан кейін сыныппен жұмыс істеу әдістерін жазамын. Әдістерден кейін мен алғыштар мен орнатушыларды жазамын. Соңында менде ішкі сабақтар бар. Сіз менің құрылымымды пайдалана аласыз немесе түсініктемелерде өзіңізді жаза аласыз.

5. Әдістерді абстракциялау деңгейлері.

Мен үшін бұл №1 жаңалық болды. Әрбір әдіс абстракцияның тек бір деңгейіндегі операторларды қамтиды. Көп деңгейлі операцияларды араластырмау керек.

6. Қателерді өңдеу.

Белгіленген немесе белгіленбеген ерекшеліктер, жобада қайсысын қолданған дұрыс (сіз қалай ойлайсыз?, түсініктеме жазыңыз)? Мен тексерілгенді жақтаймын, бірақ кітап Тексерілмеген ерекшеліктерге сырттан қарауға көмектеседі. Шынында да, құсбелгі қойылмаған Ерекшелік әдіс қолтаңбасын бұзбайды, әсіресе ерекшеліктер бірден бірнеше қабатты «тесетінін» ескере отырып. Ең кішкентай өзгерістің қолайсыздығы оны ұстауға дейін барлық әдістер тізбегін қайта анықтауға әкеледі, бұл көптеген жағдайларда даму үшін өте қолайсыз.

7. Кодты пішімдеу.

Дұрыс пішімделген code түсінікті ғана емес, сонымен қатар жоғары оқылатын. Сіз бірден жақшалар мен ішіндегі әрекеттер туралы түсінік аласыз. if, else конструкцияларындағы шарттарды мысалға ала отырып, барлығын бір жолға жазбау керек, ұзын тізбектерді жылжытқан дұрыс.

8. Шарттағы терістеулер.

Жағдайларда бас тартудан аулақ болуға тырысыңыз, бұл психологиялық фактор, біздің миымыз теріске шығаруды жақсы қабылдамайды, иә! алдында өрнек байқалмауы мүмкін. Мысалы, егер (!condition.isTrue) әдісті қайта жазу жақсырақ болса, теріске шығару оны осылайша жеңілдетеді (condition.isFalse)

9. Функциялар бір операцияны орындауы керек.

Егер сіздің әдісіңіз көптеген операцияларды орындаса, оларды бір операциялық әдістерге бөліңіз. Бұл әдістерді қолдау өте оңай, сынау оңай және қажет болған жағдайда ауыстырылады немесе жойылады.

10. Өзіңізді қайталамаңыз.

DRY codeын қайталамаңыз (өзіңізді қайталамаңыз). Бұл сіздің codeыңызды айтарлықтай азайтатын негізгі ережелердің бірі, оны есте сақтаңыз. Барлық қайталанатын code бөліктерін бөлек функцияға салып көріңіз. Әрине, біз DRY, KISS(Keep it simple Stupid), SOLID , YAGNI туралы көбірек айта аламыз . Бұл терминдер түсіну және дизайн үшін өте маңызды. Олар жеке мақалаға тұрарлық, мүмкін мен олар туралы тағы да жазатын шығармын, өйткені бұл мақала «Таза codeекс» кітабын шолуға арналған.
Роберт Мартиннің «Таза code».  Әзірлеушілерге арналған «кунг-фу codeы» кітабына шолу - 2
Уәде етілгендей, сізге шағын және оңай тапсырма. Бағдарлама берілген деректер негізінде семіздік индексін есептеуі керек. Түсініктемелерде codeтағы қателер мен түзетулер санын жазыңыз. P.S. Код жұмыс істейді және дұрыс пайдаланылған жағдайда өз функциясын орындайды.
//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