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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.03.2013, 20:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 81  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А кто-то реально использует циклы do while?
У меня вот ни разу не было ситуации, где возникала бы необходимость в таком извращении

Старый 12.03.2013, 20:28
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 82  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Всегда спешишь назвать что-либо "извращением".
do...while удобен в случаях, когда тебе нужно, чтобы цикл выполнился хотя бы один раз независимо от условий.
__________________
мой пустой блог

Старый 12.03.2013, 22:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 83  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
не удобен. Удобнее задать начальное значение переменной на 1 больше

Старый 12.03.2013, 22:42
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 84  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Вот тут как увеличить значение переменной на 1 больше?
Код AS3:
			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);
Здесь last работает просто как флаг. Можно было бы:
Код AS3:
while (1){
...
if (!last) break;
}
Но do...while же удобней.
Это кусок кода из zip-упаковщика.
__________________
мой пустой блог

Старый 12.03.2013, 23:00
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 85  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
А кто-то реально использует циклы do while?
Использую. Редко, мне не нравится, но порой это почти единственный адекватный способ решить задачу.

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

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

Старый 13.03.2013, 09:10
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 87  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
В пылу дискуссии как будто бы затерялся тот факт, что в условиях бывает не только счетчик с шагом.
Сам я обычно и выбираю конструкцию исходя из того, сводится ли условие к обнаружению значения счетчика в заданном диапазоне.
В общем, исхожу из определения, данном, кажется, во встроенной в 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.
Старый 13.03.2013, 12:13
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 88  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
что же скажут профи про опыт использования методов (forEach\every\some\map\filter)!
forEach самый бесполезный. Его можно использовать только для применения какого-то действия к объекту.
Но нужен метод doSomething(item). Обычно проще цикл написать.
Для накапливания како-го то значения - бессмысленно - придется либо делать анонимки, либо выносить состояние в поле класса, когда оно могло бы быть переменной.

Остальные - не использую, т.к. не сильно упрощают код - там же функции делать надо, не анонимки же использовать.

Я в as3 использовал другую и, в общем-то, одну самопальную функцию:
Код AS3:
public function find(foreachable:Object, filter:Function/*(Object):bool*/, criterions:Array/*of (Object):int*/,  defaultValue:Object):*
Например для AI надо выбрать противника, который имеет меньше всего здоровья, но если найдется несколько человек с одинаково низким здоровьем - надо выбрать какого по ближе (поэтому criterion возвращает int, чтобы == имело смысл):
Код AS3:
_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, время: 23:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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