Почему C# требует parens вокруг условных выражений?

Я просто читал ТАК вопрос на Python и заметил отсутствие круглых скобок в для цикла. Посмотревший хороший мне, затем я задался вопросом: почему C# требует их?

Например, я в настоящее время должен писать:

if (thing == stuff) {
}

и

foreach (var beyonce in allthesingleladies) {
}

Таким образом, я задаюсь вопросом, почему я не могу записать:

if thing == stuff {
}

Существует ли синтаксическая неоднозначность в том операторе, о котором я не знаю?

PS, странно, фигурные скобки могут быть дополнительными для острот:

if (thing == stuff)
  dostuff();
6
задан Matt Sherman 14 August 2010 в 17:34
поделиться

5 ответов

Это синтаксическая «особенность», восходящая к C и, возможно, к какому-то языку до этого.

По сути, это был выбор между

if (condition) statement;

и

if condition then statement;

. В то время, когда зародился C, трендом были более короткие обозначения и меньшее количество ключевых слов.

4
ответ дан 8 December 2019 в 17:17
поделиться

[Я знаю, что я, вероятно, обиделся на нее, но я все равно должен сказать это]

Как программист преимущественно vb это одна вещь, которая раздражает меня до костей.На мой взгляд, скобки должны быть необязательными, а фигурные скобки - обязательными. Если просить слишком много, Microsoft может «позаимствовать» из vb в C #, введя в C # эквивалент Then.

Но зачем тогда беспокоиться? Microsoft разработала C # на основе C, C ++ и Java, каждый из которых помещает условие if в скобки, так почему же C # должен отличаться?


Edit

Честно говоря, я думаю, что это основано на принятии C # 4 необязательных и именованных параметров , функция, которая всегда была в VB (по крайней мере, с VB6), следующий выпуск C # (то есть C # 5.0) может также представить «новую» функцию, чтобы вам не приходилось вводить ненужные скобки.

Поскольку существует троичное условие if? truePart: falsePart , наличие if condition, then something или для тех, кто не знаком с C #, выглядящим как vb, if condition do something было бы неплохой идеей.

2
ответ дан 8 December 2019 в 17:17
поделиться

Кстати, если бы у меня были мои druthers, я бы разрешил один оператор вне скобок: начальный восклицательный знак. Меня раздражает, что тестирование кода для сложных отрицательных условий заканчивается лишним набором скобок по сравнению с тестированием кода для сложных положительных условий.

0
ответ дан 8 December 2019 в 17:17
поделиться

Это выбор языка дизайна, пришедший из Java, который, в свою очередь, произошел от C ++, который, в свою очередь, произошел от C, который, в свою очередь, произошел от ???

Python не нуждается в скобках в качестве отступа показывает намерение. F # делает то же самое. Это хорошая идея (ИМО).

0
ответ дан 8 December 2019 в 17:17
поделиться

Проще говоря, это связано с тем, как C / C ++ / C # обрабатывает пробелы. Вам нужен какой-то разделитель, поскольку операторы могут занимать несколько строк. Вам также нужен способ «блокировать» или группировать операторы в блок.

  • Использование C / C ++ / C # (), {}
  • Использование VB / VB.NET / VBScript / VBA Функция / Конечная функция, Sub / End Sub, If / Then / Else / Else If / End If, и так на. (Только для блокировки, поскольку языки на основе VB не поддерживают операторы, охватывающие несколько строк.)

Если ваш конкретный вопрос, вы используете () для создания выражения. Следовательно, вам нужен способ сообщить компилятору, что вы закончили с выражением, поскольку {} (блокирующие разделители) не требуются.

0
ответ дан 8 December 2019 в 17:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: