Должен ли я полностью объявить одноразовые объекты?

Если мне нужно сделать что-то вроде этого:

var connection = new Connection(host);
connection.Execute(Commands.Delete);

Есть ли что-то не так в этом:

(new Connection(host)).Execute(Commands.Delete);

Первый пример может быть более читабельным, но второй работает лучше, если мне нужно сделать это несколько раз:

(new Connection(anotherHost)).Execute(Commands.Create);
(new Connection(someOtherHost)).Execute(Commands.Update);
(new Connection(host)).Execute(Commands.Delete);

4 ответа

Решение

Первое, что я человек Java, и я не использовал C#, но, основываясь на вашем коде и зная сходство с Java, я могу сказать следующее:

Если ваш класс Connection поддерживает информацию о состоянии, то имеет смысл каждый раз создавать новый объект. Но если он не имеет состояния, то создавать несколько объектов довольно неэффективно. Вы можете создать и повторно использовать то же самое.

То есть, если вы не можете установить "хост" для соединения после того, как оно создано, то оба упомянутых вами подхода не должны иметь никакого значения.

Ваш Connection реализовать класс IDisposable? Затем:

using (var connection = new Connection(host))
{
    connection.Execute(Commands.Delete);
}

Чем больше вы многословны, тем легче будет отладка.

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

Например. Мы начнем с простой идеи, которая просто занимает некоторое место для выражения:

transactionTime = generationTime + retrievalTime + processingTime + loggingTime

И здесь у нас есть более сложная идея, которую мы можем выразить в одной строке:

logTransactionData(processTransaction(retrieveTransaction(generateTransactionQuery())))

Я думаю, что первый пример легче понять с первого взгляда, чем второй, хотя длина его символов примерно одинакова.

Итак, в общем: подумайте, насколько вероятно, что вам понадобится отладить строку, а также ваше отношение сложности идеи к строке.

Да, вы инициализируете новый объект, используете его и теряете его! Вы не можете использовать его снова, и он будет где-то там, пока GC не соберет его! Таким образом, нет никакого вреда в хранении новых инициализированных объектов в переменной, а объявление их в другой строке делает ваш код более читабельным.

Другие вопросы по тегам