Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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 ... я так понимаю это уже чистой воды инструкции и никак не выражения. Они работают с выражениями. Правильно понимаю?

В общем и целом хочу уловить грань между двумя понятиями. Где заканчивается одно и начинается другое?
Любое выражение есть инструкция?
Благодарю за внимание
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2012, 23:26
Интересующийся
Отправить личное сообщение для Вовочка Посмотреть профиль Найти все сообщения от Вовочка
 
Регистрация: 09.01.2012
Сообщений: 13

Сообщение от Maxmaxmaximus Посмотреть сообщение
и совет мой тебе поменьше подобной ахинеи писать чтобы мозги не запудривать бредом)
когда-то давно я участвовал в одном то ли конкурсе, то ли конференции. После того, как человек делал доклад. Другие участники задавали вопросы. Так вот, крайне глупо выглядело когда человек говорил термин, а потом не смог объяснить что они обозначают.

С тех пор, я привык вдумываться в то, что говорю.

Наглядный пример
http://www.youtube.com/watch?v=e1ygOEs3Wfc
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2012, 00:25
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Сообщение от Maxmaxmaximus
не инструкции, в конструкции.
Не врите
__________________
readOnly
Ответить с цитированием
  #4 (permalink)  
Старый 06.02.2012, 00:28
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Сообщение от Вовочка
i *=3;
Это инструкция из одного выражения. В инструкциях может участвовать более одного выражения, для этого их надо {}. Выражения что-то возвращают, инструкции просто объединяют выражения в один логический блок
__________________
readOnly
Ответить с цитированием
  #5 (permalink)  
Старый 06.02.2012, 04:03
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 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) — выражение и инструкция присваивания одновременно

Как-то так) с составными также.
__________________
С моих слов записано верно.
Ответить с цитированием
  #6 (permalink)  
Старый 06.02.2012, 04:44
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от Maxmaxmaximus Посмотреть сообщение
T-sh,
что такое:
(a = 13+2)
?
(a = 13+2) — это инструкция и выражение.

инструкция: 13+2 (сложить 13 и 2)
выражение: a = 15. (выразить "а" числом 15)

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

инструкция = действие (сделай то и то)
выражение = обзывание (это будет этим) и в свою очередь процесс обзывания = инструкция (назови это этим)
__________________
С моих слов записано верно.
Ответить с цитированием
  #7 (permalink)  
Старый 06.02.2012, 05:18
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 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, и никогда не будет равно "вася".
__________________
С моих слов записано верно.
Ответить с цитированием
  #8 (permalink)  
Старый 06.02.2012, 05:27
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от Maxmaxmaximus Посмотреть сообщение
T-sh, ссылку на определение "выражение javascript"

нет такой ссылки, ибо каждый трактует по своему.

в свою очередь, ответ на вопрос:
что выражает и чем: 2+2?

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

а то будет как с нулём.. пол дня утверждать, что ноль — не число, а только потом понять, что нулем по умолчанию считается +0.

голова существует, чтоб не только глазами, которые на ней растут, всё подряд читать, но и чтоб иногда самому думать.
__________________
С моих слов записано верно.

Последний раз редактировалось T-sh, 06.02.2012 в 05:30.
Ответить с цитированием
  #9 (permalink)  
Старый 06.02.2012, 07:24
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 06.02.2012, 09:22
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Не надо читать посты пользователя Maxmaxmaximus. Он уже давно всем показал, что не знает JS.

В стандарте говорится, что инструкцией может быть Выражение или Блок, объединяющий несколько инструкций.
Отсюда следует, что выражение является инструкций, а вот то, что блок будет являться выражением, конечно же, не следует. Если посмотреть определение Выражения, то можно заметить, что инструкцией оно не является.

Оно и понятно: выражение всегда можно посчитать и получить его значение. Если бы блок инструкций также был выражением, то не очень понятно, о каком значении шла бы речь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление значения выражения без eval Matre Общие вопросы Javascript 6 19.11.2011 12:04
Регулярные выражения. Помогите! Dorian_bs Общие вопросы Javascript 16 09.11.2011 08:05
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08
While как условные выражения Latro Общие вопросы Javascript 23 27.06.2010 14:53
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35