If-Else

If-Else - Messages

#1 Posted: 8/23/2012 6:05:20 PM
impersonalis

impersonalis

1 likes in 11 posts.

Group: User

Очень хотелось бы увидеть вариант блока IF без ELSE
#2 Posted: 8/23/2012 8:17:35 PM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

If - это функция. Она, как и все функции, возвращает значение, поэтому она должна иметь возможность вычислить это значение при любом раскладе. Если это значение не важно, можно написать

[MATH]if(Condition;Expression;0)[/MATH]
В качестве альтернативы можно было бы только генерировать ошибку при проходе алгоритма по незаданному else-пути, как это сделано, например, в erlang. Но это ведь не то, что Вам надо?
С уважением, Михаил Каганский
#3 Posted: 8/24/2012 3:43:05 AM
impersonalis

impersonalis

1 likes in 11 posts.

Group: User

Wrote

If - это функция. Она, как и все функции, возвращает значение, поэтому она должна иметь возможность вычислить это значение при любом раскладе. Если это значение не важно, можно написать

[MATH]if(Condition;Expression;0)[/MATH]
В качестве альтернативы можно было бы только генерировать ошибку при проходе алгоритма по незаданному else-пути, как это сделано, например, в erlang. Но это ведь не то, что Вам надо?



Спасибо за ответ, но то, что if это функция - утверждение, в рамках ЯП, спорное (скорее уж оператор). В любом случае (если в SMath Studio это функция), удобный дизайн может реализовывать else-ветвь за пользователя, "автоматом" возвращая 0 в случае если ветвь не определена (подобно тому как int main можно заменить на void main).
#4 Posted: 8/24/2012 4:05:23 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Ну, насчёт ЯП - мы тут на форуме конкретного продукта, и говорим о конкретных вещах. Так что давайте не обобщать, а то ведь я знаю ещё и такой факт об if-else, что это - речевая конструкция, определяющая сложноподчинённое предложение
В рамках SMath - это функция:

[MATH]a:if(Condition;Expr1;Expr2)[/MATH]
А удобный дизайн сделает результат такого присвоения неочевидным. Пользователь может не ожидать увидеть 0 не только в случае вычисления Expr1, но и в результате Condition=false.

Кстати, именно ЯП примера, приведённого Вами, исторически демонстрирует, что "удобством" следует жертвовать, если оно что-то делает неявным: что случиось с неявным int?
С уважением, Михаил Каганский
#5 Posted: 8/28/2012 10:22:05 PM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Хотя с другой стороны: если if(условие;выражение) в отличие от if(условие;выражение1;выражение2) не будет функцией (т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"), то всё будет чётко и прозрачно...
С уважением, Михаил Каганский
1 users liked this post
impersonalis 8/29/2012 9:14:00 AM
#6 Posted: 8/29/2012 9:13:50 AM
impersonalis

impersonalis

1 likes in 11 posts.

Group: User

Wrote

(т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"), то всё будет чётко и прозрачно...



к тому же, тайп-каст bool->int можно реализовать (в SMath уже реализовано) непосредственным умножением на условие (имхо, очень удобно).
Например, функция-знак может быть реализована следующим образом:

Quote

sgn(x):=(x>0)-(x<0)

  • New Posts New Posts
  • No New Posts No New Posts