"Szia Amigo! Ma a kódstílusokról és a kódstílus fontosságáról fogok mesélni."

"Azzal kezdem, ami a legfontosabb.  A Java kódnak könnyen olvashatónak kell lennie.  A kód általános megközelítése a következő: a kódot egyszer írják, de százszor olvassák el."

"Tegyük fel, hogy Ön és 10 másik programozó ír egy pályázatot. Három évig dolgozol az alkalmazáson, háromhavonta köztes kiadásokkal."

"Ez hosszú?"

"Ez itt a Java, az én fiatal szöcském! "Mit szólna egy vállalati rendszerhez, amely egy tucat szerveren fut és 100 ember írt több mint 6 éven keresztül? Ez is előfordul néha."

– Hú.

"Egyébként a fő szabály, a fő követelmény a kóddal szemben, hogy más fejlesztők számára könnyen olvasható legyen."

"Más programozási nyelveken az emberek gyakran kis csapatokként dolgoznak kis feladatokon, így lehet, hogy van egy másik fő szabályuk is, például: "Működik? Kiváló".

"Néhány év leforgása alatt a csapat összes tagja több változtatást is végrehajt az Ön által írt kódon. És minden alkalommal meg kell érteniük a kód működését."

"És az érthetetlen kódot, amely tökéletesen működik, nehéz megváltoztatni.  Eldobják, és átírják a maguk módján.  Tehát olyan kódot írjanak, amelyet mások is megértenek.  Ha javíthatja a kódot, javítsa azt. Ha javítható, akkor javítani kell! "

"Ha 15 percig írsz kódot, majd két órát töltesz a fejlesztésével, akkor jól csinálod. Mennyi időt takarítasz meg a csapatnak?"

""2 óra a kód megértéséhez" x "a 100 alkalom, amikor az embereknek meg kell érteniük" = 200 óra."

"Ezeket a számokat légből kapottam, de szeretném, ha megértené a problémát és annak hatókörét. A  kódját úgy hozták létre, hogy más programozók elolvassák.  Minden más másodlagos."

"Nem működik megfelelően a kód? Javítjuk. Nincs optimalizálva? Optimalizáljuk. Nincs dokumentálva? Megjegyzéseket adunk hozzá."

" Nehezen olvasható a kód? Dobd ki azt a szart a szemétbe, és írj le mindent újra a semmiből! "

– Nem gondoltam volna, hogy ez ekkora baj.

"Az egyik oka annak, hogy a Java vezető programozási nyelv az, hogy minden Java kódot úgy írnak, hogy más programozók olvassák."

"Most pedig térjünk át a második kérdésre: hogyan lehet a kódot a lehető legkönnyebben olvashatóvá tenni? "

"Bárki megérti, ha valaki ismerős szavakat mond az anyanyelvén. Ugyanez igaz itt is. A kód könnyen olvasható, ha a programozó könnyen kitalálja:

A)  Mit csinálnak az egyes módszerek

B)  Az egyes osztályok célja

C)  Pontosan azt, amit az egyes változók tárolnak.

Mindezt nevekkel közöljük: osztálynevekben, metódusnevekben és változónevekben. Ezenkívül stílus is van a változók elnevezésében. És van kódstílus."

– Kész vagyok meghallgatni.

" A programozás jó angol nyelven alapszik!  Egy jól megírt program úgy olvasható, mint a közönséges műszaki dokumentáció. "

Kezdjük a nevekkel .

"A metódusnévnek röviden le kell írnia a metódus működését. Ekkor a kód egyszerű prózaként olvasható."

Program
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

"Íme, hogyan kell olvasni egy ilyen programot."

1. sor.

"A módszer neve "downloadPhoto". Úgy tűnik, hogy letölt egy fotófájlt az internetről. Hova tölti le? Még nem tudjuk. Honnan? A metódusnak van egy url nevű paramétere - valószínűleg ez az URL a letöltés."

3. sor.

"Az resultFileName változót a TempHelper.createTempFileName();" deklarálja, és értéket rendel hozzá."

Tehát ennek a fájlnak a helyi elérési útnak kell lennie, ahová a letöltött fájlt menteni fogjuk.

"A "TempHelper" név nem árul el nekünk semmit. A "Helper" utótag azt mondja, hogy ez egyfajta segédprogram, amely nem tartalmaz fontos üzleti logikát, hanem a gyakran előforduló rutinfeladatok egyszerűsítésére szolgál."

