JavaRush /Блоги Java /Random-TG /Роберт Мартин, Кодекси тоза. Баррасии китоб дар бораи "ко...
Artem Murk
Сатҳи
Днепр

Роберт Мартин, Кодекси тоза. Баррасии китоб дар бораи "кодҳои кунг-фу" барои таҳиягарон

Дар гурӯҳ нашр шудааст
Салом Ҷаварашевиҳо! Ин мақола баррасии китоби "Кодекси тоза" аз ҷониби Роберт Мартин мебошад. Якҷоя мо роҳҳои такмил ва оптимизатсияи codeи шуморо дида мебароем ва дар охир вазифаи хурд, вале ҷолиб шуморо интизор аст.
"Кодекси тоза" аз ҷониби Роберт Мартин.  Баррасии китоб дар бораи "codeҳои кунг-фу" барои таҳиягарон - 1
Ҳар рӯз, вақте ки мо муҳаррири codeи шуморо мекушоем, мо бо бисёр синфҳо, функсияҳо ва тағирёбандаҳо дучор мешавем. Варианти беҳтарин ин аст, ки агар ин рамзи шумо аз сифр навишта шуда, як маротиба навишта шуда бошад, дар он сатрҳо каманд, шумо танҳо дар болои он кор карда истодаед, ягон таҳрир ва дастгирии минбаъдаи муштарӣ вуҷуд надорад. ВАЛЕ! Тавре ки амалия нишон медиҳад, ҳа, ман фикр мекунам, ки шумо худатон мефаҳмед, ки ин тавр намешавад. Асосан, мо бояд бо кадом роҳе бо аъзоёни дастаи худ муошират кунем, рамзи "ҳинду" -ро нигоҳ дорем ва маҳсулотро ба миллионҳо сатр тақсим кунем. Ман борҳо чунин ҷавобҳоро аз ҳамкорони омӯзишии худ шунидаам: "Ин code аз ҷониби ман навишта шудааст ва ман онро ба касе нишон намедиҳам", аммо вақте ки ман дархостҳо оид ба Кӯмакро бо чунин code мебинам, ин хеле тӯл мекашад. вақт (баъзан дар ҳақиқат муддати тӯлонӣ) барои омӯхтан ва фаҳмидани он шахс ба ман чӣ гуфтан мехост, ман ҳатто мехоҳам бигӯям, ки "тоза кунед ва дубора нависед"! Вақт ва қувваи одамоне, ки мехоҳанд ба шумо кӯмак расонанд, қадр кунед, дуруст нависед ва агар шумо намедонед, ки чӣ тавр, барои омӯхтан ҳеҷ гоҳ дер нест. Китоби Роберт Мартин дар байни китобҳои ин формат бо он фарқ мекунад, ки дар он намунаҳои зиёде дар Java мавҷуд аст. Ин метавонад як изҳороти мутаассибона аз ҷониби ман бошад, аммо он бо услуби OOP, яъне дар навиштани қисмҳо ва бахшҳо навишта шудааст. Фаҳмидани ва хондан осон аст, китобро дар роҳ ё шом пеш аз хоб хондан осон аст. Кодекси тоза ба 3 қисм тақсим мешавад. Дар қисми аввал аз мо хоҳиш карда мешавад, ки назарияи китобро аз назар гузаронем, дар бораи намунаҳои тарроҳӣ ва қоидаҳои одоби хуб омӯзем. Қисми дуюм моро ба машқҳои рефакторинг ва навиштан даъват мекунад ва қисми сеюм хулосаи ниҳоии рамзи "бӯйҳо" дар мисолҳо мебошад. Хуб, муаллиф ба мавзӯъҳои зиёде дахл кардааст, ки барои онҳо ба шумо асосан дониши Java Core лозим аст, аммо инчунин бахшҳое мавҷуданд, ки ба тестҳои JUnit Unit, Log4j Logging, дониши соддатарин намунаҳои тарроҳӣ бахшида шудаанд (аммо тавре ки ман дар боло гуфтам, вуҷуд надоранд. бисёре аз онҳо ва ҳама чизҳои нофаҳмо метавонанд бомуваффақият Google-ро ҷустуҷӯ кунанд, ҳа ва онро дар курси JavaRush таҳлил кунед). Ҳамаи бобҳои китоб бо ҳам алоқаманд нестанд; шумо метавонед бо муваффақият аз боби ба шумо маъқул хондан оғоз кунед. Хулосаи мухтасари ғояҳои асосие, ки ман аз китоб гирифтам. Ман барои шарҳҳои шумо дар бораи онҳо миннатдор хоҳам буд, ки дар он шумо метавонед назари худро дар бораи ин изҳорот мубодила кунед.

1. Шарҳҳо == бад.

Дар аксари мавридҳо, шарҳҳо асобағлобе мебошанд, ки мо кӯшиш мекунем рамзи бади худро пӯшонем. Ва дар баъзе ҳолатҳо, онҳо инчунин дар бораи ҳадафи усулҳо ё тағирёбандаҳо дурӯғ мегӯянд, агар рефакторинги доимии code мавҷуд бошад.

2. Рамзи шарҳ, рамзи мурда.

Дар аризаи худ гузоштани ин порчаҳои code ба ахлот баробар аст. Рамзи истифоданашуда бо мурури замон ҷамъ мешавад ва ба тозагии замимаи шумо халал мерасонад, вақт аз вақт рамзи чунин модулҳоро тафтиш кунед.

