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

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

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

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Question Циклы для профи

Салют!

Периодически просматривал исходники движков или просто чужих приложений и заметил одну особенность - чем больше мне нравится стройность кода и алгоритмов (для меня это один из признаков проффесионализма), тем реже в таких исходниках встречается слово "for".
Возник вопрос: "Почему умные люди отказываются от такой удобной конструкции, как цикл FOR?" ("FOR-IN" это не касается)
Когда я задал этот вопрос себе, то ничего из этого не вышло - похвастаться хорошими познаниями в программировании я не могу даже перед собой. Полез в Гугол, но там не нашел ничего внятнее, чем тесты, результаты которых не дают большой разницы.

Искать ответ мне надоело и я просто решыл отучиться от цикла FOR. Я даже нашел в этом позитив - когда нет разници в порядке обхода элементов массива я всегда делаю обратный обход:
красивый и компактный вариант
Код AS3:
var i:int = arr.length;
while (i--) {
	// очень много строк кода с элементом arr[i]
}
против громоздкого
Код AS3:
var len:int = arr.length;
var i:int = 0;
while (i < len) {
	// очень много строк кода с элементом arr[i]
	i++;
}
Все было бы класс, но когда приходится делать прямой обход элементов, я, иногда, забываю модифицировать счетчик цикла, что приводит к зависанию приложения. Найти и устранить такие ошибки очень легко, но частота их появлений очень мешает.

И сегодня меня волнует новый вопрос: "А стоило переходитm с цикла FOR на цикл WHILE?"
Есть ли у кого нибуть умные мысли по этому поводу?

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
для меня это один из признаков проффесионализма


А вообще не всегда for можно заменить на while, по быстродействию они идентичны.
__________________
In Code We Trust

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

Регистрация: Jan 2009
Сообщений: 1,651
Все очень просто.
Просто вот эта конструкция:
Код AS3:
var i:int = arr.length;
while (i--) {
}
быстрее чем:
Код AS3:
for (var i:int =0; i<arr.length;i++){
}
Потому что arr.length - медленный.
__________________
мой пустой блог

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

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от Astraport Посмотреть сообщение
А вообще не всегда for можно заменить на while.
А можно пример? Немогу даже представить такой ситуации.

Цитата:
Сообщение от iflamberg Посмотреть сообщение
Код AS3:
for (var i:int =0; i<arr.length;i++){
}
Код AS3:
var len:uint = arr.length;
for (var i:int = 0; i < len; i++){
}
И все в порядке. Как только начал писать свои get/set-методы сразу понял, что в цикле легче работать с переменной чем с get-функцией length.

И все же не понятно, почему люди отказываются от удобной конструкции, если разници нет? Можна было бы спихнуть все на понтовые олдскульные приемы, но циклы со счетчиком такие же древние, как и олдскульные программисты.

Может кто нибуть высказаться в пользу цикла while?

Старый 10.03.2013, 02:41
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от elder_Nosferatu Посмотреть сообщение
...когда приходится делать прямой обход элементов, я, иногда, забываю модифицировать счетчик цикла...
Просто не забывай.

Цитата:
Сообщение от iflamberg Посмотреть сообщение
Потому что arr.length - медленный.
Поэтому перед циклом длину в переменную сохраняют.
__________________
Поймай яблоко 2!

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

Регистрация: Feb 2013
Сообщений: 176
for - быстрее. он на 1 инструкцию короче, чем while --i, можно убедиться декомпиляцией тестов, если речь пошла о таких сравнениях

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А вообще не всегда for можно заменить на while, по быстродействию они идентичны.
цикл for, всегда можно заменить на while. Если не писать это вручную, то компилятор все равно это сделает.
вот for in или for each in нельзя, но это уже другое
Цитата:
И все же не понятно, почему люди отказываются от удобной конструкции, если разници нет?
Скорее всего просто для того, чтобы код было удобнее читать, ну и писать. Ведь он короче.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
когда нет разници в порядке обхода элементов массива я всегда делаю обратный обход
Когда нет разницы можно и Array#forEach использовать.
__________________
משיח לא בא
משיח גם לא מטלפן

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Гле-то читал в литературе примерно следующее субъективное мнение.
Когда программирование стало доступным? Да, с приходом Basic. Его стали преподавать везде и всюду. Цикл FOR для бейсика - это своего рода завоевание (не во всех языках эта конструкция поддерживалась изначально), все, кто изучал программирование на Basic - всегда пишут FOR, их даже узнать легко по этой фишке.
Но реальные пацаны выше этих яслей, они юзают кондовый WHILE.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Что-то я не припомню в бейсике (если мы не о Visual Basic) цикла FOR, да и вообще циклов, кроме GOTO X вроде не было. В паскале были.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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