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

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

Проблемы

  • Нарушение биекции
  • Вы можете получить неверный идентификатор раньше, чем думаете
  • Также не используйте null для недопустимых идентификаторов.
  • Связывание флагов от вызывающего объекта с функциями

Решения

  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] Полуавтоматический

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

Теги

  • Нулевой

Заключение

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

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

связи





Больше информации





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

Code Smells — это всего лишь мое мнение.

Кредиты

Фото Markus Spiske на Unsplash

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

Борис Бейзер



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