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.
![Największa pomyłka informatyki: nazwiska i numery rejestracyjne, które psują serwery](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F08%2Fkod-programowanie-min.png&w=1200&q=75)
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.
![class="wp-image-988221"](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2019%2F08%2Faudi-car-car-wallpapers-2394.jpg&w=1200&q=75)
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”.