Legenda o Java NullPointerException-u (null pokazivaču)
Null pokazivač, navodno najjači ubica pod nebesima.
On prvobitno nije nosio to ime; null pokazivač je izvorno nosio dvodelno ime Izuzetak, a null pokazivač mu je bilo samo oružje. Ali pošto je ubijao previše, ljudi su s vremenom zapamtili samo tri reči: null pokazivač.
U svetskim veštinama važi: samo brzina je nepobediva. Igla null pokazivača poznata je po brzini i lukavstvu — najmanji propust znači žrtve.
... ...
Zovem se Wang Er; prošla je godina dana otkako sam došao u ovaj čudni svet. Čekao sam godinu dana, ali od onoga što navodno prati prenos u drugi svet — starog mentora, čarobnog prstenja, sistema — još uvek nisam otkrio ništa.
A ovaj svet deluje previše čudno: čini se da se zove Java kontinent. Jedino znam da se najmoćniji u ovom svetu zove Object, navodno nekakvo biće na nivou pretka puta; ne znam šta to tačno znači, jer sam, čini mi se, i dalje samo slabašan početnik. Drugi glavni likovi bi već trebalo da uzlete u vilinski svet posle godinu dana, a ja još uvek ne mogu da bacim ni malu vatrenu loptu.
Ah, da — gorenavedeni pasus ispričao je pripovedač kojeg sam slušao u čajdžinici; ime null pokazivač mi je uvek delovalo čudno, kao da sam ga negde već čuo.
Glavobolja me ponovo uhvatila; više se ne sećam zašto sam došao ovde. Sećam se samo da mi je ime Wang Er; za ostalo, osećam jedino da mi je ovaj čudni svet nekako poznat, ali ništa ne mogu da povratim iz sećanja.
Šta da se radi, živeću kako god dolazi.
Odlučio sam da pronađem null pokazivača; iako se priča da je strašan, čuo sam i da ne voli da ubija bez razloga, pa valjda neće klati nedužne. Za sada, samo prema tim trima rečima osećam neku bliskost; moram ga pronaći, kako bih povratio sećanja!
Raspitivao sam se dugo; ispostavilo se da je null pokazivač direktni naslednik treće generacije Organizacije izuzetak. Organizacija izuzetak je najstrašnija ubicačka organizacija ovog sveta, a null pokazivač je njen trenutno najbolji ubica.
Priča se da je, kada se null pokazivač rodio, oko vrata mu visila igla; zatim je cela Java kontinent bila mesecima zasipana snegom bez prestanka, a više komada kopna u Linux šumi je direktno potonulo. Zato mu je otac RuntimeException i dao ime null pokazivač.
Neobične pojave koje su pratile rođenje null pokazivača privukle su pažnju vrha Organizacije izuzetak; priča se da su ga deda Exception i Throwable, vodeći lik cele Organizacije izuzetak, lično primili i ocenili da null pokazivač ima izvanredan talent i svetlu budućnost.
Treba znati da je Throwable na čelu Organizacije izuzetak, a njega je lično postavio Object. Kao Object-ov najpoverljiviji pouzdanik, pratio ga je desetinama hiljada godina; sav prljav i težak posao obavlja Organizacija izuzetak koju je Throwable osnovao — zaista se može reći da stoji odmah ispod jednog, a iznad svih ostalih.
Throwable ima samo dvoje dece: Error i Exception. U legendi je Error neumoljiv i surov, pod njim niko ne preživi; jedva da ih je nekoliko onih koji su videli Error-a pa ipak preživeli.
Širom kontinenta kruže samo njihove strašne legende; niko ne zna kada će se pojaviti, ali čim se pojave, to uglavnom znači da ste već mrtav čovek.
A najstrašniji od onih o kojima sam čuo jesu ubice OutOfMemoryError i StackOverflowError, jer na ulazu u prestonicu uvek visi rang-lista, a ovo dvoje su stalno na vrhu liste ubica; null pokazivač je mogao samo da se zadovolji trećim mestom. Naravno, mnogi na kontinentu veruju da će ga null pokazivač s vremenom prestići.
Raspitivanjem sam saznao samo toliko. Narednih dana prošao sam kroz nebrojene gradove i pustare, prešao pustinje i džungle; konačno, jednog dana, stigao sam u prestonicu kontinenta — Hip.
I to ime mi zvuči poznato; ma kako bilo, prvo da uđem u grad.
Po ulasku u grad otkrio sam da je ovde veoma čudno: čini se da je ceo grad neverovatno mlad, kao da nema ni jednog odraslog! U ulicama vrvi od mladih.
Zbunjen, ušao sam u gostionicu koja se zvala Gostionica Tongfu.
„Gospodine, želite li nešto da pojedete ili da odsednete?” upitao me je s trunkom ulagivanja mali koji je ličio na konobara.
„Odsednem; odvedite me u najbolju sobu. Ovaj novac prvo ostavljam kod tebe kao kaparu, ako ne bude dovoljno, traži još od mene.” Putujući, već sam se prilično snašao u običajima ovakvih mesta.
„Mali, šta je ovde? Nemate odrasle?” pitao sam u hodu ovo dete koje mi je išlo do pola visine. Po mojoj proceni, bilo je visoko ne više od metra, verovatno oko sedam-osam godina; zar su ovde trgovci toliko bezobzirni da zapošljavaju dečiju radnu snagu? Ali to ipak nije bilo sasvim nekonzistentno, jer su i gosti oko mene bili istih godina; neki su čak pušili i pili!
„Gospodin ste zaista duhoviti, ali vidim da ste tek pristigli u prestonicu. Da budem iskren, u celoj prestonici gotovo da nema nekog starijeg od 15 godina; oni preko 15, kažu, odlaze u penziju u kraju koji se zove starački kvart! Uzmite mene: ove godine nisam više mlad — već sam navršio 8 godina; za moje je godine već pola noge u grobu. Eh, i telo mi iz godine u godinu sve gore.”
Gledajući ovog malog konobara koji je govorio sasvim ozbiljno, sve sam više osećao kako je ovaj grad jeziv! Osam godina, kako to? Sa osam godina dete bi trebalo kod kuće da gleda crtaća?! Pa već pola noge u grobu!
„Ali vidiš da sam ja mnogo viši od tebe, zar ti to nije čudno?” pitao sam ga u čudu.
„Pa šta je tu čudno? Da nisam u detinjstvu popio previše Sanlu-a, možda bih i ja izrastao toliko visok!” mali konobar mi je pomalo ljutito odgovorio.
Dobro, još koja reč i rasplamsaće se; ako skoči i udari me po kolenu, biće nevolja.
Narednih nekoliko dana, raspitivanjem, otkrio sam da se deo u kom sam se nalazio zove mlada četvrt; cela prestonica ima samo te dve zone. U mladoj četvrti zaista nema nikog starijeg od 15 godina; neki umru samo nekoliko dana nakon rođenja, a meštani su na to već navikli. Za njih je i sama nada da će doživeti više od 15 godina i ući u starački kvart već san.
Posumnjao sam da Organizacija izuzetak ovde vrši atentate, ali ispostavilo se da nije; ljudi ovde kao da su se već navikli. Za njih je život samo preživljavanje; svaka smrt je bez upozorenja — neko možda upravo šutira loptu, pa iznenada umre; neko umre na nužniku, a da pre smrti nije ni obrisao dupe; dosta o tome, pomalo je gadno.
Baš kad sam izgubio strpljenje i planirao da obiđem starački kvart, našao me je čovek u crnom.
„Ko si ti?” upitao sam ga na oprezu.
„Ja sam IOException,” crni čovek me je pogledao ledenog izraza i rekao.
„Šta želiš od mene?”
„To ne moraš da znaš; pođi sa mnom!”
Hteo sam da odbijem — štaš, ko se s vašom Organizacijom izuzetak sastane, nastrada ili pogine; ko bi pošao s tobom.
Ali nije mi dao izbora. Osetih kako mi se sve vrti, kako letim nebom, a onda sam izgubio svest. Kad sam se probudio, video sam da ležim na ogromnom krevetu; na stolu je gorio štapić tamjana, a u celoj sobi bili su samo sto, stolica i mesto gde sam ležao.
Soba je bila mala, verovatno jedva desetak kvadrata, ali opet me obuzelo ono poznato osećanje; vrtoglavica u mislima nije htela da prođe.
Pre nego što sam stigao da razmislim dalje, vrata su se otvorila.
„Ti si; pošto me dovodiš ovamo?”
„Hajde, neko želi da te vidi.”
Opet mi nije dao izbora; kada bi moja borbenost bila 5, IOException bi verovatno imao nekoliko desetina hiljada.
Ponovo ta prokleta vrtoglavica, ali ovaj put, posle samo nekoliko sekundi, našao sam se u nekoj bašti; u sredini bašte sredovečan muškarac u žutoj odori mirno je pio čaj. Na njemu nisam osećao nikakav moćan sjaj, čak manje nego pritisak koji je IOException ostavljao na mene. Ko je on?
Pre nego što su mi misli odlutale, IOException se poklonio i rekao: „Vaše Veličanstvo, čovek je doveden.”
„Mm, možeš da se povučeš,” sredovečni muškarac se okrenuo, lica bez ikakvog izraza.
Otprilike sam pogodio gde sam, pa sam se smirio; ovde možda mogu pronaći odgovore.
S obzirom na to da mu ne mogu pobeći ni ako mi nešto naumi, seo sam direktno naspram njega i rekao: „Vi ste, Vaše Veličanstvo Object, zar ne? S kim imam čast?”
Sredovečni muškarac nije mario; nije direktno odgovorio na moje pitanje, već je s blagom šalom rekao: „Nema potrebe za knjiškim rečima, pričaj kao normalan čovek.”
... ...
Ovo ne ide po šablonu! Pa zar to što sam već neko vreme ovde pa imitiram govor starih ljudi? Zašto mi onda zamera?!
„Onda ću direktno: želim da znam gde je null pokazivač.”
„Null pokazivač je na smeni u palati; šta ti treba od njega?”
„Za sada ne mogu reći.”
„Heh, zar te nije radoznalo zašto te poznajem i zašto sam te doveo ovamo?”
„Jeste, ali neću da pitam.”
Object je srknuo čaj i mirno odgovorio: „Dobro je što mladi ima karakter, ali treba da razumeš da previše krut lako puca.”
„Ne razumem; ovde ionako ne vidim nikog starog, osim tebe.” Prirodno sam zaključio da Object tu nešto muti; cela prestonica je puna dece, bez prevare — to bi duhove lagao!
Object je na to namrstio čelo; zaćutao je na tren, polako ustao, prišao jednom vrbinom drvetu i, sa rukama na leđima, rekao: „Zar ne znaš zbog čega je sve ovo?”
Naravno da ne znam; da znam, zar bih pitao tebe?!
Opet tišina... ...Ta me atmosfera činila veoma neprijatnim. Baš kad više nisam izdržao i hteo da progovorim, Object je iznenada rekao: „Odvedite ga da vidi null pokazivača.”
„Da, Vaše Veličanstvo!” Iznenada se iza mene pojavio mršav starac u crvenoj odori i prepao me.
Nisam želeo da stvaram nove nevolje; intuicija mi je govorila da ovde ne treba dugo ostati; iako je sve bilo pomalo nerazumljivo, pošao sam za starcem u crvenoj odori.
... ...
„Vaše Veličanstvo, da li je to on?” rekao je jedan ćelavi krupan čovek čija se pojava napola nazirala u vazduhu.
„Još uvek se ne može potvrditi... ali preostalo nam je malo vremena; sledeći ciklus se brzo približava.”
„Ciklus, opet ciklus. Da li nam je ostala još koja nada?” mrmljao je krupni čovek; nije se znalo da li sebi ili sredovečnom muškarcu.
Sredovečni muškarac, i dalje sa rukama na leđima, podigao je pogled prema nebu punom vrbinih paperja i rekao: „Ovaj život treba da bude konačni obračun.”
... ...
Nedugo zatim, doveo me je pred vrata jedne sobe i bezizražajno rekao: „Uđi; null pokazivač je unutra.”
Zaustavio sam korak, okrenuo se i upitao ga: „Ko si ti? Da li smo se već sretali?”
Starac u crvenom se čudno nasmešio: „Možda. Ja sam IndexOutOfBoundsException, a null pokazivač mi je dobar prijatelj.”
To je zaista dugačko ime. Čuo sam za njega; glasine kažu da je njegova moć takođe vrlo velika, možda ne manja od null pokazivačeve, i da je poznat po neobičnim uglovima napada. Ali u poređenju sa slavom null pokazivača, deluje skromnije — nije čudo što u palati služi poput kakvog starog dvoranina.
Nisam dalje razmišljao, klonuo sam glavom i ušao u sobu. Čim sam ušao, ugledao sam lik u potpuno belom, okrenut leđima; uspravna pojava kao da će probiti nebo, a sjaj oko njega bio je neobično moćan — bar među svima koje sam video, ulazio je u prva tri. Null pokazivač — zaista zaslužuje glas!
Prišao sam sredini sobe, osvrnuo se i otkrio da ovo liči na nekakav hram predaka; dok sam još osmatrao okolo, hladan glas mi je dopro do uva:
„Tvoj sjaj mi je veoma mrzak!”
Okrenuo se; otkrio sam da uopšte ne mogu da vidim kako null pokazivač izgleda — lice mu je bilo kao da je prekriveno mozaikom. Njegove reči donele su mi još više nedoumica; samo sam osećao da mi je njegov sjaj veoma poznat, a njegove reči su mi delovale besmisleno. Zato sam ga oprezno iskušao:
„Znaš li ko sam ja?”
Čuvši moje reči, on mi je korak po korak prišao i pomirisao me uz vrat; srce mi se steglo. Iako želim da razjasnim šta mi je, ne prodajem telo, pa sam zakoračio unazad i rekao:
„Šta želiš?”
Null pokazivač je namrstio čelo i, kao da sam sebi govori, rekao: „Nije to, nije to... ovo je... sjaj pravila? Ali na njemu očigledno nema nikakvog talasa energije.”
Video sam da je zanesen, kao da razmišlja o nečemu, pa sam koračao do mesta gde je on malopre stajao i pogledao napred: ah, ovo je bila njihova porodična hronika! Ovo je hram predaka Izuzetka!

