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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.03.2013, 19:36
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 21  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
обратный порядок быстрее
просто не многие застали ассемблер и не знают что такое стек и структура лифо (Last In, First Out)
Обратный порядок быстрее, потому что длина массива вычисляется один раз в начале цикла, а потом текущее значение переменной сравнивается с -1. Другой причины я что-то не вижу.
А если длину массива считать до начала цикла, то и разницы никакой не будет.

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

Регистрация: Feb 2013
Сообщений: 176
Цитата:
Сообщение от chamele0n Посмотреть сообщение
обратный порядок быстрее
просто не многие застали ассемблер и не знают что такое стек и структура лифо (Last In, First Out)
в ассемблере тоже нет такой структуры. есть просто стек.
как можно не застать асм, если мы все сидим за компами.
обратный цикл в асме был быстрее по такой простой причине, что операция вычитания выставляла в регистре флаг нуля, и операция сравнения перед условным переходом не требовалась, что экономило несколько тактов.
Регистровой модели я в AVM не нашел. кините ссылку?
Более того, (для AVM) в цикле for (поскольку его можно просто и понятно оптимизировать) инкремент\декремент происходит без помещения переменной в стек, а в while приходиться изымать переменную, уменьшать её, помещать обратно, снова изымать и производить сравнение. Время выполнения операций я не нашел, но по факту в тестах for лидировал.
ЗЫ. Тоже считаю странным сравнивать программеров по циклам. Ещё бы количество точек в тексте считали.

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

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от expl Посмотреть сообщение
И не знаю чем обдолбился автор этих строк, что решил мерить пофессионализм частотой использования цикла while.
Цитата:
Сообщение от Sync Посмотреть сообщение
ЗЫ. Тоже считаю странным сравнивать программеров по циклам. Ещё бы количество точек в тексте считали.
Не так уж и внимательно вы читали мой пост. Для меня одним из признаков профессионализма есть "стройность кода и алгоритмов". А частота использования цикла while просто бросилась в глаза. Вот и стало интересно - есть ли в этом что нибуть существенное или просто сила привычки.

Добавлено через 3 минуты
К стати, так и не увидел ни одного примера, когда нельзя заменить цикл for на while
Цитата:
Сообщение от Astraport Посмотреть сообщение
А вообще не всегда for можно заменить на while

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Цитата:
К стати, так и не увидел ни одного примера, когда нельзя заменить цикл for на while
Мне казалось, что когда-то в такой же дискуссии был такой пример.

Это не замена: например мне нужно перебрать массив именно с начала, но не с первого а n-го элемента, то по количеству строк while уже проигрывает.
__________________
In Code We Trust

Старый 10.03.2013, 23:37
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 25  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
К стати, так и не увидел ни одного примера, когда нельзя заменить цикл for на while
Такого примера не существует по определению. Любой цикл for можно представить в виде while, причем достаточно тривиально. Вот наоборот естественным образом не всегда.

Например:

Код AS3:
while(container.numChildren>0) 
{
  container.removeChildAt(0);
}
Конечно, и его можно записать в виде for (надо в теле цикла сбрасывать переменную в ноль), но наглядность потеряется да и с точки зрения логики странновато.

Старый 11.03.2013, 00:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 26  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
for(var i:uint = container.numChildren; i > 0; i--)
{
	container.removeChildAt(0);
}
Что тут странного?

Добавлено через 12 минут
Можно же вообще без инкремента обойтись
Код AS3:
for(; container.numChildren > 0;)
{
	container.removeChildAt(0);
}
__________________
Reality.getBounds(this);

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
А только мне кажется такой цикл абсурдным?

Нет, можно и вот так:
Код AS3:
var childCount:uint = container.numChildren;
for(var i:uint = 0; i < childCount; i++)
{
	container.removeChildAt(0);
}
Какими-то костылями попахивает?

Старый 11.03.2013, 00:21
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 28  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Не так уж и внимательно вы читали мой пост. Для меня одним из признаков профессионализма есть "стройность кода и алгоритмов". А частота использования цикла while просто бросилась в глаза. Вот и стало интересно - есть ли в этом что нибуть существенное или просто сила привычки.
А вот то, что про BASIC и отвыкание от for было написано - это ваши слова? Я думал это из блога какого-то чела цитата выдрана. И не мог не заметить, что не стоит верить этому товарищу.
Цитата:
К стати, так и не увидел ни одного примера, когда нельзя заменить цикл for на while
Да они одинаковые, что while, что for - просто синтаксис другой (если for (each) in не брать) - они _не_ могут быть _не_ взаимозаменимими.

Если вернуться к исходному вопросу:
Цитата:
"А стоило переходитm с цикла FOR на цикл WHILE?"
Вот и haXe выпилили for, оставили for in. Оно конечно, писать то можно и проблем не возникает, но иногда бесит писать 3 строчки вместо одной.
Вобщем, зря Вы переключились на один вид цикла - лучше и то и другое использовать.

Кое-где видел, что пишут for (; condition; ) {...} вместо while - видимо под лозунгом "Безобразно - зато однообразно".
Тенденции отказываться от for я не замечал - от этого нет никаких выгод (Николя только отличился, и никому это не нравится). Большинство использует и for и while - по ситуации.


Последний раз редактировалось expl; 11.03.2013 в 00:38.
Старый 11.03.2013, 00:34
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 29  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от expl Посмотреть сообщение
А вот то, что про BASIC и отвыкание от for было написано - это ваши слова?
На счет отвыкания - это правда, через это я прошел самостоятельно, хотя и небыло большой проблемы в этом. А вот про BASIC я ни словом не заикнулся. Лично я к ниму отношусь "не очень". Еще в школьные времена, после ознакомления с Turbo Pascal, я решил посмотреть на BASIC и ужаснулся

Старый 11.03.2013, 00:37
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 30  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
А только мне кажется такой цикл абсурдным?
Какими-то костылями попахивает?
Я лишь попытался показать Вам, что while и for абсолютно идентичны. Синтаксис for всего-лишь позволяет записать инкремент в "шапку" цикла, чтобы не искать потом по всему телу цикла, что там и как изменяется, и не искать до тела цикла создание переменной инкремента. Это просто удобная подробная запись. Которая может и не быть подробной, если этого не требуется. Вы можете оставить в for только condition, и все остальное оформить в точности как while.
Вот и вся разница.
__________________
Reality.getBounds(this);

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

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

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


 


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


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