2010-11-21 3 views
1

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

  • задающие процедуры без параметров
  • если [не] СЛОВА О
  • пока [не] СЛОВА О

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

Возьмем следующий код для примера:

if something 
statement1 
if not something 
statement2 

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

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

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

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

+0

Ну, это, конечно, кажется, что это усложняет ситуацию; Чтобы написать выше, вы должны взять на себя труд в том, чтобы написать «что-то» дважды (или установить переменную, равную «чем-то» раньше.) Если у вас было два условия, вам пришлось бы написать их оба снова в не-' ', чтобы получить такое же поведение и т. д. По крайней мере, ваши дети получат право применять законы Де Моргана! – mquander

ответ

3

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

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

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

bool result = something 
if result 
    statement1 
if not result 
    statement2 

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

+0

Невозможно сохранить результаты во временных локальных переменных - на этом языке нет переменных. Мне интересно, как оба теста преуспели - вот почему я спросил, можете ли вы делать все на одном языке без 'else', что вы могли бы сделать на языке с' else' – Axarydax

+0

@Axarydax: без локальных переменных может быть сложно напишите код, который переключает какое-то состояние, потому что если вы пишете «if state = A», тогда state: = B, если state = B, тогда укажите: = A », то если начальное состояние A, вы сначала установите его в B, а затем обратно Еще раз. Я предполагаю, что у вас есть какое-то состояние, которое вы можете читать и изменять. –

1

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

0

IMHO Плохая идея научить детей дублировать код.

+0

повторяет одно условие одного слова, рассматриваемое как дубликат кода? – Axarydax

3

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^