Я смею сказать, что есть некоторые кромки, где может быть быть значительным - но они будут исчезающе редкими. Я согласен с вами: сначала пишите для чтения.
Обратите внимание, что если метод очень коротким, JIT компилятор может инлайн - но если это большой метод, который вы только что произойдет, чтобы выйти из быстро, это, вероятно, не будет. В крайних случаях вам может понадобиться разделить метод на два: один короткий метод (который может быть встроен), чтобы проверить, является ли остальная часть метода действительной, а другая - фактически выполнять эту работу. Затем вы можете выполнить тест сначала, а затем вызвать второй метод. Честно говоря, мне это не нравится, и только предложит сделать это после того, как вы обнаружили, что это действительно было проблемой ... но по крайней мере у вас есть предложение для ваших коллег о возможной ситуации, когда это действительно было показано чтобы быть проблемой :)
Одна вещь, которую вы, может хотите думать о причине, чтобы избежать вызова метода, заключается в том, что если оценка аргументов занимает много времени. Например, рассмотрим регистрацию:
Log.Info("I did something: {0}", action.GenerateDescription());
Теперь, если GenerateDescription
занимает много времени, вы не хотите, чтобы выполнить его, если регистрация не произойдет в любом случае ... так что вы могли бы написать:
if (Log.IsEnabled(LogLevel.Info))
{
Log.Info("I did something: {0}", action.GenerateDescription());
}
Другой альтернативой является использование делегата отложить оценку - хотя это может иметь свою собственную (небольшую) стоимость:
Log.Info("I did something: {0}",() => action.GenerateDescription());
или с использованием преобразования метода тентовым:
Log.Info("I did something: {0}", action.GenerateDescription);
Это вполне может не быть проблемой ваши коллеги беспокоиться об этом, но это стоит подумать :)
Что альтернатива? Проверка состояния перед вызовом? Не очень СУХОЙ. – Lazarus
Ну, как обычно, все зависит. Этот вопрос был вызван конкретным фрагментом кода, который мог бы избежать вызова метода простым заявлением else, и я решил, что он не нужен по тем же причинам, о которых говорилось выше. В любом случае, мы остановились на другом, но я чувствовал, что это из-за страха. –