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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2011, 16:02
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 11  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от silin Посмотреть сообщение
>>Иначе будет значение 102, вместо 100.
попасть в 100 стартуя из 0 с шагом 3 вообще мудрено
тока если дробить каждый шаг
Код AS3:
private var _step:Number = 1;
private function test(event:Event):void  
{
	for (var i:int = 0; i < 3; i++) 
		if ((x += _step) == 100 || x == 0) _step *= -1;
}
_step = 3 и все, будет 99, а потом 102

Цитата:
Да, но, дело в том, что меня именно как раз интересовал подход *меньше строк*, да ваш код я понимаю в плане гибкости, но интересно было именно как можно короче все описать
Меньше строк, это все через запятую писать?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Меньше строк, это все через запятую писать?
Нет конечно ))) я думаю ты понял о чем я, типа примера силина

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
ИМО подход alexcon314 самый идеологически верный Положение должно определятся функцией с входящим и возвращаемым значениями - таким образом мы предохраняем код от побочных эффектов таких как значения вне диапазона или запоминайия временного сотояния программы и дальнейшей (возможно неверной) попытки сделать выводы на основании этого состояния. Т.е. предположим, что есть третий фактор, который тоже может задать координату Х объекту, и для него нет правил ограничивающих диапазон в 0..100, тогда всякие попытки ограничить диапазон в этой процедуре на основании предыдущего состояния чреваты ошибкой.
Кроме того, этото подход в дальнейшем позволит, например, легко реализовать нелинейное изменение значения (easing). В то время, ка в цикле вы умаетесь такое считать. Единственное "но" синус / косинус не соответсвуют линейному увеличению и уменьшению, которое бы было похоже на результаты получаемые в цикле. Еще есть "небольшая" проблема в том, что в AS не бывает ленивых вычислений нигде, кроме логических функций-операторов, и нет инстументов (типa yield) для того, чтобы можно было их имитировать.
Поэтому и родилось вот это танго в турецком стиле
Код AS3:
package
{
	import flash.display.Sprite;
 
	public class TestRange extends Sprite
	{
		private static const STEP:int = 10;
		private static const INTERVAL:int = 10;
 
		public function TestRange()
		{
			super();
			this.yCombinator(200, this.sign, 10);
		}
 
		private function handler(value:int):void
		{
			trace("result:", value);
		}
 
		private function increment(value:int, mod:int):int
		{
			this.handler(value - STEP)
			return value + STEP * mod;
		}
 
		private function sign(value:int, position:int):int
		{
			return this.increment(value, 1 - (int((position % (INTERVAL << 1)) >= INTERVAL) << 1));
		}
 
		private function yCombinator(times:int, what:Function, initial:int):int
		{
			return what(times > 0 ? this.yCombinator(times - 1, what, initial) : initial, times);
		}
	}
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 18.03.2011 в 19:59.
Старый 18.03.2011, 19:46
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 14  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
ИМО подход alexcon314 самый идеологически верный
Совсем наоборот. Это пример того, как банальную задачу из мухи превращают в слона. Хотя тут и сама постановка задачи виновата.

Цитата:
Положение должно определятся функцией с входящим и возвращаемым значениями - таким образом мы предохраняем код от побочных эффектов таких как значения вне диапазона или запоминайия временного сотояния программы
Каким образом это предохраняет? Запоминать состояние все равно где-то придется.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Каким образом предохраняет: код становится immutable. Ты видишь в моем коде хоть одну переменную? Переменные, даже не столько они, сколько разрушающее присваивание являются самой частой причиной возникновения ошибок в программах, за исключением просто невнимательности. Переменные зачастую сокращают написание кода, и даже делают его более понятным компилятору, и, возможно более оптимальным (если компилятор такой, как в AS3, то и подавно). Но это "идеологически неправильный" путь, хотя, если посмотреть на мейнстрим языки - самый распространенный. В то же время PHP - пожалуй что самый распространенный язык для написания сайтов

Т.е. непосредственно отвечая на вопрос: "Запоминать состояние все равно где-то придется." - нет, не обязательно, видишь же, что я ничего не запоминаю. В коде нет переменных - в принципе отсутсвует возможность "запомнить" что либо, и тем не менее задачу поставленную он решает
__________________
Hell is the possibility of sanity

Старый 18.03.2011, 20:18
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 16  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Олег, пожалуйста, опустись с небес на землю и перестань нести пургу типа "сколько разрушающее присваивание являются самой частой причиной возникновения ошибок в программах" (Самой частой причиной ошибок является качество содержимого головы)

Цитата:
нет, не обязательно, видишь же, что я ничего не запоминаю
С таким же успехом ты можешь вообще исключить данный код, потому что он бесполезен. У тебя рекурсия, поэтому не надо ничего запомнить (хотя значения в памяти хранится, все равно запоминается). А исходя из первого поста можно догадаться, что x это координата объекта, поэтому обработка рекурсией ничего на даст. Для визуального изменения координат объекта, нужен временной вызов и хранить состояние тебе все равно где-то придется.

Тут у кого то в подписи есть ссылка на тему "как не надо писать факториал" (у Котяры вроде). Почитай ее пожалуйста.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Нет, функция которая обеспечивает диапазон значений - не рекурсивна, так же как Math.cos() Y-комбинатор, это функция, которая делает другую функцию рекурсивной находя "фиксированую точку". Но в данном случае она тут для того, чтобы заменить цикл. По-сути, ты тоже почти наверняка пользуешься похожими функциями, только редко туда заглядываешь - easing функции твинов всяких делают именно это - принимая позицию во времени возвращают значение изменяемого параметра, при этом ничего нигде не запоминая.
И вообще я просто скопировал (не дословно, естественно, там рассматриваются другие ЯП) пример из замечательной книжки, которую я сейчас читаю: А. Филд, П. Харрисон "Функциональное программирование", в переводе которой учавстовало два кандидата техн. наук и один академик АЕН РСФСР.
Кроме того, я же с самого начала написал, что с практической точки зрения, такое решение будет субоптимальным ввиду несовершенства синтаксиса языка и компилятора

ЗЫ. Когда я говорил про качество програм, я имел в виду програмы написанные программистами, а не дятлами (сорри, просто у этой птицы должно быть что-то особенное в голове). У программистов там, ну по крайней мере, должен быть курс алгебры старших классов
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 18.03.2011 в 21:02.
Старый 20.03.2011, 01:31
NeonSelf вне форума Посмотреть профиль Отправить личное сообщение для NeonSelf Найти все сообщения от NeonSelf
  № 18  
Ответить с цитированием
NeonSelf

Регистрация: May 2010
Адрес: Украина, Донецкая обл., Харцызск
Сообщений: 13
Народ, а зачем в 100 попадать? какже проверка на "больше-меньше"? если так проверять, то можно с любым шагом, и 102 будут считаться за границей дозволенного, переключая шаг.

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

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

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


 


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


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