![]() |
Цитата:
Цитата:
|
Цитата:
|
ИМО подход alexcon314 самый идеологически верный :) Положение должно определятся функцией с входящим и возвращаемым значениями - таким образом мы предохраняем код от побочных эффектов таких как значения вне диапазона или запоминайия временного сотояния программы и дальнейшей (возможно неверной) попытки сделать выводы на основании этого состояния. Т.е. предположим, что есть третий фактор, который тоже может задать координату Х объекту, и для него нет правил ограничивающих диапазон в 0..100, тогда всякие попытки ограничить диапазон в этой процедуре на основании предыдущего состояния чреваты ошибкой.
Кроме того, этото подход в дальнейшем позволит, например, легко реализовать нелинейное изменение значения (easing). В то время, ка в цикле вы умаетесь такое считать. Единственное "но" синус / косинус не соответсвуют линейному увеличению и уменьшению, которое бы было похоже на результаты получаемые в цикле. Еще есть "небольшая" проблема в том, что в AS не бывает ленивых вычислений нигде, кроме логических функций-операторов, и нет инстументов (типa yield) для того, чтобы можно было их имитировать. Поэтому и родилось вот это танго в турецком стиле :) Код AS3:
|
Цитата:
Цитата:
|
Каким образом предохраняет: код становится immutable. Ты видишь в моем коде хоть одну переменную? Переменные, даже не столько они, сколько разрушающее присваивание являются самой частой причиной возникновения ошибок в программах, за исключением просто невнимательности. Переменные зачастую сокращают написание кода, и даже делают его более понятным компилятору, и, возможно более оптимальным (если компилятор такой, как в AS3, то и подавно). Но это "идеологически неправильный" путь, хотя, если посмотреть на мейнстрим языки - самый распространенный. В то же время PHP - пожалуй что самый распространенный язык для написания сайтов :)
Т.е. непосредственно отвечая на вопрос: "Запоминать состояние все равно где-то придется." - нет, не обязательно, видишь же, что я ничего не запоминаю. В коде нет переменных - в принципе отсутсвует возможность "запомнить" что либо, и тем не менее задачу поставленную он решает :) |
Олег, пожалуйста, опустись с небес на землю и перестань нести пургу типа "сколько разрушающее присваивание являются самой частой причиной возникновения ошибок в программах" (Самой частой причиной ошибок является качество содержимого головы)
Цитата:
Тут у кого то в подписи есть ссылка на тему "как не надо писать факториал" (у Котяры вроде). Почитай ее пожалуйста. |
Нет, функция которая обеспечивает диапазон значений - не рекурсивна, так же как Math.cos() :) Y-комбинатор, это функция, которая делает другую функцию рекурсивной находя "фиксированую точку". Но в данном случае она тут для того, чтобы заменить цикл. По-сути, ты тоже почти наверняка пользуешься похожими функциями, только редко туда заглядываешь - easing функции твинов всяких делают именно это - принимая позицию во времени возвращают значение изменяемого параметра, при этом ничего нигде не запоминая.
И вообще я просто скопировал (не дословно, естественно, там рассматриваются другие ЯП) пример из замечательной книжки, которую я сейчас читаю: А. Филд, П. Харрисон "Функциональное программирование", в переводе которой учавстовало два кандидата техн. наук и один академик АЕН РСФСР. Кроме того, я же с самого начала написал, что с практической точки зрения, такое решение будет субоптимальным ввиду несовершенства синтаксиса языка и компилятора :) ЗЫ. Когда я говорил про качество програм, я имел в виду програмы написанные программистами, а не дятлами (сорри, просто у этой птицы должно быть что-то особенное в голове). У программистов там, ну по крайней мере, должен быть курс алгебры старших классов :) |
Народ, а зачем в 100 попадать? какже проверка на "больше-меньше"? если так проверять, то можно с любым шагом, и 102 будут считаться за границей дозволенного, переключая шаг.
|
| Часовой пояс GMT +4, время: 03:21. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.