Programovanie

Java to ide

Existuje starý programátorský žart, ktorý znie asi takto: Jeden nahnevaný programátor hovorí druhému programátorovi: „Choď do pekla!“ Druhý programátor odpovedá so zjavným odporom: „Uf, použili ste goto!“ Zmyslom tohto nerdovného humoru je, že pre mnohých programátorov je použitie výrazu „goto“ takmer tým najhorším priestupkom, aký môže spáchať.

Existuje niekoľko dôvodov, prečo si vývojári softvéru myslia na takú malú úctu. Príspevok Edsgera W. Dijkstra Prípad proti vyhláseniu GO TO je pomerne skorým pojednaním o zlých aspektoch GOTO. V tomto článku Dijkstra uvádza: „[nadobudol som] presvedčenie, že vyhlásenie„ prejsť na “by malo byť zrušené zo všetkých programovacích jazykov„ vyššej úrovne “.“ Vyhlásenie Dijkstra „Prejsť na považované za škodlivé“ List nielenže spochybnil výrok goto, ale tiež spustil populárny trend v počítačovej vede, ktorý používal frázu „považovaný za škodlivý“ (hoci tieto dve slová sa predtým zjavne používali mimo programovania).

Mnoho programátorov od Dijkstra bolo pohryzených niektorými problémami s udržiavateľnosťou spojenými s používaním príkazov goto v určitých jazykoch. Ostatní programátori tieto príbehy počuli alebo im do nich vtĺklo toľko „Nepoužiješ goto“, takže nepotrebujú zažiť jeho nevýhody na vlastnej koži, aby si mysleli, že by nemali používať GOTO.

Aj keď sa zdá, že vyhlásenie goto má všeobecne zlú povesť, nie je bez priaznivcov. Frank Rubin napísal odpoveď na Dijkstra Prejsť na vyhlásenie, ktoré sa považuje za škodlivé (Marec 1968) s názvom GOTO Považuje sa za škodlivú „Považuje sa za škodlivú (marec 1987). V tomto liste Rubin napísal o tom, že Dijkstrov list mal vplyv na programátorov tak dramaticky, že „predstava, že GOT0 je škodlivá, je prijímaná takmer univerzálne, bez akýchkoľvek pochybností a pochybností.“ Z tohto pozorovania Rubin napísal: „Toto spôsobilo nevyčísliteľné škody v oblasti programovania, ktorá stratila účinný nástroj. Je to ako mäsiari zakazujúci nože, pretože pracovníci sa niekedy porezú.“ “ Všimnite si, že Dijkstra reagoval na Rubinov list s textom O trochu sklamajúcej korešpondencii. Na stránke Cunningham & Cunningham Wiki Go To sa hovorí o tomto výroku: „Učeň to používa bez premýšľania. Cestár sa tomu vyhýba bez premýšľania. Pán to používa premyslene.“

Existuje mnoho ďalších zdrojov, ktoré pokrývajú výhody a nevýhody používania príkazu goto. Nemám v úmysle tu debatu prehustiť inak, ako len stručným predstavením ranej histórie kontroverzie, ktorá už bola spomenutá. Počul som, ako niektorí vývojári v Jave tvrdia, že Java nemá vyhlásenie goto, a to je to, o čom chcem diskutovať vo zvyšku tohto príspevku na blogu.

Java vyhradzuje slovo „goto“ ako vyhradené kľúčové slovo. Je to však nepoužívané kľúčové slovo. To znamená, že hoci kľúčové slovo v skutočnosti neprináša nič produktívne, je to aj slovo, ktoré sa v kóde nedá použiť na názvy premenných alebo iných konštruktov. Nasledujúci kód sa napríklad nebude kompilovať:

balenie zásypu.príklady; / ** * Trieda demonštrujúca funkcionalitu podobnú Java. * / public class JavaGotoFunctionality {/ ** * Hlavná spustiteľná funkcia. * * @param argumenty Argumenty príkazového riadku: žiadne sa neočakávajú. * / public static void main (final argumenty String []) {final String goto = "Choď do postele!"; }} 

