Здравствуйте, Аноним, Вы писали:
А>Последние пару месяцев пишу утилиту на перле(вернее переписываю) и никак не могу привыкнуть в перле условия пишут за действием. А>Типа такого А>
$myVar = sumFunc() if $extVar ne 'bla-bla-bla';
А>Зачем так сделано? А>В чем удобство?
Потому что это естественно для человеческого мышления.
Помните, "купи черного хлеба, а если не будет, то белого"?. Обычно сначала интересует самый ожидаемый результат, потом оговаривают особые ситуации.
Здравствуйте, Аноним, Вы писали:
А>Последние пару месяцев пишу утилиту на перле(вернее переписываю) и никак не могу привыкнуть в перле условия пишут за действием. А>Типа такого А>
$myVar = sumFunc() if $extVar ne 'bla-bla-bla';
Это не единственный вариант. Тебе никто не мешает писать традиционно:
if ($extVar ne 'bla-bla-bla') { $myVar = sumFunc(); }
А>Зачем так сделано? А>В чем удобство?
Затем, что так тоже очень удобно думать во многих случаях (особенно простых).
Здравствуйте, Temoto, Вы писали:
T>Помните, "купи черного хлеба, а если не будет, то белого"?. Обычно сначала интересует самый ожидаемый результат, потом оговаривают особые ситуации.
А это уже Python 2.5:) expr1 if cond else expr2
The God is real, unless declared integer.
Re[2]: Почему в перле условия пишут за действием
От:
Аноним
Дата:
14.01.10 02:40
Оценка:
Здравствуйте, netch80, Вы писали:
А>>В чем удобство?
N>Затем, что так тоже очень удобно думать во многих случаях (особенно простых).
Я бы сказал привычнее. Удобство оно слишком растяжимое.
Здравствуйте, Аноним, Вы писали:
N>>Затем, что так тоже очень удобно думать во многих случаях (особенно простых). А>Я бы сказал привычнее. Удобство оно слишком растяжимое.
Да, Ларри Уолл, как лингвист, при создании языка думал так же и о том, чтобы сделать его более похожим на естественный.
Здравствуйте, netch80, Вы писали:
N>Зато там есть elsif. Который из C-подобных языков систематически вымарывают до сих пор. Ради него я согласен на {...}
Здравствуйте, anonymous, Вы писали:
A>Да, Ларри Уолл, как лингвист, при создании языка думал так же и о том, чтобы сделать его более похожим на естественный.
Или вы не правы, или хреновый вышел лингвист из Ларри Уолла.
Здравствуйте, Lloyd, Вы писали:
A>>Да, Ларри Уолл, как лингвист, при создании языка думал так же и о том, чтобы сделать его более похожим на естественный. L>Или вы не правы, или хреновый вышел лингвист из Ларри Уолла.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, netch80, Вы писали:
N>>Зато там есть elsif. Который из C-подобных языков систематически вымарывают до сих пор. Ради него я согласен на {...} RO>Но зачем?
Это фальсификация. Реально вложенные условия пишутся на одном уровне, чтобы скрыть фактическую проблему.
RO>У elseif есть существенные проблемы: три варианта написания, неудобство добавления блоков перед первым (впрочем, else if тоже этого не позволяет).
RO>То ли дело cond в Лиспе. Еще интересный подход — first([x:{...}, y:{...}, {...}]) в StringTemplate.
Здравствуйте, Lloyd, Вы писали:
L>>>Или вы не правы, или хреновый вышел лингвист из Ларри Уолла. A>>А можно конкретики? L>Называть perl языком похожим на естественным я бы не осмелился.
А>Зачем так сделано?
Основная причина в том, что блок после if должен заключаться в фигурные скобки, даже если там всего одна строчка. Вот для того, чтобы убрать необходимость в фигурных скобках, придумана такая запись.
N>Зато там есть elsif. Который из C-подобных языков систематически вымарывают до сих пор. Ради него я согласен на {...}
Я бы сказал, скорее наоборот. Странный синтаксис не позволяет писать естественное else if, и по-этому придуман дурацкий elsif.
Здравствуйте, Vamp, Вы писали:
N>>Зато там есть elsif. Который из C-подобных языков систематически вымарывают до сих пор. Ради него я согласен на {...} V>Я бы сказал, скорее наоборот. Странный синтаксис не позволяет писать естественное else if, и по-этому придуман дурацкий elsif.
Я не вижу в нём ничего дурацкого. Может быть, это у меня наследие разных языков, где оно естественно, но тем не менее:)
Вообще, если выделение блока обязательно, то else if сишного типа само по себе было бы недопустимо — пришлось бы писать else { if ... }, так что перловый elsif вызван отнюдь не жёсткой необходимостью. Аналогично с питоновым elif, фортрановым else if на отдельной строке, и т.д. Так что ты просто недодумал.
N>Вообще, если выделение блока обязательно, то else if сишного типа само по себе было бы недопустимо — пришлось бы писать else { if ... }, так что перловый elsif вызван отнюдь не жёсткой необходимостью.
Тебе не кажется, что ты сам себе противоречишь? Именно потому, что после else должен идти блок, и придумали elsif. Именно то, что ты сказал и вызван он именно что необходимостью.
А дурацкий он потому, что это лишняя сущность. Зачем она была бы нужна, если бы синтаксис позволял писать else if () {}?
Здравствуйте, Vamp, Вы писали:
N>>Вообще, если выделение блока обязательно, то else if сишного типа само по себе было бы недопустимо — пришлось бы писать else { if ... }, так что перловый elsif вызван отнюдь не жёсткой необходимостью. V>Тебе не кажется, что ты сам себе противоречишь?
с чего вдруг?
V> Именно потому, что после else должен идти блок, и придумали elsif.
ты вообще в курсе различия семантики elsif и else?
V> Именно то, что ты сказал и вызван он именно что необходимостью. V>А дурацкий он потому, что это лишняя сущность. Зачем она была бы нужна, если бы синтаксис позволял писать else if () {}?
он и сейчас в Си и наследниках это позволяет. результат ужасен.