|
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
Вот тут как увеличить значение переменной на 1 больше?
do { // process blocks until last block or error var last:int = bits(1); // one if last block var type:int = bits(2); // block type 0..3 if(type == 0) stored(buf); // uncompressed block else if(type == 3) throw new Error('invalid block type (type == 3)', -1); else { // compressed block lencode = {count:[], symbol:[]}; distcode = {count:[], symbol:[]}; if(type == 1) constructFixedTables(); else if(type == 2) err = constructDynamicTables(); if(err != 0) return err; err = codes(buf); // decode data until end-of-block code } if(err != 0) break; // return with error } while(!last); Но do...while же удобней. Это кусок кода из zip-упаковщика.
__________________
мой пустой блог |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
[+4 06.05.14]
|
Цитата:
__________________
Марк Tween |
|
|||||
В пылу дискуссии как будто бы затерялся тот факт, что в условиях бывает не только счетчик с шагом.
Сам я обычно и выбираю конструкцию исходя из того, сводится ли условие к обнаружению значения счетчика в заданном диапазоне. В общем, исхожу из определения, данном, кажется, во встроенной в turbo pascal справке: for -- цикл с заданным числом повторений. do while во флеш-практике таки приходилось использовать, но пример не вспомню. А вот в вышеупомянутом паскале с его помощью логичнее всего обрабатывалось нажатие определенных клавиш. По крайней мере, тогда мне так казалось Сейчас утверждение кажется несколько сомнительным. Добавлено через 7 минут Насчет абстракций более высокого уровня и их (уровней) разделения. В тех местах, где производительность не критична, или работа находится на начальном этапе, все же стремлюсь к использованию for-in\for-each-in, когда задача сводится к перебору, так как "для каждого из ${список элементов предметной области\ уровня}" звучит куда более близко по смыслу к цели. А заодно от лишней на этом уровне сущности счетчика избавляемся. Добавлено через 18 минут Но вот использовать высокоуровневые примочки Array\Vector с коллбеками (кроме сортировки, ессна) побаиваюсь традиционно. И даже местами переписываю в более примитивные конструкции. Отчасти из-за отсутствия типизации функций, отчасти из-за... отсутствия привычки, быть может. Второй аргумент не особенно убедителен, так что очень интересно... что же скажут профи про опыт использования методов (forEach\every\some\map\filter)!
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 13.03.2013 в 09:32. |
|
|||||
Цитата:
Но нужен метод doSomething(item). Обычно проще цикл написать. Для накапливания како-го то значения - бессмысленно - придется либо делать анонимки, либо выносить состояние в поле класса, когда оно могло бы быть переменной. Остальные - не использую, т.к. не сильно упрощают код - там же функции делать надо, не анонимки же использовать. Я в as3 использовал другую и, в общем-то, одну самопальную функцию: public function find(foreachable:Object, filter:Function/*(Object):bool*/, criterions:Array/*of (Object):int*/, defaultValue:Object):* _invertDistance_unit = selfUnit; var enemy:Enemy = find(enemies, isCanAttack, [getInvertHealth, getInvertDistance]); _invertDistance_unit = null; ... private function getInvertHealth(enemy:Enemy):int { return -enemy.Health; } private function getInvertDistance(enemy:Enemy):int { return -_invertDistance_unit.GetDistanceTo(enemy); } Это действительно, несмотря на создание кучи мелких функций драматически уменьшало объёмы кода и увеличивало читабельность. Но применялось только в специфических частях игры. |
Часовой пояс GMT +4, время: 09:31. |
|
« Предыдущая тема | Следующая тема » |
|
|