Ak sa pokúsim kompilovať tento kód, zobrazí sa mi chyba, aká sa zobrazuje na nasledujúcej snímke obrazovky.

Chybové hlásenie „očakáva sa“ s ukazovateľom v priestore pred znakom „goto“ dáva skúsenému vývojárovi jazyka Java dostatok vodítka na to, aby si rýchlo uvedomil, že s používaním výrazu „goto“ nie je niečo v poriadku. Pre niekoho nového v Jave to však nemusí byť také zrejmé.

Všeobecne nepoužívam konštrukciu goto, ale tiež si uvedomujem, že existujú situácie, v ktorých jej použitie vedie ku kódu, ktorý je čitateľnejší a používa menej bláznivé riešenia, ako keby ho nepoužíval. V Jave sa to tiež realizovalo a poskytuje sa podpora pre niektoré z najbežnejších situácií, v ktorých by bol príkaz goto najužitočnejší a pravdepodobne by bol skutočne výhodnejší ako alternatívy. Najjasnejším príkladom je štítok prestávka a označené ďalej Vyhlásenia. Tieto sú diskutované a demonštrované v sekcii Java Tutorials Branching Statements.

Schopnosť označiť konkrétne vyhlásenie a potom mať prestávka alebo ďalej použije sa skôr na toto vyhlásenie ako na jeho najbezprostrednejšie vyjadrenie (ako neoznačené prestávka alebo ďalej does) je obzvlášť užitočný v prípadoch, keď by vnorené slučky inak vyžadovali viac kódu a zložitejší kód, aby dosiahli to isté. Zistil som, že svoje dátové štruktúry a kód môžem často prepracovať, aby sa takýmto situáciám predišlo, ale to nie je vždy praktické.

Ďalším dobrým zdrojom súvisiacim s používaním funkcii podobných goto v Jave je 13. Jato vyhlásenie JDC Tech Tip z 13. júna 2000 a programovanie v Jave. Ako zdôrazňuje tento tip, štítky sa dajú skutočne použiť na akýkoľvek blok a neobmedzujú sa iba na ne prestávka a ďalej. Mám však skúsenosť, že nevyhnutnosť tohto prístupu je mimo prestávka a ďalej je oveľa menej časté.

Jedným dôležitým poznatkom o štítkoch je, že vykonávanie kódu sa na tento štítok doslova nevráti, keď rozbiť nejaký štítok je vykonaný. Namiesto toho tok vykonania smeruje k príkazu bezprostredne nasledujúcemu po označenom príkaze. Napríklad keby som mal vonkajšiu pre slučka s názvom „dustin:“, potom by prerušenie tohto postupu viedlo k prvému spustiteľnému príkazu nasledujúcemu po konci označeného pre slučka. Inými slovami, správa sa skôr ako príkaz „goto the statement following the labeled statement“.

Neuvádzam žiadne príklady použitia týchto štítkov prestávka alebo označené ďalej tu nájdete veľa dobrých príkladov, ktoré sa dajú ľahko nájsť online. Konkrétne dva zdroje, ktoré som už spomenul (Java Tutorials Branching Statements a Goto Statements a Java Programming Tech Tip), zahŕňajú jednoduché ilustračné príklady.

Čím viac pracujem v priemysle vývoja softvéru, tým viac som sa presviedčal, že vo vývoji softvéru je len málo absolútnych pozícií a že extrémistické pozície sa skoro vždy budú mýliť. Všeobecne sa vyhýbam použitiu goto alebo podobného kódu, ale sú chvíle, kedy je to najlepší kód pre danú prácu. Aj keď Java nemá priamu podporu goto, poskytuje podporu podobnú goto, ktorá spĺňa väčšinu mojich pomerne zriedkavých potrieb takejto podpory.

Tento príbeh, „Java je goto“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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