Общее программирование - вызов не пустого метода, но без использования значения

StackOverflow https://stackoverflow.com/questions/1231287

Вопрос

Это общее программирование, но если оно имеет значение, я использую target-c. Предположим, есть метод, который возвращает значение, а также выполняет некоторые действия, но вас не волнует возвращаемое значение, а только то, что он делает. Вы бы просто вызвали метод, как если бы он был пустым? Или поместить результат в переменную, а затем удалить его или забыть об этом? Выскажите свое мнение, что бы вы сделали, если бы у вас была такая ситуация.

Это было полезно?

Решение

Типичным примером этого является printf, который возвращает int ... но вы редко видите это:

int val = printf("Hello World");

Другие советы

Да, просто вызовите метод, как если бы он был пустым. Вы, вероятно, делаете это все время, не замечая этого. Оператор присваивания '=' на самом деле возвращает значение, но оно используется очень редко.

Это зависит от среды (язык, инструменты, стандарт кодирования, ...).

Например, в C вполне возможно вызвать функцию без использования ее значения. С некоторыми функциями, такими как printf, который возвращает int, это делается постоянно.

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

.
(void) my_function_returning_a_value_i_want_to_ignore().

Здесь на самом деле есть две отдельные проблемы:

<Ол>
  • Должны ли вы заботиться о возвращаемом значении?
  • Если вы назначите его переменной, которую вы не собираетесь использовать?
  • Ответ на вопрос № 2 - громкое "НЕТ" - если, конечно, вы не работаете с языком, где это было бы незаконно (на ум приходит ранний Turbo Pascal). Нет абсолютно никакого смысла в определении переменной только для того, чтобы ее выбросить.

    Первая часть не так проста. Как правило, существует причина возврата значения - для идемпотентных функций результат является единственной целью функции; для неидемпотентных это обычно представляет некоторый код возврата, указывающий, была ли операция завершена нормально. Конечно, есть исключения - например, цепочка методов .

    Если это часто встречается в .Net (например), возможно, существует проблема с взломом кода > ОКК .

    Когда я вызываю функцию, которая возвращает игнорируемое значение, обычно это происходит потому, что я делаю это в тесте для проверки поведения. Вот пример на C #:

        [Fact]
        public void StatService_should_call_StatValueRepository_for_GetPercentageValues()
        {
            var statValueRepository = new Mock<IStatValueRepository>();
    
            new StatService(null, statValueRepository.Object).GetValuesOf<PercentageStatValue>();
    
            statValueRepository.Verify(x => x.GetStatValues());
        }
    

    Меня не волнует тип возвращаемого значения, я просто хочу убедиться, что метод был вызван для поддельного объекта.

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

      

    Атрибут warn_unused_result вызывает предупреждение, если вызывающая функция с этим атрибутом не использует возвращаемое значение. Это полезно для функций, где не проверка результата является либо проблемой безопасности, либо всегда ошибкой, такой как realloc.

         int fn () __attribute__ ((warn_unused_result));
         int foo ()
         {
           if (fn () < 0) return -1;
           fn ();
           return 0;
         }
    
         

    выдает предупреждение в строке 5.

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top