Ответ 1
Код, который вы опубликовали, будет лучше написан как:
if (a)
{
foo();
}
if (b)
{
boo();
}
moo();
Скобки в С# имеют две цели:
- Они создают область для объявлений переменных.
- Они группируют операторы вместе так, что условные обозначения и циклы и т.д. могут применяться к нескольким операциям за раз.
Тот, кто написал код, который вы опубликовали, решил не использовать их для второй цели. Операторы if
могут быть полностью законными без использования каких-либо фигурных скобок, но они будут применяться только к оператору, который сразу же следует за ними (например, вызов foo()
после первого if
).
Поскольку существует законный прецедент для фигурных скобок, который не имеет ничего общего с потоком управления, однако, вполне приемлемо, чтобы кто-то поставил фигурные скобки в случайных местах, которые не имеют никакого отношения к операторам if
.
Этот код:
foo();
{
var a = boo();
}
{
var a = moo();
}
... эквивалентен этому коду:
foo();
var a = boo();
var b = moo();
... но вы заметите, что я не могу назвать вторую переменную a
, потому что она больше не отделена от первой переменной фигурными скобками.
В качестве альтернативы, может кто-нибудь объяснить, почему эта нотация может быть полезна?
Есть три возможности, о которых я могу думать:
- Они хотели повторно использовать имена переменных в разных частях метода, поэтому они создали новую область переменных с фигурными скобками.
- Они думали, что скобки могут быть приятным наглядным пособием для инкапсуляции всей логики, найденной внутри них.
- На самом деле они были смущены, и программа не работает так, как они думают.
Первые две возможности предполагают, что они фактически выполняют больше, чем вызов foo()
и moo()
в реальном производственном коде.
В любом случае, я не думаю, что любая из этих возможностей является веским основанием для написания такого кода, и вы полностью в своих правах хотите переписать код таким образом, чтобы это было легче понять.