Zwracanie wartości NULL (lub zera numerycznego lub logicznego fałszu) w celu zasygnalizowania błędu jest błędne zarówno pod względem technicznym, jak i koncepcyjnym.
Z technicznego punktu widzenia obciążasz programistę sprawdzaniem wartości zwracanej od razu , dokładnie w punkcie, w którym jest ona zwracana. Jeśli otworzysz dwadzieścia plików z rzędu, a sygnalizacja błędu zostanie wykonana przez zwrócenie wartości NULL, wówczas konsumujący kod musi sprawdzić każdy plik odczytywany indywidualnie i zerwać wszelkie pętle i podobne konstrukcje. To idealny przepis na zaśmiecony kod. Jeśli jednak zdecydujesz się zasygnalizować błąd poprzez zgłoszenie wyjątku, konsumujący kod może zdecydować się natychmiast obsłużyć wyjątek lub pozwolić, aby pojawił się tyle poziomów, ile potrzeba, nawet w wywołaniach funkcji. To sprawia, że kod jest znacznie czystszy.
Koncepcyjnie, jeśli otworzysz plik i coś pójdzie nie tak, zwracanie wartości (nawet NULL) jest nieprawidłowe. Nie masz nic do zwrócenia, ponieważ operacja się nie zakończyła. Zwracanie NULL jest koncepcyjnym odpowiednikiem „Udało mi się odczytać plik, a oto, co zawiera - nic”. Jeśli to właśnie chcesz wyrazić (to znaczy, jeśli NULL ma sens jako rzeczywisty wynik dla danej operacji), to w każdym razie zwróć NULL, ale jeśli chcesz zasygnalizować błąd, użyj wyjątków.
Historycznie błędy były zgłaszane w ten sposób, ponieważ języki programowania, takie jak C, nie mają wbudowanej obsługi wyjątków, a zalecany sposób (przy użyciu skoków w dal) jest nieco owłosiony i nieco sprzeczny z intuicją.
Problem ma także stronę konserwacyjną: z wyjątkami musisz napisać dodatkowy kod, aby poradzić sobie z awarią; jeśli tego nie zrobisz, program zawiedzie wcześnie i mocno (co jest dobre). Jeśli zwrócisz NULL, aby zasygnalizować błędy, domyślnym zachowaniem programu jest zignorowanie błędu i kontynuowanie, dopóki nie doprowadzi to do innych problemów na drodze - uszkodzonych danych, segfault, NullReferenceExceptions, w zależności od języka. Aby wcześnie i głośno zasygnalizować błąd, musisz napisać dodatkowy kod i zgadnij, co: to część, która zostaje pominięta, gdy masz napięty termin.