Null pointer

Nu jau gandrīz 4 gadus strādāju par programmētāju. Protams, reāla sajēga par to, ko es daru, neradās uzreiz, taču visu laiku esmu centies mācīties jaunas lietas. Pēdējā laikā arvien vairāk ir jāprogrammē programmēšanas valodā Java. Atceros, ka augstskolā Java kurss bija nosaukts par “Programmēšanas pamati”. Pasniedzējs bija vājš un pats neko daudz nesaprata. Atceros tik, ka iesākumā bieži nācās saskarties ar ļoti populāro kļūdas paziņojumu – NullPointerException. Sākumā likās, ka nekā drausmīgāka par to būt nevar, jo no tiem paziņojumiem nekas nebija saprotams. Taču vēlāk, kad bija nedaudz skaidrāks, kā tas viss pamatā darbojas, izrādījās, ka šis kļūdas paziņojums ir ļoti pat informatīvs un ar laiku automātiski radās iemaņas rakstīt kodu, lai no šādas kļūdas principā izvairītos. Taču neskatoties uz to, ka domāšana ir mainījusies un koda rakstīšanas ieradumi arī, reizēm gadās uzdurties uz kādu neparedzētu situāciju un tad atkal jāsecina – es šādam gadījumam nebiju gatavs. Bet nekas traks – viena papildus pārbaude un viss notiek.

Ne reizi vien gadās, ka neparedzētie gadījumi notiek tālu prom, kur sistēma tiek lietota citādāk, nekā testa vidē, un tad programma izpildes laikā brēc uz mani, ka neesmu paredzējis to, ka padotais objekts varētu neeksistēt, vai būt tukšs.

Jāteic, ka šāda preventīva pieeja, kas ir jāpiekopj, lai viss darbotos kā nākas, ne reti noder arī dzīvē. Jo ir labi būt gatavam tam, ka kaut kas šķietami pašsaprotams varētu arī neeksistēt. Ja kaut kas visu laiku ir bijis, nenozīmē, ka tā arī būs. Ir jābūt gatavam “apstrādāt” šādu gadījumu.

četri komentāri

2009-05-06 17:51:18 link Pēteris

Defensive programming ir labi, bet noteikti vajag stratēģiju, kur un kā.

Why “Defensive Programing” is a Code Smell: http://news.ycombinator.com/item?id=561277

2009-05-06 19:35:31 link Ivars

Jāpiekrīt Pēterim. Gluži manas domas.
Piemēram, tas pats NullReferenceException (ok, es esmu .NETists) bieži ir indikācija, ka programmā kaut kas ir safukājies, t.i., iekšējo datu integritāti Tu nevari garantēt. Tādos gadījumos, iespējams, Tu gribi, lai viss nogāžās ar zilām liesmām.

P.S. Java exception handlings gan ir nedaudz savādāks par .NETisko…

2009-05-07 11:13:56 link Puuks

Stratēģija, you say. Papētīšu. Paldies par ideju ;)

2009-05-09 00:27:31 link Guntars

njibumbum

Komentē