Об ошибке на триллион долларов

В таких языках, как Java, исключения нулевого указателя (NPE) — это своего рода ходячая шутка, которая иногда устаревает. Большинство NPE можно избежать, если они обрабатываются на уровне языка. Конечно, файл может не существовать в файловой системе, но если обработчик вынужден проверять нулевой результат, NPE не произойдет.

Простое решение — тип объединения. Типы Union существуют не во всех типизированных языках. Например, представьте тип объединения следующим образом:

во-первых, давайте не будем использовать этот тип, а просто воспользуемся String, что в большинстве языков позволило бы нам вернуть либо String, либо null (и это плохо):

приведенное выше будет скомпилировано на большинстве языков, но если мы назовем его:

вышеприведенное будет скомпилировано, но завершится ошибкой с NPE, если возвращаемое значение равно null. Проблема конечно в том, что вызов charAt будет компилироваться, но компилироваться не должен. Это должно быть одна из самых глупых вещей во всем языковом дизайне. Они полностью настроили нас на провал! Что мы должны сделать, так это:

И способ заставить компилятор заставить вас сделать такую ​​проверку — использовать тип union в исходной функции:

Вопрос только в том, как компиляторы могут заставить вас проверять наличие нулей? Они должны заставить вас проверить, но как они могут определить, что вы эффективно проверили наличие нулей? Точно сказать не могу.

А как насчет входных значений? Что-то вроде этого:

и goDoDatabaseStuff было таким:

поэтому в этом случае он не будет компилироваться, потому что `goDoDatabaseStuff` требует String, но передается StringOrNull, поэтому вам нужно будет сделать это:

Или еще лучше, заставьте вас объявить другую переменную:

Пожалуйста, поделитесь своими идеями о том, как лучше справляться с NPE!