Как я могу ссылаться на коммит в комментарии к проблеме на GitHub?

Лично мне обычно не нравятся возвращаемые параметры по ряду причин:

  • в вызове не всегда очевидно, какие параметры являются ins и какие выходы
  • вы как правило, нужно создать локальную переменную, чтобы поймать результат, в то время как возвращаемые значения могут использоваться inline (что может быть или не быть хорошей идеей, но по крайней мере у вас есть опция)
  • кажется мне чище иметь «дверь» и «выходную дверь» к функции - все входы идут здесь, все выходы выходят там
  • Мне нравится держать списки аргументов как можно короче

У меня также есть некоторые оговорки в отношении метода пары / кортежа. Главным образом, часто нет естественного порядка для возвращаемых значений. Как читатель кода узнает, является ли результат. Первым является фактор или остаток? И разработчик мог бы изменить порядок, который нарушил бы существующий код. Это особенно коварно, если значения одного типа, так что никакая ошибка компилятора или предупреждение не будут сгенерированы. Фактически, эти аргументы применимы и к возвращаемым параметрам.

Вот еще один пример кода, этот бит немного менее тривиальный:

pair<double,double> calculateResultingVelocity(double windSpeed, double windAzimuth,
                                               double planeAirspeed, double planeCourse);

pair<double,double> result = calculateResultingVelocity(25, 320, 280, 90);
cout << result.first << endl;
cout << result.second << endl;

Выполняет ли это печать на земле и курс, или курс и путевая? Это не очевидно.

Сравните с этим:

struct Velocity {
    double speed;
    double azimuth;
};
Velocity calculateResultingVelocity(double windSpeed, double windAzimuth,
                                    double planeAirspeed, double planeCourse);

Velocity result = calculateResultingVelocity(25, 320, 280, 90);
cout << result.speed << endl;
cout << result.azimuth << endl;

Я думаю, что это яснее.

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

434
задан wonea 21 July 2017 в 08:15
поделиться