Veze, linkovi
Kompjuter biblioteka
Korpa
Recepti za čist kod

Preuzmite poglavlje   Preuzmite poglavlje

Programiranje Programiranje

Recepti za čist kod

Autor: Maksimilijano Kontijeri
Broj strana: 428
ISBN broj: 9788673105956
Izdavač: Kompjuter biblioteka Kompjuter biblioteka
Godina izdanja: 2023.
Kataloški broj: 572.

                 
Twitter   Facebook   Linkedin   Pinterest   Email
                 
         
   
Naruči ili rezerviši sa 40 % popusta
 
         
         
Cena: 2640 rsd Vi plaćate: 2000 rsd

10% dodatnog popusta za 2 ili više knjiga, osim knjiga koje su u pretplati i kompleta knjiga.

• Isporuka za 24 časa (osim za knjige u pretplati)
• Plaćanje kuriru

 

Često softverski inženjeri i arhitekte rade sa velikim, kompleksnim bazama koda koje treba da skaliraju i održavaju. U ovom priručniku, autor Maksimilijano Kontijeri vas vodi dalje od koncepta čistog koda pokazujući vam kako da identifikujete mogućnosti za poboljšanje i njihov uticaj na produkcijski kod. Kada je reč o pouzdanosti i evoluciji sistema, ove tehnike pružaju prednosti koje se isplate vremenom.

Koristeći stvarne primere u JavaScript-u, PHP-u, Javi, Pythonu i mnogim drugim programskim jezicima, ovaj priručnik pruža proverene recepte koji vam pomažu da skalirate i održavate velike sisteme. Svaki odeljak pokriva osnovne koncepte uključujući čitljivost, spregu, testabilnost i proširivost, kao i mirise koda - simptome problema koji zahtevaju posebnu pažnju - i recepte za rešavanje istih.

Kako napredujete kroz ovu knjigu, recepti za refaktorisanje i raznovrsnost mirisa koda rastu u složenosti. Vi ćete:

  • Razumeti prednosti čistog koda i naučiti kako da detektujete mirise koda
  • Naučiti tehniku refaktorisanja korak po korak
  • Dobiti ilustrativne primere koda u nekoliko savremenih programskih jezika
  • Dobiti sveobuhvatan katalog uobičajenih mirisa koda, njihovih uticaja i mogućih rešenja
  • Koristiti kod koji je direktan, favorizujući čitljivost i učenje

Iz predgovora

Kod je svuda, od razvoja veb aplikacija do pametnih ugovora, ugradnih sistema, blokčejnova, softverskog sistema na brodu teleskopa Džejms Veb, hirurških robota i mnogih drugih domena. Softver efektivno preuzima svet, i trenutno smo svedoci uspona profesionalnih alata za generisanje koda veštačkom inteligencijom. To znači da je čist kod važniji nego ikada. Dok nastavljate da radite na sve većim privatnim ili otvorenim kod bazama, čist kod je način da ih održite svežim i spremnim za evoluciju.

Kome je knjiga namenjena

Ova knjiga vam pomaže da identifikujete uobičajene probleme u kodu i ističe posledice tih problema. Konačno vam pomaže da ih izbegnete uz recepte koji se lako prate. To je dragocen resurs koji može u velikoj meri pomoći programerima, recenzentima koda, arhitektama i studentima u unapređivanju njihovih veština kodiranja i postojećih sistema.

Šta vam je potrebno da biste koristili ovu knjigu

Da biste pokrenuli primere koda, potrebno vam je radno okruženje poput O'Reilly sandbox-a ili Replita. Podstičem vas da prevedete primere koda u vaš omiljeni programski jezik. Danas to možete uraditi besplatno uz generatore koda veštačkom inteligencijom. Koristio sam alate kao što su GitHub Copilot, OpenAI Codex, Bard, ChatGPT i mnoge druge da bih napisao primere koda za ovu knjigu. Korišćenje ovih alata omogućilo mi je da koristim više od 25 različitih jezika u ovoj knjizi iako nisam ekspert za mnoge od njih.

