Hat tipp, hogyan írhat olvashatóbb kód - szoftverek
Jeff Vogel, elnök, Spiderweb Software
Átmentem egy nehéz út előtt tanult meg írni világos kódot, ami lehetővé teszi a karbantartást. Az elmúlt tizenkét évben tettem egy élő olyan számítógépes játékok, és eladták őket az interneten keresztül összhangban marketing modell nevű shareware. Ez azt jelenti, hogy leülök elé egy üres képernyő és írjuk kódot -, és csak írásban néhány tízezer sornyi kódot, kapok valami, amit el tud adni.
Más szóval, ha létrehoz egy rendetlenség, én ezt kizárólag a saját fészket. Amikor 3:00 reggel nézek egy hiba zavaró, mint egy rossz álom „makaróni” program és mondom magamban: „Ó, Istenem, mit visszamaradott okozza beltenyészet írta ezt rémálom”, a válasz erre a kérdésre csak akkor lehet: „Ez én magam” .
A fejlesztés a jó, rendezett programozási technikák vált számomra egy igazi áldás. Néhány ezek a technikák a cikkben leírt. Sok képzett, tapasztalt és belsőleg fegyelmezett programozók tudják fejből sok ilyen technikákat. Minden, ami az emberek is kap ez a cikk - az a képesség, hogy élvezze a kellemes irodalmi stílus és emlékszem, milyen szörnyű volt az életük, mielőtt bejutott a „tiszta kód”.
Illusztrációként ebben a cikkben fogom vizsgálni a program, ami egy hipotetikus számítógépes játék az úgynevezett kill Bad Aliens (Kill the rossz idegenek). Tagja ennek a játéknak, hogy ellenőrizzék az űrhajó. Ez a hajó vízszintesen mozog, az alján és a hajtások kagyló függőlegesen. A menedzsment ezt űrhajó kerül sor, például a billentyűzet segítségével.
Ábra. 1. A feltételezett játék
A játék van osztva időrésekre - az úgynevezett „hullám”. Egész minden hullám a képernyő tetején, egyik a másik után megjelenő földönkívüliek. Ők repülnek át a képernyőn, és dobja bombák. ET megjelenik a képernyőn egy meghatározott ideig. Hullám után ér véget a játékos egy bizonyos mennyiségű ET elpusztult.
Minden halott idegen játékos kap egy bizonyos mennyiségű pontot. Miután a végén minden hullám, a játékos kap egy bizonyos számú bónuszpontot - attól függően, hogy milyen gyorsan képes volt befejezni ezt a hullámot.
A vereség az űrhajó bomba felrobban, akkor a másik hajó jelenik meg a képernyőn. Ha egy űrhajó felrobban háromszor, a játék véget ér. Az nyer, aki a legtöbb pontot szerepel az általános értékelés. Egy kis pontok számát, ami nem történt meg.
Tehát, ha leül egy asztal és írjuk kódot kill Bad Aliens játék a nyelv a C ++. Először határozná meg a tárgyakat, hogy lesz az űrhajó, rakéták Player, idegenek, és a bombákat. Majd írsz a kódot a grafikus ábrázolás a képernyőn az összes ezeket az objektumokat. Akkor írja a kódot tárgyakat mozgatni a képernyőn az idő függvényében. Végül írsz a játék logikája, mesterséges intelligencia, földönkívüliek, programkódot bevitelére a billentyűzet parancsai lejátszó stb
Az elkerülhetetlen kérdés merül fel -, hogyan kell csinálni az összes fenti, hogy a végső kódot a játék egyértelmű volt, nem nehézséget okoz a későbbi támogatás és nem képviseli egy olvashatatlan káosz?
És ha jön, hogy egy másik ajánlás - soha nem ezt:
Szóval, minden, amire szükségünk van - a leírás elején és néhány „mutató” magyarázza a választott utat. Mindezt nagyon gyorsan és hosszú távon menteni egy csomó időt.
Az alábbiakban egy példa a mi hipotetikus játék Öld Bad idegenek. Tekintsünk egy tárgy, amely képviseli a kagyló, ami lő a játékos. Ön gyakran kell hívni egy függvényt, amely mozog a tárgy, és határozzák meg, hol volt. Írnék az eljárás a következő:
Tegyük fel, a mi hipotetikus játék, szeretnénk minden kapcsolatot az idegen játékos kap tíz pontot. Ezt a problémát meg lehet oldani két módon. Bad módon:
Egy jó módja: A globális fájlban írjuk be a következő sort:
Most, ha azt akarjuk rendelni a játékos több bónusz pontot, elég írni a következőket:
A legtöbb programozó valahogy tudom, hogy szükség van erre. Azonban a következetes végrehajtását fogalom fegyelmet. Szinte minden alkalommal, amikor belép a numerikus konstans, szükséges, hogy gondosan mérlegelje - Ne kérdezd meg a „középpont”. Tegyük fel például, hogy azt szeretné, hogy a játszótér méretei 800 x 600 pixel. Azt javasoljuk, hogy a méretet a területen az alábbiak szerint:
Amikor dolgozik a játék Öld Bad Aliens azt kell eldönteni, hogy milyen sok idegen meg kell ölni, hogy befejezze a hullám, mint idegenek lehetnek a képernyőn egyszerre, és milyen gyorsan idegenek jelennek meg a képernyőn. Például, ha azt akarom, hogy minden hullám volt ugyanannyi idegenek jelennek meg, ugyanolyan gyakorisággal, azt valószínűleg írni valamit, mint ez:
Elég világos kódot. Aztán amikor arra a következtetésre jutott, hogy a hullámok vagy túl rövid, hogy az intervallumok között előfordulását az idegenek túl kicsi, meg tudom változtatni ezeket az értékeket, és azonnal vissza az egész játék.
Az egyik legnagyobb előnye egy ilyen mechanizmus beállítani a paramétereket a játék -, hogy a képesség, hogy gyorsan változtatni igazi öröm, és úgy érzi erős. Például, ha megváltoztatja a fenti szöveget az alábbiak szerint:
Most már csak egy újrafordítása -, és a játék lesz sokkal szórakoztatóbb, és még őrültebb.
Ábra. 2. Game Öld Bad idegenek a változás előtt állandók
Ábra. 3. Game Öld Bad Aliens után növekedése konstans (játék, talán nehéz, de érdekes látni)
A végső cél egyszerű: írni a kódot, hogy egy idegen, akinek fogalma sincs arról, hogy mi ez a kód nem tudta megérteni, amilyen gyorsan csak lehetséges.
Meg kell tartani az arany középutat. Adjon objektum nevét, amely elég hosszú és intuitív, hogy megértsék a jelentését, de nem olyan hosszú és nehézkes, hogy nehéz olvasni a kódot.
Például a valós világban, én valószínűleg nem ad állandók nevét olyan hosszú, hogy én használtam az előző részben. Csak azért tettem, hogy az olvasó, hogy teljes mértékben tisztában legyen a jelentésükkel nélkül kontextusban. Az összefüggésben a program maga helyett a szöveget:
Valószínűleg írt volna, a következő:
A félreértések okozta rövidebb nevet kell szüntetni nagyon gyorsan, és a „olvashatóság” kódot javul.
Most tekintsük a kódrészletet, amelyeket használni fognak gyakran mozgatni az idegenek a képernyőn. Azt szinte biztosan leírtam ezt az utat:
Megjegyezzük, hogy a tömb összes idegenek, és az úgynevezett - idegenek. És ez nagyon jó. Ez neve közvetíti pontosan ezt akartam mondani, de ebben az esetben ez elég rövid ahhoz, hogy én is adja meg a billentyűzet ezerszer, és nem megy őrült ezzel. Minden valószínűség szerint, akkor használja ezt a tömböt nagyon gyakori. Ha hívja ezt a tömböt all_aliens_currently_on_screen. a kód lesz tíz mérföld hosszú, és ugyanolyan érthetetlen.
Kétségtelen, hogy az elnevezés a változók lehet kezelni sokkal komolyabban. Például, van az úgynevezett Magyar jelöléssel. Ez a koncepció egy csomó lehetőség, de a lényeg az, hogy minden változó nevének betűvel kell kezdődnie, amely jelzi a változó típusát. (Például, az összes változót a típusú előjel nélküli hosszú hiba változó ul kell kezdődnie előtag, stb). Véleményem szerint ez már túl sok, de meg kell tudni a létezéséről, és az ilyen lehetőségeket. Akkor kiad egy csomó elég idő arra törekedjünk, hogy a dolgok tisztább, de a megoldás erre a problémára is igényel némi erőfeszítést.
Ha a program elég nagy, akkor valószínűleg egy csomó funkciók és eljárások. Mivel úgy tűnhet a házimunkát, az egyes funkciók / eljárást kell ellenőrizni a hibákat.
Amikor létrehoz olyan eljárások / függvények mindig megkérdezi: „Tegyük fel, hogy egy őrült gonosztevő adom a legtöbb nem megfelelő értékeket. Mivel ez a bolyhos kódrészlet lesz képes megvédeni magát, és tartsa az egész programot a sérülésektől? „Ezután írjuk be a kódot úgy, hogy ellenőrzi az eljárás / függvény jelenlétében ilyen ellenséges adatok és védik őket.
Tekintsük a következő példát. A fő cél a csodálatos helyet a játék ölni az idegenek, és pontokat keresni, ezért meg kell változtatni az eljárást pontot a játékos. Sőt, hozzátéve, a játékos pontot, szeretnénk felhívni a beavatkozáshoz, amely ragyogást a végeredmény szép csillog. Az első kiviteli alaknál a következő:
Eddig jó. Most tegye fel magának a kérdést: „Mi ez a kód nem lehet annyira?”
Először is, az egyik magától értetődő. Mi történik, ha a változó NUM_POINTS lesz negatív érték? Tudunk lehetővé teszik a játékos számlájára csökkent? Talán. Azonban a játék leírását én korábban soha nem említette azt a lehetőséget, hogy elveszítik a játékos pontokat. Ezen túlmenően, a játék szórakoztató legyen, és ez ellentétes a veszteség pont. Így arra a következtetésre jutott, hogy a negatív pontok száma - ez egy tévedés, hogy kell fogott.
Ez a példa meglehetősen egyszerű. Van egy kevésbé nyilvánvaló probléma (általam folyamatosan szembesülnek a játékokat). Mi történik, ha NUM_POINTS változó nulla lesz?
Ez egy nagyon hihető helyzetet. Ne felejtsük el, hogy a végén minden hullám, mi adjuk a játékos bónuszpontokat sebességétől függően az áthaladást. Mi történik, ha egy játékos túl lassú cselekedni, és úgy döntünk, hogy ez 0 pont? Valószínű, hogy miközben dolgozik a kódot 03:00, úgy dönt, hogy hívja change_score eljárást és adja meg a 0 értéket.
Ebben az esetben a probléma az, hogy nagy valószínűséggel nem szeretné díszíteni a végeredmény ünnepi színe, ha a pontok száma nem változik. Így ez a helyzet is azt kell meghatározni. Próbáljuk az alábbi kódot:
Nos. Így sokkal jobb.
Felhívjuk figyelmét, hogy ez egy nagyon egyszerű funkciót. Ez teljesen nélkülöző modern jelek, amelyek annyira szereti a lendületes, fiatal programozók. Ha át tömbök vagy mutatókat, akkor feltétlenül kell, hogy az azonosítási hibák vagy rossz adatokat.
Előnye ennek a megközelítésnek nem kizárólag a program hibatűrés. Jó hibaellenőrzésre mechanizmusok és gyorsítja a hibakeresést. Tegyük fel, hogy tudjuk, hogy valahol van egy írásadat kívül néhány tömb, és tekintse meg a kódot a keresést egy hely, ahol ez megtörténhet. Ha bármilyen eljárást azok a mechanizmusok ellenőrzések állnak, akkor nem kell, hogy menjen át lépésről lépésre a keresési hibákat.
Ez a megközelítés ment egy csomó időt és megérdemli a rendszeres használat. Idő - a legértékesebb erőforrás.
Ez a kifejezés nem az én ötletem. Azonban ez a Wikipedia, így úgy tűnik, nem értelmetlen.
Ha a végső cél az, hogy ne kínozza az embereket, hogy ha írásban kódot kell törekedni, hogy a lehető legnagyobb tisztaságot. Egyszerű kódot kevesebb időt igényel az írás, a megértés a következő alkalommal, amikor belépnek, és a hibakeresés.
Optimization - az ellenség a világosság. Meg kell azonban jegyezni, hogy bizonyos esetekben, az optimalizálás van szükség. Ez különösen igaz a játékot. Azonban - és ez nagyon fontos - szinte soha nem lehet tudni előre, mi is javításra szorul, amíg nem tesztelni a tényleges működését kód nevű eszköz segítségével egy profiler. (Profiler - egy olyan program, amely figyeli a programot, és megbecsüli a végrehajtásához szükséges időt bizonyos kihívásokat Van egy csodálatos programot az ilyen típusú megtalálni és használni ...)
Minden alkalommal, amikor veszem optimalizálására bármely játékát, én mindig jönnek csodálkozva. A kód, ami aggódtam legfőképpen, mindig tökéletesen működik - és gátolja a kódot, amit soha nem gondoltam rá. Mivel fogalmam sem volt, hogy mit kód gyorsabb lesz, és mi - lassú, az eltöltött idő optimalizálása, hogy a valós adatok kárba. A valóságban a helyzet még rosszabb - amellett, hogy a felesleges időpocsékolás ez optimalizálási vezet kusza kódot.
Követi ezt a szabályt nem könnyű. Másrészt, különben nem lenne a szabály. A „jó” programkód kényelmetlen idegesítő, akkor is, ha gyorsabban fut.
Azonban, örüljetek! Miután a hosszú prédikációkat, hogy több időt töltenek, és több időt rajta, jött egy ritka, értékes, ha azt mondom, hogy egy kicsit a lustaság egészen elfogadható!
Írjon világos és munka programot. Ezután lesz elég ideje eltorzítása révén optimalizálás. Azonban ne csináld, amíg, amíg nem teljesen biztos, hogy helyesen cselekszik.
És végül, mivel beszélünk a fájdalmas, itt van a végső jótanács:
Talán hallott már arról, hogy létezik az esemény néven Nemzetközi Sérült C kód Contest - nemzetközi verseny a legkomplikáltabb szoftver kódot C. A tény az, hogy a nyelv a C és C ++, annak minden előnyével, létrehozhat egy rémálom kusza kódot. Ez a verseny bizonyítja az előnye egyértelmű „éppen ellenkezőleg” kód - odaítélésével a legőrültebb programozók. Nagy ötlet.
Az eredmények a verseny érdemes elolvasni, ha csak megérteni, milyen nagy károkat lehet alkalmazni olyan enciklopédikus tudás a programozási nyelv, kiegészítve a hiányzó alapvető szégyen. Ha van elegendő ismerettel akkor teletölteni tíz normál sornyi kódot egyetlen vonalon. Ennek ára alacsony lesz - csak egy teljes képtelenség, hogy gyorsan rögzíti a hibát a kódban.
A fő tanulság ez. Ha a generált kód megköveteli, hogy részletes ismerete a bonyolult elsőbbségi szabályok, illetve csupán megnézi az utolsó fejezete egy könyvet, hogy pontosan megértsük, mit csinálsz - ez azt jelenti, hogy már elkezdett filozofálni.
Minden programozó elfogadható szintű komplexitás a generált kódot. Személy szerint én írom programok vezetők tipikus nagymama. Véleményem szerint, ha a C-kód megköveteli annak megértését, a finom különbségeket kifejezést i ++ és ++ i, akkor túl bonyolult.
Ha úgy tetszik, akkor úgy nekem unalmas. Igaza van. Azonban töltök a megértés a kódot sokkal kevesebb időt, mint egyébként.
Ugyanakkor nem szabad úgy gondolja, hogy az összes fent említett nyilvánvaló mindenki számára. Tény, hogy nem. Rosszul megírt kód jelenik meg újra és újra - nélkül is, hogy mi lehetett volna.
Ha foglalkozik nagy mennyiségű kódot, és nem akar meghalni az ő terhelés, őszintén remélem, hogy a tippeket segít. Törekedjen az egyszerűség és érthetőség - akkor menteni egy csomó időt és megszabadulni a felesleges szenvedést.