Разница между выражениями и инструкциями
Читаю David Flanagan.
Перечитывал 2-3 раза разделы Выражения и Инструкции, но так и не дошло в чём собственно принципиальная разница. Итак, простейшие выражения: 1.7 "Javascript is fun" true {x:2, y:2} [2,3,5,7] function(x){return x*x} Далее сказано, что если смешать выражения и операторы, то получаются выражения. Это выражения: w = x + y + z; q=a?b:c?d:e?f:g; И всё бы ничего, но дальше следует глава инструкции. 1. Инструкция-выражение i *=3; Ну эта конструкция я так понимаю одновременно и инструкция и выражение. Правильно понимаю? Соответственно примеры выше также являются выражениями? 2. Составные-инструкции Следующие строки рассматриваются как одна инструкция. { x=Math.PI; cx=Math.cos(x); alert("cos(" + x + ") = " + cx); } Вопрос: может ли код выше рассматриваться как одно выражение? 3. Инструкции if, switch ... я так понимаю это уже чистой воды инструкции и никак не выражения. Они работают с выражениями. Правильно понимаю? В общем и целом хочу уловить грань между двумя понятиями. Где заканчивается одно и начинается другое? Любое выражение есть инструкция? Благодарю за внимание |
Цитата:
С тех пор, я привык вдумываться в то, что говорю. Наглядный пример http://www.youtube.com/watch?v=e1ygOEs3Wfc |
Цитата:
|
Цитата:
|
имхо, правильнее будет как-то так:
1. Любое выражение — это инструкция. 2. Не каждая инструкция — выражение. Выражение — инструкция, присваивающая правую часть выражения левой части (выражает левую через правую). a = 10; — выражение. var a = 10; — инструкция и выражение (сначала [var a] — инструкция, которая не является выражением т.к. присваивания нет, а потом уже [a = 10] — выражение, которое можно также назвать инструкцией). if (a){} else{} и т.д. — инструкция, но не выражение, ибо ничего не выражается, но действия происходят. Точно также и с w = x+y+z : 1. x+y+z — инструкция, но не выражение. 2. w = то, что вернула инструкция (x+y+z) — выражение и инструкция присваивания одновременно :) Как-то так) с составными также. |
Цитата:
инструкция: 13+2 (сложить 13 и 2) выражение: a = 15. (выразить "а" числом 15) выражение без присваивания быть не может. ибо называется оно выражением, оттого, что выражает что-то через что-то — одно "кладут" в другое :) нельзя вылить на стол пол-литра борща и сказать, что это тарелка борща. вылить на стол — инструкция (сделать что-то). а вылить в тарелку — выражение, ибо теперь у нас будет тарелка борща, а также инструкция, ибо вылить — действие. инструкция = действие (сделай то и то) выражение = обзывание (это будет этим) и в свою очередь процесс обзывания = инструкция (назови это этим) |
Цитата:
Цитата:
а вот как в выражении может быть динамики?? 2+2 — это выражение??? если да, то что выражается и чем?? a = 2+2 <=> a = 4 — вот это выражение. а динамики тут не может быть никакой, ибо по всем правилам и математики, и логики, и программирования сначала вычисляется правая часть (инструкция, где вместо 2+2 может быть сотня функций, две сотни условий и миллион действий), а потом уже статикой готовое значение присваивается левой части <=> левая часть выражается значением правой. 2+2 — это действие, т.е. инструкция к действию. a = 2+2 — это выражение переменной "а" через инструкцию 2+2, т.е. выражение переменной "а" результатом исполнения инструкции (статическим, ибо на лету оно измениться при присваивании не может, для этого понадобится произвести все действия заново) — значением 4. никакой динамике в присваивании (выражении) быть не может, ибо 2+2 всегда будет равно 4, и никогда не будет равно "вася". |
Цитата:
в свою очередь, ответ на вопрос: что выражает и чем: 2+2? вот что из головы нужно выбросить, так это то, как в школе учили математике, когда всё подряд называли выражениями, начиная от простых чисел, заканчивая дробями. а то будет как с нулём.. пол дня утверждать, что ноль — не число, а только потом понять, что нулем по умолчанию считается +0. голова существует, чтоб не только глазами, которые на ней растут, всё подряд читать, но и чтоб иногда самому думать. |
Цитата:
while (condition) инструкция например var l, attempts; attempts = 0; while ( l = getLivaanderiamarum() ) { try { JusticeEngine.execCommand(l, "kill"); } catch (fail) { JusticeEngine.pushPatience(100500); } attempts ++; } PS: А термины не я придумал |
Не надо читать посты пользователя Maxmaxmaximus. Он уже давно всем показал, что не знает JS.
В стандарте говорится, что инструкцией может быть Выражение или Блок, объединяющий несколько инструкций. Отсюда следует, что выражение является инструкций, а вот то, что блок будет являться выражением, конечно же, не следует. Если посмотреть определение Выражения, то можно заметить, что инструкцией оно не является. Оно и понятно: выражение всегда можно посчитать и получить его значение. Если бы блок инструкций также был выражением, то не очень понятно, о каком значении шла бы речь. |
Часовой пояс GMT +3, время: 00:49. |