3. Сарлавҳаҳои усулҳо, синфҳо ва тағирёбандаҳо.

Барои баррасии ин мавзӯъ мақолаҳои алоҳида меарзанд. Танбал нашавед ва номҳое нависед, ки метавонанд дар бораи ҳадафи онҳо нақл кунанд. Баъзе стандартҳоро дар унвонҳои имло омӯзед. Ин мавзӯъ барои омӯзиши муфассал "Бояд дошта бошад" аст.

4. Ҳар як усул ва тағирёбанда дар иерархияи синф ҷои худро дорад.

Одатан, синф метавонад дорои тағирёбандаҳо ва усулҳо (статикӣ ва ғайристатикӣ), созанда, синфҳои дохилӣ ва дохилӣ ва рақамҳо бошад. Хулоса, маълумоти зиёде мавҷуд аст ва бояд ҷои ҳамаро дар синф муайян кард. Агар шумо ба синфҳои асосии java назар кунед, шумо хоҳед дид, ки сохтор ба таври возеҳ сохтор шудааст, мо ҳар як қисмро дар ҷои худ мебинем, албатта дар лоиҳаҳои шумо он метавонад дар дохor лоиҳа тағир ёбад, аммо на дар ҳар як синф. Барои худам, ман сохтори сохтмонии зеринро муайян кардам: Дар ибтидои синф ман тағирёбандаҳои статикӣ дорам, пас тағирёбандаҳои an objectӣ + Enums, агар онҳо вуҷуд дошта бошанд. Пас аз тағирёбандаҳо ман конструкторҳои синфро муайян мекунам. Сипас ман усулҳои кор бо синфро менависам. Пас аз усулҳо ман гетерҳо ва сетерҳоро менависам. Ва дар ниҳоят ман дарсҳои дохилӣ дорам. Шумо метавонед сохтори маро истифода баред ё худро дар шарҳҳо нависед.

5. Дараљањои абстраксияи усулњо.

Барои ман ин кашфиёти №1 буд. Ҳар як усул операторҳоро дар як сатҳи абстрактӣ дар бар мегирад. Шумо набояд амалиёти бисёрсатҳиро якҷоя кунед.

6. Муносибати хатогиҳо.

Истисноҳои санҷидашуда ё тафтишнашуда, ки дар лоиҳа истифода бурдан беҳтар аст (ба фикри шумо?, шарҳҳо нависед)? Ман тарафдори санҷидашуда ҳастам, аммо китоб барои дидани Истисноҳои Санҷиданашуда аз берун кӯмак мекунад. Дарвоқеъ, Истиснои тафтишнашуда имзои методро вайрон намекунад, алахусус бо назардошти он, ки истисноҳо якбора якчанд қабатро "суруд мекунанд". Нороҳатии тағироти хурдтарин боиси аз нав муайян кардани тамоми силсилаи усулҳо пеш аз гирифтани он мегардад, ки дар бисёр ҳолатҳо барои рушд ниҳоят номувофиқ аст.

7. Форматсозии code.

Рамзи дуруст форматонидашуда на танҳо равшан, балки хеле хондашаванда аст. Шумо фавран дар бораи қавс ва амалҳои дохor он тасаввурот пайдо мекунед. Бо истифода аз мисоли шартҳо дар if, else constructs, шумо набояд ҳама чизро дар як сатр нависед, беҳтар аст, ки занҷирҳои дарозро интиқол диҳед.

8. Инкоркунихо дар холат.

Кӯшиш кунед, ки дар шароит аз инкор канорагирӣ кунед, ин бештар омor равонӣ аст, майнаи мо инкорро хуб дарк намекунад ва ҳа! пеш аз он ки ифодаро пайхас кардан мумкин нест. Масалан, рад кардан, агар (!condition.isTrue) аз нав навиштани усул беҳтар бошад, ин корро хеле осонтар мекунад (condition.isFalse)

9. Функсияҳо бояд як амалро иҷро кунанд.

Агар усули шумо амалиётҳои зиёдеро иҷро кунад, пас онҳоро ба усулҳои якамал тақсим кунед. Ин усулҳоро дастгирӣ кардан хеле осон аст, озмоиш кардан осон аст ва дар ҳолати зарурӣ иваз ё хориҷ карда мешаванд.

10. Худро такрор накунед.

Рамзи DRY-ро такрор накунед (худро такрор накунед). Ин яке аз қоидаҳои асосӣ аст, ки рамзи шуморо ба таври назаррас коҳиш медиҳад, онро дар хотир нигоҳ доред. Кӯшиш кунед, ки ҳамаи қисмҳои codeи такрории худро ба вазифаи алоҳида гузоред. Албатта, мо метавонем бештар дар бораи DRY, KISS (Keep it simple Stupid), SOLID , YAGNI сӯҳбат кунем. Ин истилоҳот барои фаҳмиш ва тарҳрезӣ муҳиманд. Онҳо ба як мақолаи алоҳида меарзанд, шояд ман дар бораи онҳо боз менависам, зеро ин мақола ба баррасии китоби "Кодекси тоза" бахшида шудааст.
"Кодекси тоза" аз ҷониби Роберт Мартин.  Баррасии китоб дар бораи "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