Ответ 1
Те, кто не поддерживался в прежние времена. И даже сейчас вам нужно дать специальный компилятор для включения этих ключевых слов. Вероятно, потому, что у старой базы кода могли быть некоторые функции || переменные с именем "и" или "не".
Или мы все придерживаемся наших учителей "&, ||,!" способ?
Любые мысли о том, почему мы должны использовать один или другой?
Мне просто интересно, потому что несколько ответов утверждают, что этот код должен быть настолько естественным, насколько это возможно, но я не видел много кода с "и, или, а не", в то время как это более естественно.
Те, кто не поддерживался в прежние времена. И даже сейчас вам нужно дать специальный компилятор для включения этих ключевых слов. Вероятно, потому, что у старой базы кода могли быть некоторые функции || переменные с именем "и" или "не".
Мне нравится идея оператора not
, потому что она более заметна, чем оператор !
. Например:
if (!foo.bar()) { ... }
if (not foo.bar()) { ... }
Я предлагаю, чтобы второй был более видимым и читаемым. Я не думаю, что один и тот же аргумент обязательно применяется к формам and
и or
.
"Что во имя? То, что мы называем & &, || или! Любое другое имя будет пахнуть как сладкое ".
Другими словами, естественное зависит от того, к чему вы привыкли.
Одна из проблем с их использованием (для меня в любом случае) заключается в том, что в MSVC вам нужно включить iso646.h
или использовать (в основном непригодный)/Za-переключатель.
Основная проблема, с которой я сталкиваюсь, - это Catch-22, что они обычно не используются, поэтому они требуют, чтобы мой мозг активно обрабатывал значение, где старомодные операторы более или менее укоренены (вроде как разница между чтением изученного языка и вашим родным языком).
Хотя я уверен, что смогу преодолеть эту проблему, если их использование станет более универсальным. Если бы это произошло, у меня возникла бы проблема с тем, что некоторые логические операторы имеют ключевые слова, а другие нет, поэтому, если используются альтернативные ключевые слова, вы можете увидеть выражения типа:
if ((x not_eq y) and (y == z) or (z <= something)) {...}
когда мне кажется, что у них должны быть альтернативные токены для всех операторов (по крайней мере сравнения):
if ((x not_eq y) and (y eq z) or (z lt_eq something)) {...}
Это объясняется тем, что альтернативные ключевые слова (и орграфы и триграфы) были предоставлены не для того, чтобы сделать выражения более читабельными - потому что исторически в некоторых местах были (и, возможно, еще) клавиатуры и/или кодовые страницы, что не имеют определенных знаков препинания. Например, в инвариантной части кодовой страницы ISO 646 (неожиданность) отсутствуют символы "|
", "^
" и "~
" среди других.
Хотя я программировал С++ с довольно долгого времени, я не знал, что ключевые слова "и" или "и" не были разрешены, и я никогда не видел его.
Я искал в своей книге на С++, и я нашел небольшой раздел, в котором упоминается альтернативное представление для обычных операторов "&", "||" и "!", где он объясняет, что они доступны для людей с нестандартными клавиатурами, у которых нет "&! |" символы.
Немного похоже на триграфы в C.
В принципе, меня смущает их использование, и я думаю, что я не был бы единственным. Использование представления, которое является нестандартным, должно действительно иметь веские основания для использования. И если он используется, он должен использоваться последовательно в коде и описан в стандарте кодирования.
Операторы орграфа и тригара были фактически разработаны больше для систем, не имеющих стандартного набора символов ASCII, таких как мэйнфреймы IBM (которые используют EBCDIC). В древние времена механических принтеров эта вещь называлась "цепочкой из 48 символов", которая, как видно из названия, содержала только 48 символов. A-Z (верхний регистр), 0-9 и несколько символов. Поскольку один из недостающих символов был символом подчеркивания (который представлялся как пробел), это могло бы заставить работать с такими языками, как C и PL/1, реальную забавную деятельность (это два слова или одно слово с подчеркиванием???).
Обычный C/С++ кодируется символами, а не орграфами. Хотя мне было известно, что #define "NOT", поскольку он делает смысл булевого выражения более очевидным, и его визуально сложнее пропустить, чем тощий "!".
Я хотел бы использовать || и && в нормальной речи. Люди очень стараются неправильно понять, когда я говорю "и" или "или"...
Мне лично нравятся операторы, которые выглядят как операторы. Это все математика, и если вы не начнете использовать операторы "добавить" и "вычесть", они начнут выглядеть немного непоследовательными.
Я думаю, что некоторые языки подходят к слову-стилю, а некоторые подходят для символов, хотя бы потому, что они привыкли, и это работает. Если он не сломался, не исправляйте его.
Существует также вопрос о приоритете, который, по-видимому, является одной из причин для введения новых операторов, но кто может быть обеспокоен тем, чтобы узнать больше правил, чем им нужно?
В случаях, когда я программирую имена, непосредственно сопоставленные с реальным миром, я склонен использовать "и" и "или", например:
if(isMale or isBoy and age < 40){}
Приятно использовать их в Eclipse + gcc, поскольку они выделены. Но тогда код не компилируется с некоторыми компиляторами: - (
Мне нравится идея, но не используйте их. Я так привык по-старому, что мне не выгодно делать это в любом случае. То же самое справедливо для остальной части нашей группы, однако у меня есть опасения, что мы, возможно, захотим переключиться, чтобы помочь будущим программистам не споткнуться о старые символы.
Итак, чтобы подвести итог: он много не использовался из-за следующей комбинации
Спасибо за ваши мысли