Автор Тема: Форыч в Оберонах  (Прочитано 18100 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Форыч в Оберонах
« : Апрель 26, 2012, 11:22:30 am »
Знаю, что уже обсуждалось неоднократно  :)

Но что мешает заменить FOR на FOR EACH?

Я на практике FOR использую очень редко. В основном пишу через WHILE, а если нужно весь массив (коллекцию) обойти, то использую форыч.

Правда не понятно как должна работать связка Oberon+for each+итераторы  ???

Кто что думает на этот счет?

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #1 : Апрель 26, 2012, 11:43:49 am »
ИМХО - форич имеет смысл вводить когда в языке много встроенных контейнеров и есть привязка к более менее общим задачам -в O7 только массивы... множества также усечены... диапазонного типа нет- к чему его в ОБЩЕМ случае привязывать?  Фор хорош тем, что при  правильной реализации заголовок вычисляется ровно один раз со всеми приятными следствиями из этого... а в O7 это пародия  на него (косметика над вайл).

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #2 : Апрель 26, 2012, 11:53:49 am »
ИМХО - форич имеет смысл вводить когда в языке много встроенных контейнеров и есть привязка к более менее общим задачам -в O7 только массивы... множества также усечены... диапазонного типа нет- к чему его в ОБЩЕМ случае привязывать?  Фор хорош тем, что при  правильной реализации заголовок вычисляется ровно один раз со всеми приятными следствиями из этого... а в O7 это пародия  на него (косметика над вайл).
В ObjC из встроенных контейнеров только сишный массив. А форыч есть и работает по любым библиотечныхм (или тобою писанным) контейнерам. Аналогично с c++, c#, java, go.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #3 : Апрель 26, 2012, 11:56:37 am »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #4 : Апрель 26, 2012, 11:58:03 am »
Да ну...  :D вы хотите сказать, что если я создам граф произвольной структуры, то с помощью него можно его обойти ?  ;D

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #5 : Апрель 26, 2012, 12:05:29 pm »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.
while слишком общая управляющая конструкция, следовательно она не выразительна. Поэтому я там где это возможно от while избавляюсь. Далее там где возможно избавляюсь и от for'ов, и максимально остаются форычи.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #6 : Апрель 26, 2012, 12:06:04 pm »
Да ну...  :D вы хотите сказать, что если я создам граф произвольной структуры, то с помощью него можно его обойти ?  ;D
Да, если он будет удовлетворять некому интерфейсу (и при этом не будет глючить :-) )
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #7 : Апрель 26, 2012, 12:10:07 pm »
Да ну...  :D вы хотите сказать, что если я создам граф произвольной структуры, то с помощью него можно его обойти ?  ;D
Да, если он будет удовлетворять некому интерфейсу (и при этом не будет глючить :-) )
Тьфу на болтуна  :), тьфу.. на провокатора

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #8 : Апрель 26, 2012, 12:14:40 pm »
Тут valexey должен закричать "Клеветы!!!"(с)  ;D

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #9 : Апрель 26, 2012, 01:36:30 pm »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.
Фор удобен ,  когда алгоритм подразумевает выполнение последовательности инструкций (тело цикла)  известное (вычисляемое)  количество раз (обход элементов из некоторого  множества )- и это количество не зависит от тела цикла.. форич это подмножество фора - для алгоритмов в которых не важен порядок обхода... коряво конечно..но лень формулировать точнее...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #10 : Апрель 26, 2012, 01:56:24 pm »
Я такое определение не первый раз слышу  :)
Вот только на практике себе это представить не могу. Не встречалось мне такое ни разу.

Можете пример привести?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #11 : Апрель 26, 2012, 01:58:59 pm »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.
Фор удобен ,  когда алгоритм подразумевает выполнение последовательности инструкций (тело цикла)  известное (вычисляемое)  количество раз (обход элементов из некоторого  множества )- и это количество не зависит от тела цикла.. форич это подмножество фора - для алгоритмов в которых не важен порядок обхода... коряво конечно..но лень формулировать точнее...
Если контейнер, по которому итерируемся, ленивый, то число итераций будет неизвестное количество раз :-) Более того, в этом случае форыч может быть бесконечным :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #12 : Апрель 26, 2012, 02:09:51 pm »
угу именно по этому я консервативен по отношению к смешению стилей.. но...тут ведь главное   "не стать этаким вот музеем..." и даже "в нужный момент пойти  ко дну" возражений не вызывает...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #13 : Апрель 26, 2012, 02:13:52 pm »
Сейчас сделал поиск FOR в исходниках ЧЯ.
90% случаев примерно такие:
FOR k := 0 TO LEN(reeds)-1 DO
NEW(reeds[k]);
Strings.IntToString(k+1, s);
res := reeds[k].Init(0, 0, SHORT("Samurai/Rsrc/reed"+s+".png"));
reeds[k].repeatCount := 10
END;

Т.е. практически везде форыч

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #14 : Апрель 26, 2012, 02:15:33 pm »
Сейчас сделал поиск FOR в исходниках ЧЯ.
90% случаев примерно такие:
FOR k := 0 TO LEN(reeds)-1 DO
NEW(reeds[k]);
Strings.IntToString(k+1, s);
res := reeds[k].Init(0, 0, SHORT("Samurai/Rsrc/reed"+s+".png"));
reeds[k].repeatCount := 10
END;

Да, в 90 процентах случаев тьюринг-полнота не используется, являясь лишь источником ошибок.
Т.е. практически везде форыч

Да, в 90% случаев тьюринг-полнота не нужна и не используется, являясь лишь источником ошибок.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"