O autoru

Maksimilijano Kontijeri radi u softverskoj industriji već 25 godina i istovremeno predaje na univerzitetu. Već tri godine piše o čistom kodu, refaktorisanju i mirisima koda, pišući par članaka nedeljno na mnogim popularnim blog platformama. On je fan deklarativnog i bihevioralnog koda i oslanja se na softverske osnove za izgradnju elegantnih i robustnih rešenja.

Sadržaj

 

Predgovor

Uvod

 

1. Čist kod

1.1 Šta je miris koda?

1.2 Šta je refaktorisanje?

1.3 Šta je recept?

1.4 Zašto čist kod?

1.5 Čitljivost, performanse ili i jedno i drugo

1.6 Tipovi softvera

1.7 Mašinski generisan kod

1.8 Razmatranje o imenovanjima u knjizi

1.9 Obrasci dizajna

1.10 Paradigme programskih jezika

1.11 Objekti naspram klasa

1.12 Prilagodljivost

 

2. Uspostavljanje aksioma

2.0 Uvod

2.1 Zašto je to model?

2.2 Zašto je apstraktan?

2.3 Zašto je programabilan?

2.4 Zašto je delimičan?

2.5 Zašto je objašnjavajući?

2.6 Zašto je to povezano sa stvarnošću?

2.7 Zaključivanje pravila

2.8 Jedini pravi princip dizajniranja softvera

 

3. Anemični modeli

3.0 Uvod

3.1 Pretvaranje anemičnih objekata u bogate objekte

3.2 Prepoznavanje suštine vaših objekata

3.3 Uklanjanje metoda za postavljanje iz objekata

3.4 Uklanjanje anemičnih generatora koda

3.5 Uklanjanje automatskih svojstava

3.6 Uklanjanje objekata za prenos podataka

3.7 Kompletiranje praznih konstruktora

3.8 Uklanjanje metoda za dohvatanje

3.9 Sprečavanje raskalašnog ponašanja objekata

3.10 Uklanjanje dinamičkih svojstava

 

4. Primitivna opsesija

4.0 Uvod

4.1 Kreiranje malih objekata

4.2 Konkretizovanje primitivnih podataka

4.3 Konkretizovanje asocijativnih nizova

4.4 Uklanjanje zloupotreba niske

4.5 Konkretizovanje vremenskih oznaka

4.6 Konkretizovanje podskupova kao objekata

4.7 Konkretizovanje ispravnosti niske

4.8 Uklanjanje nepotrebnih svojstava

4.9 Kreiranje vremenskih intervala

 

5. Promenljivost

5.0 Uvod

5.1 Menjanje promenljive u konstantu

5.2 Deklarisanje promenljive kao promenljive

5.3 Zabrana promena u suštini

5.4 Izbegavanje promenljivih konstantnih nizova

5.5 Uklanjanje lenje inicijalizacije

5.6 Zamrzavanje promenljivih konstanti

5.7 Uklanjanje sporednih efekata

5.8 Prevencija podizanja

 

6. Deklarativni kod

6.0 Uvod

6.1 Sužavanje ponovo korišćenih promenljivih

6.2 Uklanjanje praznih linija

6.3 Uklanjanje verzionisanih metoda

6.4 Uklanjanje dvostrukih negacija

6.5 Menjanje pogrešno postavljenih odgovornosti

6.6 Zamena eksplicitnih iteracija

6.7 Dokumentovanje dizajnerskih odluka

6.8 Zamena magičnih brojeva konstantama

6.9 Razdvajanje „štaˮ i „kakoˮ

6.10 Dokumentovanje regularnih izraza

6.11 Prerada Yoda uslova

6.12 Uklanjanje neprofesionalnih metoda

