Nazwiska i numery rejestracyjne, które psują serwery - historia największej pomyłki informatyki
Null to dość specyficzna koncepcja w programowaniu i bazach danych. Oznacza ona „wartość, która jest brakiem wartości”, przy czym nie jest zerem ani wartością pustą. Nie jest również wartością nieznaną, czy nieustaloną. To po prostu brak wartości.
Null od lat sprawia wiele kłopotów programistom. W językach o silnym typowaniu wartość null może przybrać zmienna lub obiekt każdego typu. Próba odniesienia się wartości w takim obiekcie, bądź wywołanie jakiejś z niego metody kończy się jednym z licznych wyjątków typu „null reference exception”.
Początek istnienia „nulla” można prześledzić do roku 1965, kiedy to Tony Hoare, twórca języka programowania Algol, postanowił zaimplementować w nim właśnie tą wartość. Hoare to dziś informatyczna legenda: wielu programistów zetknęła się z logiką Hoare'a służącą do określania poprawności algorytmów, a na pewno każdy zetknął się z wynalezionym przez niego algorytmem sortowania QuickSort.
Hoare w 2005 r. nazwał swój „wynalazek” nulla swoją pomyłką na miliard dolarów. Niektórzy wręcza nazywają go największą pomyłką informatyki.
Wykorzystywanie pustej wartości
Jaki jest null, taki jest, i programiści nauczyli się z nim żyć. Niestety oznacza to zazwyczaj dodawanie dodatkowego kodu mającego na celu sprawdzanie, czy wartość nie jest null, lub nadawanie zmiennym wartości domyślnych. Nie pomaga w tym wszystkim fakt, że w niektórych językach null nie jest traktowany jako wartość i nie możemy do niego porównywać. Tak działają na przykład tzw. nulle zgodne z ANSI w SQL. Porównanie z null zawsze zwraca tam false (nawet porównanie null do null!), a do sprawdzenia, czy wartość nie jest null musimy użyć słówka kluczowego is.
Są jednak tacy, którzy próbują wykorzystać tę wartość na swoją korzyść. Jak niedawno czytałem, jeden z kalifornijskich kierowców sprawił sobie (legalnie, płacąc za to dodatkowo), tablicę rejestracyjną z napisem NULL. Liczył, że w ten sposób oszuka kamery sprawdzające ruch uliczny. Tak historia ma smiutne zakończenie - niedoszły nieuchwytny pirat drogowy otrzymał mandaty przeznaczone dla wszystkich samochodów, których tablic nie udało się odczytać, a więc miały w policyjnej bazie danych wartość... Tak, NULL właśnie.
My name is Null
Zupełnie niezamierzone problemy z „wartością bez wartości” mają osoby o nazwisku Null. Przykładowo, BBC donosił o Jennifer Null, której nie działało wiele systemów internetowych w których próbowała się zarejestrować (w tym takie potrzebne jej do pracy - jako nauczycielka nie mogła wejść do serwisu z informacjami o zastępstwach). Ja sam spotkałem się z podobną sytuacją: klient zgłaszał, że w bazie danych jego kontrahentów pojawiają się wartości Null w kolumnie nazwiska - która jednak takich wartości nie przyjmowała. Po długich poszukiwaniach okazało się, że to „Null„ - czyli czteroliterowy łańcuch oznaczający nazwisko R. Nulla - jednego z ich niemieckich klientów.
Oczywiście gdzieś tam w tle tego wszystkiego jest zła implementacja wartości null - porównanie łańcucha znaków, nawet zawierającego słowo null, nie powinno tak działać. Ale, jak widać, czasami działa, powodując kłopoty z „największą pomyłką w historii informatyki”.