Programavimas

5 „Java“ patarimas: „Java“ konstantos

Šią savaitę mes sukuriame keletą konstantų, turinčių visus privalumus naudojant C pirminio procesoriaus galimybes apibrėžiant kompiliavimo laiko konstantas ir sąlygiškai sukompiliuotus kodus.

„Java“ atsikratė visos tekstinio išankstinio procesoriaus sąvokos (jei „Java“ imsite kaip „C / C ++ palikuonį“). Vis dėlto galime gauti bent jau kai kurių „Java“ C pirminio procesoriaus funkcijų geriausius privalumus: konstantos ir sąlyginis kompiliavimas.

Viena iš neabejotinai gerų C išankstinio procesoriaus savybių yra galimybė apibrėžti kompiliavimo laiko konstantas, naudojant tekstinį pavadinimą tam tikrai vertei atspindėti. Tai palengvina skaitymą ir priežiūrą. Tai taip pat greitesnis vykdymo metu nei naudojant įprastą kintamąjį.

Neabejotinai piktnaudžiavęs C išankstinio procesoriaus bruožas yra #apibrėžti kartu su #ifdef ir draugai sąlygiškai sukompiliuoti ištisus kodo blokus. Aš sakau, kad tai ginčytina, nes žmonės dažnai naudojasi šia galimybe spręsdami su platforma susijusius klausimus (ir tai yra geras dalykas ir blogas taškas).

C, kai kurias konstantas antraštės faile galima apibrėžti per:

#define MY_BDATE 10 #define SILLY_PLATFORM 

ir tada gauti prieigą prie tų konstantų naudojant # įtraukti įtraukti juos į kodo failą ir tada juos naudoti:

fprintf (stderr, "Mano gimtadienis yra% d" "th! \ n", MY_BDATE); 

„Java“ atitikmenį galima padaryti kuriant viešasis statinis finalas kintamieji „Java“ sąsaja:

sąsaja „ConstantStuff“ {public static final int MY_BDATE = 10; public static final loginės reikšmės SillyPlatform = true; } 

Tada mes galime juos pasiekti naudodami importas kad sąsaja būtų matoma mums, tada naudodamiesi konstantomis:

System.out.println ("Mano gimtadienis yra" + ConstantStuff.MY_BDATE + "th!"); 

C išankstinis procesorius gali sąlygiškai išimti didelius teksto plotus, jei tam tikra pirminio procesoriaus konstanta buvo arba nebuvo apibrėžta.

#if apibrėžta (SILLY_PLATFORM) / * Daugybė bjauraus kodo, skirti kovoti su * SILLY platformos kvailumais. * / #else / * Kodas, skirtas tvarkyti kitas įprastas platformas. * / #endif 

Daugelis žmonių apgailestauja, kad šios galimybės nėra „Java“. Atminkite, kad viena iš priežasčių, kodėl „Java“ yra tokia nuostabi, yra ta, kad kalba yra kur kas geriau apibrėžta, todėl toks sistemos kodas turėtų būti ne net būtinas.

Kaip bebūtų, vis tiek galite gauti tokį sąlygiškai sukompiliuotą kodą tiesiogiai iš kompiliatoriaus! Jūs tiesiog naudojate viešasis statinis galutinis loginis konstantos kaip sąlyga taisyklingam jei pareiškimas. „Java“ kompiliatorius yra pakankamai protingas, kad atpažintų tai kaip ypatingą atvejį ir gali visiškai pašalinti bandymą ir atitinkamos sąlyginės šakos kodą.

Taigi tiesiog parašykite sąlyginį teiginį kaip įprasta.

 if (ConstantStuff.SillyPlatform) {// Kodas, kuris naudojamas, jei platforma yra teisinga * kompiliavimo metu *. } else {// Kodas, kurį reikia naudoti, jei platforma yra klaidinga * kompiliavimo metu *. } 

Aš nežinau apie tave, bet nekenčiu, kai turiu rašyti taip ilgą laiką sąsaja prieš naudodami bet kurią iš tų konstantų, įveskite pavadinimą. Taigi, aš tiesiog turiu savo klasę, kuri naudos šias konstantas įgyvendinti sąsaja. Tada galiu tiesiog naudoti vardą, darant prielaidą, kad nėra vardų susidūrimo (tokiu atveju turėsite juos atskirti naudodami visus vardus).

Aš visus šiuos įdomius dalykus sujungiau į keletą paprastų „Java“ programų. „Constants“ (//www.javaworld.com/javatips/javatip5/Constants.java) padargai sąsaja ir tiesiogiai naudoja konstantas, o „Constants2“ (//www.javaworld.com/javatips/javatip5/Constants2.java) naudoja visiškai kvalifikuotus vardus, kad pasiektų konstantas.

Johnas D. Mitchellas yra dar vienas UC-Berkeley kompiuterių mokslų absolventas, atpratęs nuo kofeino, cukraus ir per mažai miego. Jis trejus metus stengėsi dėl „Powder“ programinės įrangos „Geoworks“ akcijų, kurios iš tikrųjų vertos daugiau nei tapetai. Po pirmojo viešo „Java“ išleidimo jis sukūrė savo dienos darbą, kad būtų sukurtos programėlės ir „Java“ kompiliatorius. Savo „Java“ priklausomybę jis finansuoja rašydamas kompiliatorius, „Tcl / Tk“, „Perl“, „C ++“ ir „Java“ sistemas. Jo gausus laisvalaikis sugaišta prižiūrint „comp.lang.tcl.announce“ naujienų grupę ir parašius nuostabią „Java“ knygą.

Šią istoriją „Java 5 patarimas: Java konstantos“ iš pradžių paskelbė „JavaWorld“.