6.13 Izbegavanje problema sa ugnježdenim povratnim pozivima

6.14 Generisanje dobrih poruka o greškama

6.15 Izbegavanje magičnih ispravki

 

7. Imenovanje

7.0 Uvod

7.1 Proširivanje skraćenica

7.2 Preimenovanje i razbijanje pomoćnih i uslužnih funkcija

7.3 Preimenovanje objekata sa prisvojnom zamenicom u prefiksu imena

7.4 Preimenovanje promenljivih rezultata

7.5 Preimenovanje promenljivih imenovanih po tipovima

7.6 Preimenovanje dugih imena

7.7 Preimenovanje apstraktnih imena

7.8 Ispravljanje grešaka u pisanju

7.9 Uklanjanje imena klasa iz atributa

7.10 Uklanjanje prvog slova iz klasa i interfejsa

7.11 Preimenovanje funkcija koje u svojim imenima imaju Basic/Do

7.12 Pretvaranje množine imena klase u jedninu

7.13 Uklanjanje reči „collectionˮ iz imena

7.14 Uklanjanje prefiksa/sufiksa „Implˮ iz imena klasa

7.15 Preimenovanje argumenata prema ulozi

7.16 Uklanjanje suvišnih imena parametara

7.17 Uklanjanje nepotrebnog konteksta iz imena

7.18 Izbegavanje upotrebe reči „dataˮ u imenu

 

8. Komentari

8.0 Uvod

8.1 Uklanjanje komentara u kojima se nalazi kod

8.2 Uklanjanje zastarelih komentara

8.3 Uklanjanje komentara sa logičkim vrednostima

8.4 Uklanjanje komentara u metodima za dohvatanje

8.5 Pretvaranje komentara u imena funkcija

8.6 Uklanjanje komentara unutar metoda

8.7 Zamena komentara testovima

 

9. Standardi

9.0 Uvod

9.1 Praćenje standarda pisanja koda

9.2 Standardizacija uvlačenja linija

9.3 Unifikacija konvencija za velika i mala slova

9.4 Pisanje koda na engleskom jeziku

9.5 Unifikacija redosleda parametara

9.6 Popravljanje postojećih problema

 

10. Kompleksnost

10.0 Uvod

10.1 Uklanjanje ponovljenog koda

10.2 Uklanjanje podešavanja/konfiguracija i opcija za funkcionalnosti

10.3 Menjanje stanja kao svojstava

10.4 Uklanjanje komplikovanih rešenja iz koda

10.5 Kršenje višestrukih obećanja

10.6 Prekidanje dugih lanaca saradnje

10.7 Izdvajanje metoda u objekat

10.8 Praćenje konstruktora nizova

10.9 Uklanjanje objekata sa nepredvidivim ponašanjima

 

11. Naduvavanje koda

11.0 Uvod

11.1 Razbijanje predugačkih metoda

11.2 Smanjenje suvišnih argumenata

11.3 Smanjenje suvišnih promenljivih

11.4 Uklanjanje suvišnih zagrada

11.5 Uklanjanje suvišnih metoda

11.6 Razbijanje suvišnih atributa 

11.7 Smanjenje listi uvoza

11.8 Razbijanje funkcija koje obavljaju više zadataka

11.9 Razbijanje obilnih interfejsa

 

12. YAGNI

12.0 Uvod

12.1 Uklanjanje mrtvog koda

12.2 Upotreba koda umesto dijagrama

12.3 Refaktorisanje klasa sa jednom potklasom

12.4 Uklanjanje jednokratnih interfejsa

12.5 Uklanjanje nepravilne upotrebe dizajnerskih obrazaca

12.6 Zamena poslovnih kolekcija

 

13 Otkrij grešku što pre

13.0 Uvod

13.1 Refaktorisanje ponovnog dodeljivanja vrednosti promenljivih

13.2 Nametanje preduslova

13.3 Upotreba strožih parametara

13.4 Uklanjanje podrazumevanih slučajeva iz naredbi grananja

13.5 Izbegavanje izmena kolekcija tokom iteracije

13.6 Ponovno definisanje heširanja i jednakosti

13.7 Refaktorisanje bez funkcionalnih promena

 

14. Uslovna grananja

14.0 Uvod

14.1 Zamena slučajnih uslovnih grananja polimorfizmom

14.2 Preimenovanje indikatorskih promenljivih događaja

14.3 Konkretizovanje Bulovih promenljivih

14.4 Zamena switch/case/elseif naredbi

14.5 Zamena fiksiranih if uslova kolekcijama

14.6 Promena logičkih uslova u uslove sa skraćivanjem

14.7 Dodavanje implicitnog else uslova

14.8 Ponovno pisanje stepenasto napisanog uslovnog koda

14.9 Izbegavanje trikova uslova sa skraćivanjem

14.10 Ponovno pisanje ugnježdenog stepenasto napisanog koda

14.11 Sprečavanje povratnih logičkih vrednosti za provere uslova

14.12 Menjanje poređenja sa logičkim vrednostima

14.13 Izdvajanje iz dugih uslovnih izraza sa ternarnim operatorima

14.14 Konverzija nepolimorfnih funkcija u polimorfne

14.15 Menjanje poređenja jednakosti

14.16 Pretvaranje fiksiranih poslovnih uslova

14.17 Uklanjanje nepotrebnih logičkih vrednosti

14.18 Ponovno pisanje ugnježdenih uslova sa ternarnim operatorima

 

15. Null vrednost

15.0 Uvod

15.1 Kreiranje Null objekata

15.2 Uklanjanje opcionog ulančavanja

15.3 Pretvaranje opcionih atributa u kolekcije

15.4 Upotreba stvarnih objekata za null vrednosti

15.5 Predstavljanje nepoznatih lokacija bez korišćenja null vrednosti

 

16. Preuranjena optimizacija

16.0 Uvod

16.1 Izbegavanje identifikatora objekata

16.2 Uklanjanje preuranjene optimizacije

16.3 Uklanjanje preuranjene optimizacije sa operatorima nad bitovima

16.4 Smanjivanje preopštenosti

16.5 Menjanje strukturne optimizacije

16.6 Uklanjanje kodova za buduću upotrebu

16.7 Izdvajanje keša iz objekata domena

16.8 Uklanjanje događaja sa povratnim pozivom baziranih na implementaciji

16.9 Uklanjanje upita iz konstruktora

16.10 Uklanjanje koda iz destruktora

 

17. Povezivanje

17.0 Uvod

17.1 Pretvaranje skrivenih pretpostavki u eksplicitne

17.2 Zamena unikata

17.3 Razbijanje preopterećenih objekata

17.4 Razbijanje divergentnih promena

17.5 Pretvaranje specijalnih indikatorskih vrednosti 9999 u normalne

17.6 Uklanjanje operacije širokog raspona

17.7 Uklanjanje opcionih argumenata

17.8 Prevencija zavisti prema funkcijama

17.9 Uklanjanje posrednika

17.10 Premeštanje podrazumevanih argumenata na kraj 

17.11 Izbegavanje efekta talasa

17.12 Uklanjanje slučajnih metoda na poslovnim objektima

17.13 Uklanjanje poslovnog koda iz korisničkog interfejsa

17.14 Menjanje povezanosti u klase

17.15 Refaktorisanje klastera podataka

17.16 Prekidanje neprikladne intimnosti

17.17 Pretvaranje zamenljivih objekata

 

18. Globalne promenljive

18.0 Uvod

18.1 Pretvaranje globalnih funkcija

18.2 Pretvaranje statičkih funkcija

18.3 Zamena GoTo naredbi strukturiranim kodom

18.4 Uklanjanje globalnih klasa

18.5 Menjanje globalnih datuma bez sadržaja

 

