Programiranje

Java Nasvet 5: Java konstante

Ta teden ustvarjamo nekaj konstant, ki imajo vse prednosti uporabe pripomočkov predprocesorja C za določanje konstante časa prevajanja in pogojno prevedene kode.

Java se je rešila celotnega pojma besedilnega predprocesorja (če jemljete Javo kot "potomca" C / C ++). Vendar pa lahko izkoristimo vsaj nekatere funkcije predprocesorja C v Javi: konstante in pogojno prevajanje.

Ena od nedvomno dobrih lastnosti predprocesorja C je zmožnost določanja konstant prevajalskega časa z uporabo besedilnega imena, ki predstavlja neko vrednost. Tako je lažje brati in vzdrževati. Med izvajanjem je tudi hitrejši kot pri uporabi običajne spremenljivke.

Verjetno zlorabljena lastnost predprocesorja C je uporaba #define skupaj z #ifdef in prijatelji za pogojno prevajanje celotnih blokov kode. Menim, da je sporno, saj ljudje pogosto uporabljajo to opremo za reševanje težav, povezanih s platformo (in to je dobro in slaba točka).

V jeziku C lahko določite nekaj konstant v datoteki glave z:

#define MY_BDATE 10 #define SILLY_PLATFORM 

in nato z uporabo dostopa do teh konstant #include da jih vključite v kodno datoteko in jih nato uporabite:

fprintf (stderr, "Moj rojstni dan je% d" "th! \ n", MOJ_BDAT); 

Enakovredno v Javi lahko naredimo z ustvarjanjem javni statični finale spremenljivke v Javi vmesnik:

vmesnik ConstantStuff {javni statični končni int MY_BDATE = 10; javna statična končna logična vrednost SillyPlatform = true; } 

Nato lahko do njih dostopamo z uporabo uvoz da nam bo vmesnik viden in nato uporabimo konstante:

System.out.println ("Moj rojstni dan je na" + ConstantStuff.MY_BDATE + "th!"); 

Predprocesor C lahko pogojno izloči velika področja besedila, če je bila določena konstanta predprocesorja določena ali ni bila določena.

#if definirano (SILLY_PLATFORM) / * Veliko grde kode za spopadanje z neumnostmi platforme * SILLY. * / #else / * Koda za obravnavo drugih običajnih platform. * / #endif 

Mnogi ljudje obžalujejo, da te zmožnosti v Javi ni. Ne pozabite, eden od razlogov, da je Java tako čudovita, je ta, da je jezik toliko bolje definiran, zato bi morala biti takšna sistemsko specifična koda ne celo nujno.

Kakor koli že, takšno pogojno prevedeno kodo lahko še vedno dobite neposredno od prevajalnika! Samo uporabite javna statična končna logična vrednost konstante kot pogoj za redno če izjavo. Prevajalnik Java je dovolj pameten, da to prepozna kot poseben primer in lahko popolnoma odpravi test in kodo ustrezne pogojne veje.

Torej samo napišite pogojni stavek kot običajno.

 if (ConstantStuff.SillyPlatform) {// Koda, ki se uporabi, če je platforma true * v času prevajanja *. } else {// Koda, ki se uporablja, če je platforma v času prevajanja neresnična *. } 

Ne vem zate, a sovražim, da moram pisati tako dolgočasno vmesnik ime, preden uporabite katero koli od teh konstant. Torej, imam samo svoj razred, ki bo uporabil te konstante izvajati vmesnik. Potem lahko samo uporabim ime, ob predpostavki, da ni sporov z imeni (v tem primeru jih boste morali ločiti s polnimi imeni).

Vse te zabavne stvari sem združil v nekaj preprostih aplikacijah Java. Konstante (//www.javaworld.com/javatips/javatip5/Constants.java) izvaja vmesnik in uporablja konstante neposredno, medtem ko Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) uporablja popolnoma kvalificirana imena za dostop do konstant.

John D. Mitchell je še en diplomant računalniških znanosti UC-Berkeley, ki se je odrekel kofeinu, sladkorju in premalo spanja. Tri leta se je trudil s programsko opremo za dlančnike pri podjetju Geoworks za zaloge, ki so dejansko vredne več kot ozadje. Po prvi javni izdaji Jave se je rešil vsakodnevne službe za razvoj apletov in prevajalnika Java. Svojo zasvojenost z Javo financira s pisanjem prevajalnikov, sistemov Tcl / Tk, Perl, C ++ in Java. Njegov obilo prostega časa porabi moderiranje comp.lang.tcl.announce newsgroup in pisanje čudovite knjige o Javi.

To zgodbo, "Java Nasvet 5: Java konstante", je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found