05.02.2012, 22:02
|
Интересующийся
|
|
Регистрация: 09.01.2012
Сообщений: 13
|
|
Разница между выражениями и инструкциями
Читаю 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 ... я так понимаю это уже чистой воды инструкции и никак не выражения. Они работают с выражениями. Правильно понимаю?
В общем и целом хочу уловить грань между двумя понятиями. Где заканчивается одно и начинается другое?
Любое выражение есть инструкция?
Благодарю за внимание
|
|
05.02.2012, 23:26
|
Интересующийся
|
|
Регистрация: 09.01.2012
Сообщений: 13
|
|
Сообщение от Maxmaxmaximus
|
и совет мой тебе поменьше подобной ахинеи писать чтобы мозги не запудривать бредом)
|
когда-то давно я участвовал в одном то ли конкурсе, то ли конференции. После того, как человек делал доклад. Другие участники задавали вопросы. Так вот, крайне глупо выглядело когда человек говорил термин, а потом не смог объяснить что они обозначают.
С тех пор, я привык вдумываться в то, что говорю.
Наглядный пример
http://www.youtube.com/watch?v=e1ygOEs3Wfc
|
|
06.02.2012, 00:25
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Сообщение от Maxmaxmaximus
|
не инструкции, в конструкции.
|
Не врите
__________________
readOnly
|
|
06.02.2012, 00:28
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Сообщение от Вовочка
|
i *=3;
|
Это инструкция из одного выражения. В инструкциях может участвовать более одного выражения, для этого их надо {}. Выражения что-то возвращают, инструкции просто объединяют выражения в один логический блок
__________________
readOnly
|
|
06.02.2012, 04:03
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
имхо, правильнее будет как-то так:
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) — выражение и инструкция присваивания одновременно
Как-то так) с составными также.
__________________
С моих слов записано верно.
|
|
06.02.2012, 04:44
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
Сообщение от Maxmaxmaximus
|
T-sh,
что такое:
(a = 13+2)
?
|
(a = 13+2) — это инструкция и выражение.
инструкция: 13+2 (сложить 13 и 2)
выражение: a = 15. (выразить "а" числом 15)
выражение без присваивания быть не может. ибо называется оно выражением, оттого, что выражает что-то через что-то — одно "кладут" в другое нельзя вылить на стол пол-литра борща и сказать, что это тарелка борща. вылить на стол — инструкция (сделать что-то). а вылить в тарелку — выражение, ибо теперь у нас будет тарелка борща, а также инструкция, ибо вылить — действие.
инструкция = действие (сделай то и то)
выражение = обзывание (это будет этим) и в свою очередь процесс обзывания = инструкция (назови это этим)
__________________
С моих слов записано верно.
|
|
06.02.2012, 05:18
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
Сообщение от Maxmaxmaximus
|
а теперь прочитай мое отредактированное сообщение и забудь тот бред который знал до этого)
ты написал несусветную самописную бредятину основанную на домыслах)
|
да ну?
Цитата:
|
выражение это то место где происходят динамические действия, а инструкция это любой оператор!!
|
инструкция — да, это любой оператор и любая конструкция..
а вот как в выражении может быть динамики??
2+2 — это выражение??? если да, то что выражается и чем??
a = 2+2 <=> a = 4 — вот это выражение. а динамики тут не может быть никакой, ибо по всем правилам и математики, и логики, и программирования сначала вычисляется правая часть (инструкция, где вместо 2+2 может быть сотня функций, две сотни условий и миллион действий), а потом уже статикой готовое значение присваивается левой части <=> левая часть выражается значением правой.
2+2 — это действие, т.е. инструкция к действию.
a = 2+2 — это выражение переменной "а" через инструкцию 2+2, т.е. выражение переменной "а" результатом исполнения инструкции (статическим, ибо на лету оно измениться при присваивании не может, для этого понадобится произвести все действия заново) — значением 4.
никакой динамике в присваивании (выражении) быть не может, ибо 2+2 всегда будет равно 4, и никогда не будет равно "вася".
__________________
С моих слов записано верно.
|
|
06.02.2012, 05:27
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
Сообщение от Maxmaxmaximus
|
T-sh, ссылку на определение "выражение javascript"
|
нет такой ссылки, ибо каждый трактует по своему.
в свою очередь, ответ на вопрос:
что выражает и чем: 2+2?
вот что из головы нужно выбросить, так это то, как в школе учили математике, когда всё подряд называли выражениями, начиная от простых чисел, заканчивая дробями.
а то будет как с нулём.. пол дня утверждать, что ноль — не число, а только потом понять, что нулем по умолчанию считается +0.
голова существует, чтоб не только глазами, которые на ней растут, всё подряд читать, но и чтоб иногда самому думать.
__________________
С моих слов записано верно.
Последний раз редактировалось T-sh, 06.02.2012 в 05:30.
|
|
06.02.2012, 07:24
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Сообщение от Maxmaxmaximus
|
не в фигурные, а в круглые вообще-то
|
не врите снова. У вас получилось выражение, как вы и заметили сами. А я говорил про инструкцию. Например синтаксис цикла while:
while (condition) инструкция
например
var l, attempts;
attempts = 0; while ( l = getLivaanderiamarum() ) {
try {
JusticeEngine.execCommand(l, "kill");
} catch (fail) {
JusticeEngine.pushPatience(100500);
}
attempts ++;
}
PS: А термины не я придумал
__________________
readOnly
Последний раз редактировалось poorking, 06.02.2012 в 07:27.
|
|
06.02.2012, 09:22
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Не надо читать посты пользователя Maxmaxmaximus. Он уже давно всем показал, что не знает JS.
В стандарте говорится, что инструкцией может быть Выражение или Блок, объединяющий несколько инструкций.
Отсюда следует, что выражение является инструкций, а вот то, что блок будет являться выражением, конечно же, не следует. Если посмотреть определение Выражения, то можно заметить, что инструкцией оно не является.
Оно и понятно: выражение всегда можно посчитать и получить его значение. Если бы блок инструкций также был выражением, то не очень понятно, о каком значении шла бы речь.
|
|
|
|