Почему может'т вы это, если вы пытаетесь выяснить, является ли интервал между числам:
if(10 < x < 20)
Вместо этого, вы'придется делать
if(10<x && x<20)
что кажется немного накладные расходы.
Одна из проблем заключается в том, что тернарный реляционных построить внесет серьезные проблемы парсера:
<expr> ::= <expr> <rel-op> <expr> |
... |
<expr> <rel-op> <expr> <rel-op> <expr>
Когда вы пытаетесь выразить грамматика с тех производств, используя типичный ПГС, вы'll найти, что есть сдвиг-уменьшить конфликт в точке первого в <отн-ОП>
. Синтаксический анализ должен впередсмотрящим произвольное количество символов, чтобы увидеть, если есть вторая в <отн-ОП>
прежде чем он может решить, стоит ли бинарные или тройные форма была использована. В этом случае, вы не могли просто игнорировать конфликт, потому что это привело бы к неверному разбирает.
Я'м не говорю, что эта грамматика является смертельно неоднозначное. Но я думаю, что вы'd нужен отката парсер, чтобы правильно справиться с ней. И что представляет собой серьезную проблему для языка программирования, где быстрая компиляция является главным пунктом продажи.
Это's просто синтаксис. '<' - это бинарная операция, и большинство языков, Дон'т сделать его переходящим. Они могли бы сделать это, как вы говорите, но потом кто-то будет спрашивать, почему вы можете'т сделать другие операции в троичной, а также. "Если (12 < х != 5) на"?
Синтаксис-это всегда компромисс между сложностью, выразительностью и понятностью. Разные дизайнеры языке делать различные выборы. Например, в SQL есть и"x между Y и Z и", где X, Y и Z могут по отдельности или всех столбцов, константы, или связанными переменными. И я'м счастлив, чтобы использовать его в SQL, и я'м счастливы одинаково не беспокоиться о том, почему это's не в Java.
Потому что синтаксис просто не'т определяется? Кроме того, х &л; г
значение типа bool, так что типа bool < инт
означает? Это'т действительно накладных; кроме того, можно написать утилиту способ если вы действительно хотите - между ними(10,х,20)
- я бы'т себя, но...
Ты человек, и поэтому вы понимаете, что термин "и 10 < х < 20" и значит. Компьютер не'Т есть эта интуиция, поэтому он читает это как: на "(10 < х) < 20" по.
Например, если Х = 15, это будет рассчитать:
(10 < х) => правда
на "Правда < 20" в => ???
В программировании на C, это будет хуже, так как нет истинного\ложные ценности. Если x = 5, то расчет будет:
10 < х => 0 (значение false)
0 < 20 => не-0 число (истинно)
и поэтому на "10 &л; 5 < 20", которая будет возвращать true! :С
Потому что в <
оператор (и большинство других) являются бинарными операторами (они принимают два аргумента), и `(правда-правда) - это не допустимое логическое выражение.
В Java конструкторы язык мог создать язык, чтобы позволить синтаксис как тип вы предпочитаете, но (я'м предполагаю) они решили, что он не стоил более сложные правила разбора.
упрощение:
a = 10; b = 15; c = 20
public static boolean check(int a, int b, int c) {
return a<=b && b<=c;
}
Это проверяет, если b лежит между A и C
Если (10 < х || х < 20)
Это заявление будет оценивать справедливо для чисел между 10 и 20. Это примерный эквивалент до 10 < х < 20`