"A "createTempFileName" metódusnév azt jelzi, hogy ez a metódus egy ideiglenes fájl (ideiglenes fájl) nevét hoz létre és adja vissza. Az ideiglenes fájl egy ideiglenes fájl, amely egy ideig létrejön, majd általában a program bezárásakor törlődik. "

5. sor.

"Egy SingleFileDownloader objektum jön létre, és hozzá van rendelve a változó letöltőhöz."

Ez az az objektum, amely letölti a fájlunkat az internetről.

"Egy SingleFileDownloader objektum van hozzárendelve a változó letöltőhöz. A névből feltételezhetjük, hogy a programnak többféle letöltő osztálya van. Az egyiket egyedi fájlok letöltésére írták, és valószínűleg más letöltőkkel is találkozhatunk a csoportok kódjában a következő nevű fájlok közül: MultiFileDownloader, FileGroupDownloader vagy DirectoryDownloader"

6. sor.

"A letöltő objektum resultFileName tulajdonságát az resultFileName változó értékével egyenlőnek állítottuk be. Más szóval, megmondjuk a betöltőnek, hogy hova mentse a letöltött fájlt. Ahogy az elvárható. Tehát alapvetően a kódot jósoljuk meg!"

7. sor.

"Az indítási metódusnak hívjuk. A letöltés elindul. Ennek van értelme. Kíváncsi vagyok, hogyan történik a letöltés: részletekben, külön szálon, vagy itt az egész? Ha az egészet innen töltjük le, eltarthat egy hosszú ideig, és következményei vannak."

sorok 8-11.

"Ah. Itt azt a szabványos hurkot látjuk, amelyet valaki írt a letöltés befejezésére. A letöltő objektumnak done tulajdonsága van, amelyet az isDone() metódus ad vissza. Mivel a metódus neve isDone(), nem pedig getDone( ), arra a következtetésre jutunk, hogy a kész változó egy logikai vagy esetleg egy logikai érték."

13-14. sor.

"Ha hiba történik a letöltés során, akkor a downloadPhoto metódus null értéket ad vissza. Jó, hogy kezeli a hibákat. Kár, hogy csak nullát ad vissza – nem világos, hogy mi a hiba. Jobb lenne, ha kivételt dobnánk a a hiba."

16. sor.

"Visszaküldjük a letöltött fájlt tartalmazó helyi fájl elérési útját."

– Hűha!

"Ennek a programnak a kódja teljesen egyértelművé teszi, hogy mit csinál. Még találgatni is lehet a program felépítéséről, és milyen más osztályokat/módszereket fogunk találni."

– Most már értem, milyen fontosak a nevek.

"További információ a nevekről. Gyakran kitalálhatja, hogy egy objektumnak/osztálynak mely metódusai vannak. Például, ha egy objektum egy gyűjtemény, akkor nagy valószínűséggel lesz egy size() vagy count() metódusa az elemek számának lekéréséhez. , valószínűleg lesz benne add() vagy insert() metódus. Az elemeket a gyűjteményosztályokból a get/getItem/getElement metódusokkal lehet lekérni."

"Ha egy változót i-nek, j-nek vagy k-nak neveznek, akkor az valószínűleg egy hurokszámláló."

"Ha egy változót m-nek vagy n-nek neveznek, akkor valószínűleg akkora, mint egy tömb/gyűjtemény."

"Ha egy változót névnek neveznek, akkor az valószínűleg egy karakterlánc, amely valakinek a nevét tartalmazza."

"Ha egy osztály neve FileInputStream, akkor az egyszerre egy fájl és egy bemeneti adatfolyam."

"Minél több kódot lát, annál könnyebben olvasható mások kódja."

"De néha vannak olyan kódok, amelyeket nagyon nehéz olvasni. Ebben az esetben van egy nagyon praktikus tanács:"

Tipp
Írj kódot úgy, mintha egy erőszakos pszichopata tartaná fenn, aki tudja, hol élsz .

– Ez vicces és nem vicces egyszerre.

"Most egy kicsit a változók elnevezésére használt stílusokról."

"A Java fejlesztők igyekeznek rendkívül informatív neveket adni a változóknak és metódusoknak. Ennek eredményeként a nevek gyakran több szóból állnak. Az összetett nevek nagybetűs írásmódja 4 stílus létezik."

1) Kisbetűk  – Minden szó kisbetűvel van írva. Például:

A „zöld házból” „üvegház”  lesz

A „hollywoodi lány” „hollywoodi lány”  lesz 

