Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.10.2011, 16:01
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Порядок вычисления аргументов функции

Недавно вышел у нас спор о легитимности присвоения нового значения аргументу функции, если этот аргумент передается в функцию более одного раза (чтобы было понятнее - пример):
Код AS3:
new Date(now.fullYear, ++now.month, 0);
now - какая-то дата. Смысл спора в том, на сколько вправе программист предполагать, что порядок вычисления параметров будет всегда слева нaправо, и что год будет посчитан для даты до того, как она будет изменена (и если это был последний месяц, то может получится, что год будет следующим годом, хотя это совсем не то, что требовалось). Я искал в справке информацию по этому поводу, но что-то ничего такого пока не нашел. Технически, я пока еще не видел, чтобы аргументы вычислялись в другом порядке, но если ружжо висит на стенке, то когда-нибудь обязательно выстрелит...
__________________
Hell is the possibility of sanity

Старый 21.10.2011, 16:45
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
var o:Object = {b:1};
                o.a = function(){this.b++;return 2;};
                trace(calc(o.b,o.a()));
            }
 
            private function calc(x:int , y:int):int
            {
                trace(x,y);
                return x + y;
            }
Выведет : 1 ,2 ,3
Код AS3:
var o:Object = {b:1};
                o.a = function(){this.b++;return 2;};
                o.a();
                trace(calc(o.b,o.a()));
            }
 
            private function calc(x:int , y:int):int
            {
                trace(x,y);
                return x + y;
            }
Выведет : 2 ,2 ,4

Видимо ,сначала в функцию передаются аргументы, а потом начинается обработка этих аргументов
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 21.10.2011, 16:49
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Genzo - ww спрашивает на сколько понял о другом.

типа
Код AS3:
function(a, b):void {  first init a or b ? }
__________________
Марк Tween

Старый 21.10.2011, 16:53
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 4  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Тут дело немного в другом :
Код AS3:
function(a, b()):void {  first init a or b ? }
Сначала в функцию передадутся параметры a и то что возвращает b, но даже если b изменит a, а уже передалось в том виде в котором было, соответственно верно предположить что порядок передачи аргументов идет слева направо.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 21.10.2011, 17:24
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Вообще-то
Цитата:
Смысл спора в том, на сколько вправе программист предполагать, что порядок вычисления параметров будет всегда слева нaправо
Здесь должна была быть шутка про письмо справа налево

Думаю программист вправе. Но я лучше заведу лишнюю переменную, пожертвовав "красотой" решения.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 21.10.2011, 20:29
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Спор о легитимности в программировании. Вкусно, как орбит-анонимная_функция.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 21.10.2011, 21:37
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я к тому, что предположим в Си порядок вычисления аргументов не определен, и каждый компилятор делает это в меру своей испорченности - по-разному, некоторые компиляторы могут даже в пределах одной функции делать это то справа налево, то слева направо. Таким образом, код типа f(i, ++i) в Си счиается непортабельным. В некоторых других языках порядок вычисления аргументов изначально оговорен, и (например в Common Lisp) код (f i (setf i (1+ i))) вполне себе портабельный (но, например, в Scheme тот же самый код - не портабельный, да и вообще не правильный, т.как порядок вычисления не определен).
Я искал похожую информацию про AS3 - в том смысле, что я думал, что, например, в статье про Function это должно было бы быть оговорено - ан нет...
__________________
Hell is the possibility of sanity

Старый 21.10.2011, 22:21
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Легитимность, выходит, на вкус компилятора.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 22.10.2011, 00:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Максимум, что я себе позволяю: items.splice(i--, 1);
Но это совершенно однозначный код.

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.