Null или как выстрелить себе в ногу

Если вам не часто приходится писать проги и от большинства ошибок компиляции вас ввергает в шок, то эта статья именно для вас.

Речь пойдет пойдет о таком знаменитом феномене в программировании, как Null.

У начинающих программистов обычно бывает два состояния:

  1. Я знаю все, мне все побоку.
  2. Я не знаю ничего и делать ничего не буду.

Не хочу вас огорчить, они оба не правильны. Но вы достаточно умны если попали на эту страницу, значит уже не все потеряно.

Справка: «Выстрелить себе в ногу» — фраза из старой цитаты отца языка C++ Бьярне Строуструпа: «Си» позволяет очень просто выстрелить себе в ногу. На «Си++» сделать это сложнее, но, когда вам это удается, ногу отрывает полностью.

Фразу используют в самых различных интерпретациях. Лично мне она нравится в связке с понятием Null.

Часто бывает ситуация, когда пальцам нужно работать быстрее головы, и машинально забываешь делать проверки, пока пишешь крутой алгоритм. Весьма занятно смотреть на свое лицо в зеркало, после того, как алгоритм сваливается на пол пути. У новичков в 3-х из 10-ти случаев это происходит из-за всеми любимых ошибок «NullReferenceException» и «DivideByZeroException«. Остальные связаны в основном со скобочками, которых либо слишком много, либо нет. Ну и путают вызов статичных методов с методами из классов. Но не будем о грустном.

Не станем рассматривать большинство примеров, хватит и одного.

Ситуация:

  1. Вы объявили строковую переменную: string str;
  2. Не инициализировали ее/Не задали никакого значения (ну с кем не бывает)
  3. Обратились, скажем, ко второму символу: char k=str.ToCharArray()[1];
  4. Получили NullReferenceException
  5. Рвете на себе волосы и не понимаете почему ваш крутой алгоритм не работает.
  6. Profit

Давайте на чистоту, первые 2 недели каждодневного прогания, Null спалил у меня полугодовой запас нервных клеток. Поэтому делюсь этим с вами.

Если вы работаете в среде с хорошим отладчиком, раза со второго вы точно поймете в чем проблема, но как быть если вы не знаете что такое отладчик..?

Несколько основных вещей при разработке любого приложения, которые актуальны всегда и везде:

  • Ваш самый коварный враг = Null, он не появляется ниоткуда и никуда не уходит, он всегда ждет как бы прострелить вам ногу. В коде любой сложности есть ему место, его боятся и уважают, как самого задиристого старшеклассника в школе. Мне даже страшно писать его с маленькой буквы.
  • При работе с любыми сложными структурами, будь то массивы, динамические массивы, строки, классы, методы, делегаты, события, интерфейсы или простые не целочисленные переменные, всегда при работе с ними делайте проверку на длину входной строки, на существование следующего элемента массива, на объявленность той или иной структуры и ее инициализацию.
  • Не ленитесь всегда перед работой программы проверить входные данные.
  • Если вы уверены, что Null в переменной никак не появится, поставьте на всякий случай несчастный if (*struct* != null), ради всего святого.

Надеюсь эта маленькая статья заставит вас задуматься над лишней проверкой на Null, удачного дня и всех вкусняшек

maxspt

Оставить отклик

Ваш адрес эл.почты не будет опубликован.