2009-04-04 2 views
3

Для быстрых задач, где я использовать только экземпляр объект один раз, я знаю, что я могу сделать следующее:Анонимный синхронный синтаксис - хороший или плохой?

int FooBarResult = (new Foo()).Bar(); 

Я говорю это вполне приемлемо, с не одноразовыми предметами и более удобным для чтения, чем альтернатива:

Foo MyOnceUsedFoo = new Foo(); 
int FooBarResult = MyOnceUsedFoo.Bar(); 

Что вы используете и почему?
Вы бы использовали этот тип анонимного экземпляра в производственном приложении?
Предпочтение: с круглыми скобками "(новый Foo()). Bar();" или без "new Foo(). Bar();"?

(под ред абстрагировать вопрос от случайного класса)

ответ

8

примечание стороны относительно случайных чисел: На самом деле, нет, ваш конкретный пример (new Random().Next(0,100)) совершенно недопустимо. Сгенерированные случайные числа будут далеко не однородными.


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

Кстати, если вы решили пойти в одиночном случае, опустите ненужные парсеры (new MyObject().Method() будет делать).

+0

Распределение отсутствует, если вы генерируете только одно случайное число. И если Random() имеет плохое поведение при холодном запуске, вы не получаете равномерных чисел в любом случае. –

+0

@ danbruc: Технически, есть дистрибутив, но да, я получаю вашу мысль. Ты прав. Но я видел, что разработчики используют этот метод для генерации случайных чисел в цикле несколько раз. Я подумал, что здесь очень важно упомянуть об этом. –

+0

Полный ответ на это - вы не должны даже думать о том, чтобы генерировать множественные числа таким образом. –

3

Если вы используете объект только один раз, первый способ лучше все время.

Он короче и яснее, поскольку он явно указывает, что вы не будете использовать объект позже.

В любом случае, он будет скомпилирован с одним и тем же CIL, поэтому нет никакой выгоды для второй формы.

1

Первое заявление. Это более читаемо, имеет меньше кода и не оставляет темпов вокруг.

6

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

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

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

+0

+1 Относительно отладки - отличная точка –

0

На самом деле первый путь, создавая временный, является более читаемым по двум причинам:

1), это более кратким

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

2) она сообщает то, что вторая форма не делает, что объект используется временно.

Чтение, я знаю, что этот экземпляр никогда не будет использоваться снова, поэтому в моем «ментальном компиляторе», который я использую, чтобы понять код, который я читаю, мне не нужно ссылаться на него не более, чем код содержит ссылку на него.

Как отмечает Мехрдад, делать это со случайным классом - это не очень хорошая идея.

Как он также отмечает, избыточные круглые скобки делают его менее кратким; если вы не находитесь в пыльном уголке языка, предположите, что компетентные программисты знают приоритет оператора языка. В этом случае, даже если я не знаю приоритета оператора, альтернативный синтаксический анализ (вызов new на возврате функции) является бессмысленным, поэтому «очевидное» чтение является правильным чтением.

int RandomIndex = (new Random()).Next(0,100); 
int RandomIndex = new Random().Next(0,100); 
+0

Если метод принимает довольно много параметров, первый вариант может быть менее читаемым. Читаемость намного больше похожа на грамматику, чем на математику. Правила обычно правильны, но иногда нарушение правила делает лучший код. – tvanfosson

1

Второй - отладка дружественной, в то время как первая - нет. Из-за этого второй выигрывает.

Смежные вопросы