Вам нравятся языки, которые позволяют вам поставить «тогда» перед «если»? - PullRequest
9 голосов
/ 30 апреля 2010

Сегодня я читал мой код на C # и нашел следующую строку:

if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) return;

Обратите внимание, что вы можете без прокрутки сказать, что это оператор "if", который работает с ItemContainerGenerator.Status, но вы не можете легко сказать, что если предложение "if" оценивается как "true", метод вернется в этот момент. .

Реально мне следовало бы переместить выражение «return» в отдельную строку, но это заставило меня задуматься о языках, которые сначала разрешают часть «затем» в выражении. Если бы C # разрешил это, строка могла бы выглядеть так:

return if (ProgenyList.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated);

Это может быть немного "спорным", но мне интересно, что люди думают об этом виде конструкции. Это может сделать строки, подобные приведенным выше, более читабельными, но также может иметь катастрофические последствия. Представьте себе этот код:

return 3 if (x > y);

Логически мы можем вернуться, только если x> y, потому что нет «иного», но часть меня смотрит на это и думает: «Мы все еще возвращаемся, если x <= y? Если так, что мы возвращаем?» </p>

Что вы думаете о конструкции «тогда перед if»? Существует ли он на выбранном вами языке? Вы часто используете это? Извлечет ли это пользу из C #?

Ответы [ 15 ]

0 голосов
/ 21 июня 2010

На самом деле это похоже на многие вещи, это имеет смысл, когда вы используете его в ограниченном контексте (один слой), и совершенно бессмысленно, если вы используете его где-то еще.

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

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

0 голосов
/ 21 июня 2010

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

return (x > y) ? 3 : null;

иначе нет смысла использовать императивные конструкции типа

return 3 if (x > y);
return 4 if (x = y);
return 5 if (x < y);

imho Это странно, потому что я понятия не имею, где его использовать ...

0 голосов
/ 30 апреля 2010

Люди читают от начала до конца. При анализе потока кода пределы кратковременной памяти затрудняют чтение условий постфикса из-за необходимости дополнительного обратного отслеживания. Для коротких выражений это может не быть проблемой, но для более длинных выражений это повлечет за собой значительные издержки для пользователей, которые не выдержаны на языке, который они читают.

0 голосов
/ 30 апреля 2010

Грамматически некорректно ставить ответ перед вопросом, почему он будет отличаться в коде?

0 голосов
/ 30 апреля 2010

Это есть и в Perl, и в Ruby, и все работает нормально. Лично я в порядке с той функциональностью, которую вы хотите бросить в меня. Чем больше у меня есть вариантов написания кода, тем лучше общее качество, верно? «Правильный инструмент для работы» и все такое.

Реально, хотя, это своего рода спорный вопрос, так как уже довольно поздно для такого фундаментального дополнения в жизненном цикле C #. Мы находимся в точке, где любое незначительное изменение синтаксиса потребовало бы много работы для реализации из-за размера кода компилятора и его алгоритма синтаксического разбора. Для того, чтобы новое дополнение было даже рассмотрено, оно должно было принести немного функциональности, и это просто (не так) другой способ сказать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...