19. Hijerarhije

19.0 Uvod

19.1 Razbijanje dubokog nasleđivanja

19.2 Razbijanje jo-jo hijerarhija

19.3 Razbijanje potkategorizacije radi ponovne upotrebe koda

19.4 Zamena „is-aˮ relacije ponašanjem

19.5 Uklanjanje ugnježdenih klasa

19.6 Preimenovanje izolovanih klasa

19.7 Pretvaranje konkretnih klasa u konačne

19.8 Eksplicitno definisanje nasleđivanja klase

19.9 Prenošenje praznih klasa

19.10 Odgađanje preuranjene klasifikacije

19.11 Uklanjanje zaštićenih atributa

19.12 Kompletiranje praznih implementacija

 

20. Testiranje

20.0 Uvod

20.1 Testiranje privatnih metoda

20.2 Dodavanje opisa tvrdnjama

20.3 Prenošenje assertTrue do specifičnih tvrdnji

20.4 Zamena lažnih objekata stvarnim objektima

20.5 Unapređivanje generičkih tvrdnji

20.6 Uklanjanje nestabilnih testova

20.7 Menjanje tvrdnji za brojeve sa pokretnim zarezom

20.8 Menjanje test podataka stvarnim podacima

20.9 Zaštita testova koji krše enkapsulaciju

20.10 Uklanjanje irelevantnih informacija iz testova

20.11 Dodavanje pokrivenosti za svaki zahtev za spajanjem

20.12 Ponovno pisanje testova koji zavise od datuma

20.13 Učenje novog programskog jezika

 

21. Tehnički dug

21.0 Uvod

21.1 Uklanjanje koda koji zavisi od produkcije

21.2 Uklanjanje sistema za praćenje grešaka

21.3 Uklanjanje upozorenja/striktnog režima rada

21.4 Prevencija i uklanjanje oznaka ToDo i FixMe

 

22. Izuzeci

22.0 Uvod

22.1 Uklanjanje praznih blokova izuzetaka

22.2 Uklanjanje nepotrebnih izuzetaka

22.3 Ponovno pisanje izuzetaka za očekivane slučajeve

22.4 Ponovno pisanje ugnježdenih try/catch blokova

22.5 Zamena povratnih kodova izuzecima

22.6 Ponovno pisanje izuzetaka u stepenasto napisanom kodu

22.7 Skrivanje grešaka niskog nivoa od krajnjih korisnika

22.8 Sužavanje pokušaja za izuzetke

 

23. Metaprogramiranje 

23.0 Uvod

23.1 Uklanjanje upotrebe metaprogramiranja

23.2 Oživljavanje bezimenih funkcija

23.3 Uklanjanje pretprocesora

23.4 Uklanjanje dinamičkih metoda

 

24. Tipovi

24.0 Uvod

24.1 Uklanjanje provere tipa

24.2 Rad sa istinitim vrednostima

24.3 Promena Float brojeva u decimalne

 

25. Bezbednost

25.0 Uvod

25.1 Dezinfekcija unosa

25.2 Promena sekvencijalnih identifikatora

25.3 Uklanjanje zavisnosti paketa

25.4 Zamena zlih regularnih izraza

25.5 Zaštita deserijalizacijer objekata

 

Rečnik pojmova

Indeks

 

 

 

Budite prvi koji će ostaviti komentar.

Ostavite komentar Ostavite komentar

 

Preporučujemo

C# 2008 od početnika do profesionalca

C# 2008 od početnika do profesionalca

Popust cena:
1700.00 rsd

Pragmatični programer: vaš put do stručnosti

Pragmatični programer: vaš put do stručnosti

Popust cena:
1700.00 rsd

Veze, linkovi
Linkedin Twitter Facebook
 
     
 
© Sva prava pridržana, Kompjuter biblioteka, Beograd, Obalskih radnika 4a, Telefon: +381 11 252 0 272
 
     
z