Pošto sam pregledao ovu porodičnu hroniku, sve mi je sinulo; izgleda da sam nešto shvatio. Odjednom mi se u glavi pojavio hladan mašinski glas: „Dobavljena porodična hronika Izuzetka; stepen avanture +100.”
Majku mu, sistem, ovo je sistem! Suze su mi potekle same od sebe; kakav je to sistem zadataka koji ne daje nikakav nagoveštaj? Brzo sam povikao:
„Sisteme, sisteme, još si tu? Čekam onlajn, hitno je.” Ali odgovora nije bilo! Kakav je to bedni sistem! Baš kad sam hteo da prospe psovke, null pokazivač me je video kako vičem poput budale i sa nevericom mi rekao:
„Razumeo si pravilo?”
Zastao sam, hm? Zar više nisam borac stepena 5? Moć pravila? Zvuči kao nešto vrlo napredno?
„Baci soju, stvori vojsku!”
„Prizovi vetar!”
„Prizovi kišu!”
„Ratnici, svi u nizu preda mnom!”
Nikakve reakcije... Šta je ovo? Pa moć pravila? Ni devet reči istine ne pomažu?
I null pokazivač je delovao zbunjeno; lupkao se po slepoočnici, besno me pogledao i rekao:
„Zar nisi došao da tražiš mene? Izgovori svoje pitanje, a onda se skloni!”
Zaista, ovaj sistem me je toliko zbunio da sam zaboravio pošto sam došao; brzo sam rekao:
„Ti me poznaješ, zar ne? Da li ti se čini da sam ti nekako poznat? Želim da znam svoje poreklo!”
Null pokazivač je opet zastao; gledao me je, zaćutao na tren, pa odgovorio: „Ne znam!”
Bilo mi je čudno; s onim izrazom lica kao da ima zatvor, mora da me je video; sigurno laže. Pošto je tako...
„Onda mi reci kojim načinom se može odbraniti od napada vaših Izuzetaka?”
Null pokazivač se razbesneo; tek što je hteo da ustane i progovori, iz vazduha je iznenada dopro glas: Ispuni mu želju!
On je hladno frknuo, bacio mi knjigu na kojoj je pisalo samo jedno slovo — catch — i još jedan token na kom je pisalo catch, pa ledeno rekao: „Sve što želiš da znaš nalazi se ovde.” Zatim je mahnuo rukavom i otišao.
Pogledao sam knjigu na stolu, razmislio, pa je ipak počeo da listam.
Tako, Exception i njegovi sinovi — osim grane RuntimeException — zovu se Checked Exception; tokenom catch mogu da odgovorim na njihove napade! Uključujući i null pokazivača — od sada ih se ne plašim!
Ali zašto mi je ovo dao? Malopre je izgledao kao da će me udariti, a onda mi iznenada dao sve ovo? I šta je ono moć pravila koju je stalno pominjao? I zašto je ovaj grad tako čudan?
Preštampano sa: https://mp.weixin.qq.com/s/PDfd8HRtDZafXl47BCxyGg, autor: Ai Xiaoxian
