В дебатах о возвращаемых переменных некоторые члены команды предпочитают метод, позволяющий вернуть результат непосредственно вызывающей стороне, тогда как другие предпочитают объявлять возвращаемую переменную, которая затем возвращается вызывающей стороне (см. Примеры кода ниже)
Аргументом для последнего является то, что он позволяет разработчику, отлаживающему код, находить возвращаемое значение метода, прежде чем он вернется к вызывающей стороне, тем самым облегчая понимание кода: это особенно верно там, где вызовы метода связаны последовательно.
Существуют ли какие-либо рекомендации относительно того, какой из них наиболее эффективен, и / или есть ли другие причины, по которым мы должны использовать один стиль вместо другого?
Благодарность
private bool Is2(int a)
{
return a == 2;
}
private bool Is3(int a)
{
var result = a == 3;
return result;
}
result
перед возвратом.stloc.0
иldloc.0
во второй версии). Но я думаю, что это происходит только в режиме отладки. И это не очень важно здесь в любом случае.a = b = c;
иa == b == c
я бы не стал писать что-то похожее,a = b == c
если вы можете. Когда я впервые увидел такую строку кода, мне потребовалось несколько секунд, чтобы понять, что происходит. Этот код выделялся. Я хотел бы поставить круглые скобкиa == 3
, но StyleCop это не нравится - хорошая причина использовать версию номер один. Что-то еще: это по сути лямбда, напримерa => (a == 3)
. Зачем добавлять строку кода в уже раздутую тривиальную функцию?Ответы:
Поскольку я использую Resharper с Visual Studio, Ctrl-RV (или Ctrl-Alt-V, если вы используете привязки клавиш Resharper / IntelliJ) превращает ваш первый пример во второй. Поэтому, когда я хочу отладить, я могу сделать это достаточно легко. И если я забуду положить его обратно, мне не будет плохо, потому что Ctrl-RI вернет его обратно, чтобы было легче читать.
Серьезно, тратьте свое время на споры о более важных вещах. Например, где поставить ведущие скобки или пробелы против вкладок.
источник
Лично я считаю, что первый пример легче читать. Вы все еще можете отладить его, установив точку останова в операторе возврата и добавив
a == 2
в окно просмотра или используя быстрый просмотр.Но это действительно вопрос личных предпочтений. Обе версии в порядке.
источник
Когда код так же легко читаем как ваш пример, нет ничего плохого в возврате результата логической операции, такой как
return a == 2
. Однако, если возвращаемое значение является более сложным утверждением или выглядит примерно такзатем вы захотите использовать переменные для хранения частей этого и упростить оператор return для удобства чтения.
источник
В простом примере, подобном этому, любой из них в порядке.
Для более сложных примеров я предпочитаю второй способ. Это только потому, что он более читабелен, и другим, скорее всего, придется поддерживать код.
источник
result
, которое само по себе является совершенно неописательным и бесполезным идентификатором.