Ez a stílus a csomagnevekhez használatos.

2) Nagybetű  – Minden szó nagybetűvel van írva, és aláhúzással van elválasztva. Például:

A „Maximális érték” MAX_VALUE  lesz

A „Macskaszám” értéke CAT_COUNT  lesz

"Ez a stílus a konstansok (végső statikus mezők) nevére használatos."

3) CamelCase  – Minden szó kisbetűvel van írva, kivéve, hogy minden szó első betűje nagybetű. Például:

A „zöld házból” „Greenhouse”  lesz 

A "Hollywood Girl"  lesz "Hollywood Girl"

Ezt a stílust osztályok és interfészek nevére használják.

4) Lower CamelCase (vegyes kisbetűk)  – Minden szó kisbetűvel van írva, kivéve minden szó első betűjét, kivéve az első nagybetűt. Például:

A „Get width” szóból „getWidth” lesz

A „Get Hollywood girl name” neve „getHollywoodGirlName” lesz 

"Ezt a stílust változók és metódusok nevére használják."

– Szóval nincs túl sok szabály.

1)  Minden Lower CamelCase betűvel van írva.

2)  Az osztályok és interfészek nevei mindig nagybetűvel írhatók.

3)  A csomagnevek mindig kisbetűk.

4)  A konstansok mindig nagybetűk.

"Van egy-két árnyalat, de általában ez a helyzet."

"Most a módszerekről.  "A metódusnevek szinte mindig igével kezdődnek! A „count” rossz név egy módszernek. Jobb, ha getCount()-nak hívjuk. Egy metódus végrehajt valamilyen műveletet az objektumon:  startDownload , interrupt  , sleep  , loadPirateMusic ."

"Mint már tudod, léteznek getterek és beállítók az objektum tulajdonságaival/mezőivel való munkához:  getName / setName , getCount / setCount stb."

"Az egyetlen kivétel a logikai értékek. A logikai értékeknél a getternevek az 'is'-t használják, nem a "get"-et, pl. isDone, isEmpty. Így közelebb áll a hétköznapi beszédhez."

"Mi lenne, ha napi két órát dolgoznál 8 helyett? Kísértés?"

"Igen!"

"Ahogy kell. Egy ifjabb Java fejlesztő számára az alapkövetelmény a Java, azaz a Java Core alapjainak kiváló ismerete."

"Van még egy kérdésem. Miért vannak ilyen különböző módszerek az elemek számának megállapítására?"

Osztály Az elemek számának megszerzésének módja/tulajdonsága
Húr hossza ()
Sor hossz
Tömb lista méret ()
ThreadGroup aktív szám ()

"Először is, a Java-t több mint 20 évvel ezelőtt találták fel, még azelőtt, hogy olyan követelményeket állapítottak volna meg, mint a setCount / getCount , és volt egy közös megközelítés a C nyelvből, hogy a lehető legrövidebb legyen."

"Másodszor, itt a szemantika játszik szerepet. Amikor egy tömbről beszélünk, annak hosszáról beszélünk. Ha egy gyűjteményről beszélünk, akkor a méretéről beszélünk."

– Milyen érdekes lecke.

"Szeretnék még mesélni, de attól tartok, hogy nem fog egyszerre eszébe jutni. Jobb, ha kis adagokban tálalja ki."

"De szeretném érinteni a stílust a göndör zárójelek használatával kapcsolatban: {}. Két megközelítés létezik:"

1)  A zárójel minden alkalommal új sorba lép

2)  A nyitó zárójel az előző sor végére kerül, míg a záró zárójel egy új sorba kerül. Ezt a stílust "egyiptomi fogszabályzónak" hívják.

"Őszintén szólva, meg kell választani a kódolás módját. Sokan használnak nyitó kapcsos zárójelet ugyanazon a vonalon. Sokan új sorra teszik. Ez olyan, mint a vita arról, hogy a tojás melyik végét törje el: a kis vagy a nagyot. vége."

"Az egyetlen dolog, amit ajánlani tudok, az az, hogy ragaszkodjon ahhoz a stílushoz, amelyet a projektben használnak. Ne változtassa meg valaki más kódját, hogy az megfeleljen az Ön által preferált stílusnak.  Az emberek tökéletlenek. Ezt mint Bilaabo doktort mondom Önnek. "

"Köszönöm az érdekes leckét, Bilaabo. Megyek, hogy elgondolkozzam azon, amit mondott."