защитные методы кодирования - PullRequest
16 голосов
/ 06 ноября 2008

С тех пор, как я впервые написал

if ($a = 5) {
   #  do something with $a, e.g.
   print "$a";
}

и прошел обычную головоломную сессию

  • почему результат всегда верен
  • почему $ a всегда 5

до тех пор, пока я не понял, я назначил 5 $, вместо сравнения.

Поэтому я решил написать такое условие выше как

 if (5 == $a)

другими словами:

всегда помещайте постоянное значение слева от оператора сравнения, что приводит к ошибке компиляции, если вы забудете добавить второй знак "=".

Я склонен называть это защитным кодированием и склонен полагать, что это двоюродный брат защитного программирования , не в алгоритмическом масштабе, а по ключевому слову.

Какие защитные методы кодирования вы разработали?


Одна неделя спустя:

Большое «спасибо» всем, кто ответил или может добавить другой ответ в будущем.

К сожалению (или, скорее, к счастью!), Нет единого правильного ответа. Для этого мой вопрос был широким, спрашивая больше мнений или опыта, а не фактов.

Ответы [ 15 ]

3 голосов
/ 06 ноября 2008

Возвращение копии изменяемого объекта, то есть копии массива, а не самого изменяемого объекта.

2 голосов
/ 19 августа 2009

Несколько предложений по встроенному C-программированию в статье Правила для защитного C-программирования со встроенного сайта.

2 голосов
/ 06 ноября 2008

Пара вещей:

  • Да, 1-строчные блоки. Используйте скобки ... черт возьми, большинство хороших IDE сделают их для вас.
  • Прокомментируйте ваш код после того, как вы его напишите, или перечитайте ваши комментарии, если вы сделали это заранее. Убедитесь, что ваш код по-прежнему выполняет то, что говорится в комментариях.
  • Модульное тестирование - отличный запасной вариант для повторного чтения вашего кода.
  • Всегда регистрировать исключение ... или, НИКОГДА не ловить исключение, не говоря об этом, по крайней мере при отладке.
2 голосов
/ 06 ноября 2008

Избегайте ненужного теста. Пример

  1. if (bool == true)
  2. Указатель проверяет, если (указатель)

EDIT: if (указатель) не читается, поэтому в настоящее время я предпочитаю if (NULL! = указатель)

1 голос
/ 24 ноября 2008

Установлен Resharper;) Тогда мне не нужно писать «5 == a», чтобы получить предупреждение, если я сделал что-то не так:)

...