защитные методы кодирования

Я также обнаружил, что System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke() не всегда является диспетчером целевого контроля, точно так же, как dotNet пишет в своем ответе. У меня не было доступа к диспетчеру управления, поэтому я использовал Application.Current.Dispatcher, и он решил проблему.

16
задан 5 revs, 2 users 92% 20 November 2008 в 19:14
поделиться

15 ответов

Всегда фигурные скобки использования:

if(boolean)
    oneliner();
nextLineOfCode();

не то же как:

if(boolean)
{
    oneliner();
}
nextLineOfCode();

, Если острота () является функцией #defined, и она не определяется тогда, Ваша следующая строка кода внезапно становится подвергающейся если (). То же самое относится за циклы и т.д. С фигурными скобками тогда, следующая часть кода никогда неумышленно становится условным выражением на если/для и т.д.

16
ответ дан 30 November 2019 в 15:02
поделиться

Лучшие 3 защитных метода кодирования, которые я использую,

  1. поблочное тестирование
  2. поблочное тестирование
  3. поблочное тестирование

нет никакой лучшей защиты по качеству Вашего кода, чем хороший модульный тест для поддержки Вас.

14
ответ дан 30 November 2019 в 15:02
поделиться

Это - простое и очевидное, но я НИКОГДА НИКОГДА не повторяю ту же строковую константу дважды в моем коде, вызываю, я ЗНАЮ, что, если я, я буду записывать одного из них неправильно:) Константы использования, люди!

13
ответ дан 30 November 2019 в 15:02
поделиться

Всегда помещайте фигурные скобки после if/for/while..., даже если существует только один отдельный оператор после. BTW D. Crockford думает, что это лучше также: Необходимые блоки

8
ответ дан 30 November 2019 в 15:02
поделиться

При сравнении строки с константой запишите

if ("blah".equals(value)){}

вместо

if (value.equals("blah")){}

для предотвращения NullPointerException. Но это - единственное время, я использую предложенный стиль кодирования (причина, "если (= 1)..." не возможно в Java).

8
ответ дан 30 November 2019 в 15:02
поделиться

Одна из вещей, которые я всегда пытаюсь помнить, когда я нахожусь в мире JavaScript, состоит в том, чтобы всегда запускать возвращаемое значение функции на той же строке как слово клавиши Return.

function one(){
    return {
        result:"result"
    };
}

function two(){
    return 
    {
        result:"result"
    };
}

Эти 2 функции не возвратят то же значение. Первая функция возвратится, Объект со свойством заканчивается набор для "заканчиваний". Вторая функция возвратится undefined. Это - действительно простая ошибка, и это происходит из-за фанатичной стратегии Вставки Точки с запятой JavaScript. Точки с запятой являются полудополнительными в JavaScript и из-за этого, механизм JavaScript добавит полуенотов, где это думает, что это, должен быть. Поскольку return на самом деле допустимый оператор, точка с запятой будет вставлена после того, как оператор возврата и остальная часть функции будут по существу проигнорированы.

7
ответ дан 30 November 2019 в 15:02
поделиться

Из моего блога:

  1. Думают положительные и возвращаются рано плюс, избегают глубокого вложения. Вместо

    , если (значение! = пустой указатель) {... делают что-то со значением...} возврат

    запись

    , если (значение == пустой указатель) {возврат}... делают что-то со значением...

  2. Избегают "строковых констант" (т.е. тот же текст в кавычках больше чем в одном месте). Всегда определяйте вещественную константу (с именем и дополнительным комментарием, что это означает), и используйте это.

6
ответ дан 30 November 2019 в 15:02
поделиться

Лично, мне не нравится этот защитный стиль, он делает код трудным чтением ro.

уровень 4 предупреждения компилятора VC определит эту (возможную) ошибку.
"предупреждение C4706: присвоение в условном выражении"

можно включить просто это определенное предупреждение компилятора на любом уровне:

#pragma warning(3,4706)
5
ответ дан 30 November 2019 в 15:02
поделиться
  • Всегда инициализируют переменные
  • Использование const везде, где я могу (не используя mutable)
  • , Избегают пустого динамического выделения памяти или других ресурсов
  • Всегда фигурные скобки использования
  • , примеры использования Кода и тесты для любого класса прежде, чем кодировать реализацию
  • Включают столько полезных предупреждений, сколько я могу (-Wall -Wextra -ansi -pedantic -Werror как минимум)
  • Использование самый простой инструмент, который решает проблему (в моей текущей среде, это bash-> grep-> awk-> Python-> C++).
5
ответ дан 30 November 2019 в 15:02
поделиться

Я прекратил использовать языки, где можно сделать

if a = 5: print a

, Это сохранило меня тонны головных болей =).

На более серьезной ноте... Я теперь всегда пишу фигурные скобки прямо после того, как я запишу мой if с и for циклы, и затем заполню их впоследствии. Это удостоверяется, что мои скобки всегда выровненные.

4
ответ дан 30 November 2019 в 15:02
поделиться

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

3
ответ дан 30 November 2019 в 15:02
поделиться

Вещи пары:

  • Да, блоки с 1 строкой. Используйте фигурные скобки... heck, самый хороший IDE сделает их для Вас.
  • Комментарий Ваш код после того, как Вы пишете его или перечитываете Ваши комментарии, если Вы сделали это загодя. Удостоверьтесь, что Ваш код все еще делает то, что говорят комментарии.
  • Поблочное тестирование является большой нейтрализацией к перечитыванию Вашего кода.
  • Всегда регистрируют исключение... или, НИКОГДА не ловят исключение, не говоря так, по крайней мере, в отладке.
2
ответ дан 30 November 2019 в 15:02
поделиться

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

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

РЕДАКТИРОВАНИЕ: если (указатель) не читаем поэтому в наше время, я предпочитаю если (ПУСТОЙ УКАЗАТЕЛЬ! = указатель)

2
ответ дан 30 November 2019 в 15:02
поделиться

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

1
ответ дан 30 November 2019 в 15:02
поделиться

Несколько предложений по встроенному программированию на C в статье Rules for Defensive C Programming с embedded.com.

2
ответ дан 30 November 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: