Код запаха 160 — Недействительный идентификатор = 9999

Maxint — очень хорошее число для недействительного идентификатора. Мы никогда не достигнем его.

TL;DR: Не объединяйте реальные ID с недействительными. На самом деле: Избегайте идентификаторов.

Проблемы

  • Нарушение биекции

  • Вы можете добраться до недействительного идентификатора раньше, чем думаете.

  • Не используйте нули для недопустимых идентификаторов.

  • Передача флагов от вызывающей функции к функциям

Решения

  1. Моделируйте особые случаи с помощью особых объектов.

  2. Избегайте 9999, -1 и 0, поскольку они являются допустимыми доменными объектами и связывают реализацию.

  3. Внедрить нулевой объект

Контекст

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

Затем мы изобрели «ошибку на миллиард долларов».

Затем мы выросли и стали моделировать специальные сценарии с помощью полиморфных специальных значений.

Пример кода

Неправильный

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#define INVALID_VALUE 999

int main(void)
{    
    int id = get_value();
    if (id==INVALID_VALUE)
    { 
        return EXIT_FAILURE;  
        // id is a flag and also a valid domain value        
    }
    return id;
}

int get_value() 
{
  // something bad happened
  return INVALID_VALUE;
}

// returns EXIT_FAILURE (1)
Войти в полноэкранный режим Выйти из полноэкранного режима

Правильно

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
// No INVALID_VALUE defined

int main(void)
{    
    int id;
    id = get_value();
    if (!id) 
    { 
        return EXIT_FAILURE;
        // Sadly, C Programming Language has no exceptions
    }  
    return id;
}  

get_value() 
{
  // something bad happened
  return false;
}

// returns EXIT_FAILURE (1)
Войти в полноэкранный режим Выйти из полноэкранного режима

Обнаружение

[X] Полуавтоматическое

Мы можем проверить наличие специальных констант и специальных значений в коде.

Теги

  • Null

Заключение

Мы должны использовать числа для связи с внешними идентификаторами.

Если внешнего идентификатора не существует, то это не число.

Отношения

Запах кода 120 — Последовательные идентификаторы

Maxi Contieri ・ Mar 10 ・ 2 min read

Code Smell 12 — Null

Maxi Contieri ・ Oct 31 ’20 ・ 2 min read

#codenewbie #учебник #oop

Дополнительная информация

Null: Ошибка на миллиард долларов

Maxi Contieri ・ Nov 18 ’20 ・ 6 min read

#codenewbie #учебник #программирование #webdev

Y2K22 — ошибка, которая нас смущает

Макси Контьери ・ Jan 13 ・ 3 min read

Отказ от ответственности

Запахи кода — это только мое мнение.

Кредиты

Фото Markus Spiske на Unsplash


Жучки прячутся в углах и скапливаются на границах.

Борис Бейзер

Программная инженерия Великие цитаты

Maxi Contieri ・ Dec 28 ’20 ・ 13 min read

#codenewbie #программирование #цитаты #программное обеспечение

Эта статья является частью серии CodeSmell.

Как найти зловонные части вашего кода

Maxi Contieri ・ May 21 ’21 ・ 7 min read

#codenewbie #учебник #качество кода #новички

Оцените статью
devanswers.ru
Добавить комментарий