Язык программирования без ключевого слова ELSE - это сложнее? - PullRequest
1 голос
/ 22 ноября 2010

Я работаю над простым языком программирования для детей, основанным на Karel .Для управления потоком программ в настоящее время я предоставляю следующие средства (в псевдокоде):

  • определение процедур без параметров
  • если [не] ВЫРАЖЕНИЕ ВЫРАЖЕНИЯ
  • при [нет] ВЫРАЖЕНИЕЗАЯВЛЕНИЕ

У меня нет средств для возврата из процедуры, и Я не предоставляю оператор else.

Примите следующеекод для примера:

if something
 statement1
if not something
 statement2

Выполнение кода переходит к if, выполнение statement1, если something - true;затем тестирование, если something не соответствует действительности (, но состояние программы изменилось! ), затем выполнение statement2. Это может привести к успешному завершению обоих тестов.

Ограничивает ли это программиста? До сих пор мне удавалось решить все мои примеры задач, просто используя if ... if not ... или сначала if not, затем if.

Итак, мой вопрос: Требуется ли добавление оператора else? Это сделало бы язык немного сложнее с большим количеством ключевых слов.Все ли проблемы, которые можно было бы решить с помощью оператора else, разрешимы и без него, хотя и более сложными?

Или опущенное выражение else фактически делает язык более сложным и нелогичным?

Ответы [ 4 ]

3 голосов
/ 22 ноября 2010

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

Концепция делает что-то, если что-то истинно, в противном случае что-то еще не так уж странно и сбивает с толку, на самом деле это звучит довольно просто: необходимость снова вычислять и опускать выражение просто для проверки его отрицания .. это бесплатный (в смысле «без дополнительной сложности») дополнительный синтаксический сахар, который автоматически применяется при разработке языка.

Я видел, что многие другие функции действительно более бесполезны по сравнению с оператором else ... тогда вы не учитываете тот факт, что оценка условия в два раза может быть вредной для побочных эффектов или для сложности (впустую процессор?) Или сам факт того, что вы уже рассчитали его, и вам придется сделать это снова для отсутствия языка не потому, что это разумно.

3 голосов
/ 22 ноября 2010

Если something стоит дорого, тогда ваш язык с else может вызвать проблемы, потому что оценка будет выполняться дважды.

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

Конечно, эти проблемы можно решить, сохранив результат во временной локальной переменной:

bool result = something
if result
    statement1
if not result
    statement2

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

1 голос
/ 22 ноября 2010

Если у something есть побочные эффекты, чем ваш подход приведет к тому, что они произойдут дважды, что, вероятно, не то, что вы хотите.

0 голосов
/ 22 ноября 2010

ИМХО Плохо учить детей дублировать код.

...