OberonCore
https://forum.oberoncore.ru/

Точки выхода или немного о структурном программировании
https://forum.oberoncore.ru/viewtopic.php?f=27&t=3498
Страница 1 из 1

Автор:  Андрей [ Воскресенье, 26 Июнь, 2011 22:28 ]
Заголовок сообщения:  Точки выхода или немного о структурном программировании

Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/

Автор:  alexus [ Понедельник, 27 Июнь, 2011 05:17 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Андрей писал(а):
Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/
Жизнь в шаблон не вложишь... А логические переменные иногда весьма полезны... наряду с другими типами переменных, разумеется :)

Автор:  Илья Ермаков [ Понедельник, 27 Июнь, 2011 12:46 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

alexus писал(а):
Андрей писал(а):
Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/
Жизнь в шаблон не вложишь... А логические переменные иногда весьма полезны... наряду с другими типами переменных, разумеется :)


Ну, циклы поиска связаны не с шаблоном (хотя в большей части случаев всё это вписывается в базовый шаблон линейного поиска). А с пониманием свойств цикла WHILE с конъюнкцией в условии, при сокращённой семантике логических выражений. И умении это использовать, чтобы условие поиска было частью условия цикла, а не "вкплёпывалось" где-то в середине с IF.

Автор:  alexus [ Понедельник, 27 Июнь, 2011 16:39 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Илья Ермаков писал(а):
alexus писал(а):
Андрей писал(а):
Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/
Жизнь в шаблон не вложишь... А логические переменные иногда весьма полезны... наряду с другими типами переменных, разумеется :)
Ну, циклы поиска связаны не с шаблоном
Илья, посмотрите на исходную цитату:
Андрей писал(а):
...они там даже не знают базовый паттерн поиска элемента в массиве
Илья Ермаков писал(а):
А с пониманием свойств цикла WHILE с конъюнкцией в условии, при сокращённой семантике логических выражений. И умении это использовать, чтобы условие поиска было частью условия цикла, а не "вкплёпывалось" где-то в середине с IF.
Увы, не всё (хотя и многое) зависит от искусства программиста, есть материал, с которым приходится работать... Циклы с пост-условием и условием выхода в середине, это не "блажь" теоретиков, но хлеб и... пот практиков. Тоже относится и к использованию логических переменных... вместо многократного вычисления логического выражения, иногда проще запомнить и многократно использовать единожды вычисленный результат. Мне показалось (после просмотра дискуссии по ссылке), что Андрей несколько поторопился с... проявлением "ужаса".

Автор:  Андрей [ Понедельник, 27 Июнь, 2011 22:46 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

я про вот это, в частности:

* porqz
Надо уметь задавать такое условие продолжения выполнения цикла, чтоб можно было обойтись безо всяких брейков. Нас этому на первом курсе ещё учили.)

* ifesdjeen,
пример приведите, пожалуйста, прямо с первого курса можно…

* Gaen +6
Ну да, давайте флаг заведём, засунем в условие цикла и при выполнении условия будем менять его значение, делая прерывание цикла ещё менее очевидным

* dshalkhakov,
Вместо циклов лучше использовать рекурсивные функций, тогда не возникнет проблем с break, continue и return. Рекурсия, естественно, должна быть хвостовой.

Автор:  alexus [ Вторник, 28 Июнь, 2011 06:02 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Андрей писал(а):
я про вот это, в частности:...
И что же вызвало Ваш ужас?.. Вполне нормальное обсуждение.

Автор:  Info21 [ Вторник, 28 Июнь, 2011 09:40 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Цикл есть только один -- цикл Дейкстры.

Оптимизации (кеширование значений повторно вычисляемых термов и т.п.) легко и квази-механически оформляются как таковые без принципиального искажения структуры цикла.

Пот (или "броски задом") тут только от непоставленности базовой техники, как в известном примере http://www.inr.ac.ru/~info21/texts/2005 ... ide13.html.

Автор:  Илья Ермаков [ Вторник, 28 Июнь, 2011 13:13 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Был тут у нас и другой пример - от пальцегнутого компиляторщика:
http://oberoncore.ru/wiki/%D1%81%D1%82% ... 0%BB%D0%B0

Автор:  alexus [ Вторник, 28 Июнь, 2011 16:19 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Илья Ермаков писал(а):
Был тут у нас и другой пример - от пальцегнутого компиляторщика:
http://oberoncore.ru/wiki/%D1%81%D1%82% ... 0%BB%D0%B0
Хм?.. Илья, прошу Вас, не поддавайтесь на провокации info... Примеры ровным счетом ничего не доказывают. Циклы, где сформировано мощное предусловие, можно приводить и приводить, но это не означает, что имеет практическую ценность любое подобное приведение. Для примера, на многих формах используются фильтры, позволяющие сократить объемы отображаемой информации. После изменения настроек, массив информации проходит через анализатор (там помимо отсечения делается еще и агрегация, и пр.), потом строится упорядоченный вектор отображения... В этой задаче, да, удобно все фильтры сводить в заголовок цикла с предусловием. Но выполнять группировку данных и их анализ (в результате которой возможно придется прервать цикл)... в том же заголовке... садомазохизм, IMHO. Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.

Автор:  Info21 [ Вторник, 28 Июнь, 2011 17:05 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

alexus писал(а):
Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.
Отвечать подробно совершенно некогда, поэтому отвечу коротко: плохому программисту принципы мешают.

Автор:  Илья Ермаков [ Среда, 29 Июнь, 2011 10:44 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

alexus писал(а):
Но выполнять группировку данных и их анализ (в результате которой возможно придется прервать цикл)... в том же заголовке... садомазохизм, IMHO. Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.


Любую задачу со сложной обработкой данных я и не подумаю засовывать в одну процедуру, а разобью помельче.
Вообще, иногда делаю что-нибудь типа сканера виртуальной последовательности, чтобы цикл верхнего уровня сводился к простейшему вызову операции sc.GetElem; WHILE sc.done & ~SomePredicate(....) DO что-нибудь делаем; sc.GetElem END;

Условно говоря. Т.е. сделаю некий "фасад", за "ручки" которого будет дёргать цикл простейшей структуры.

Если у меня не получается построить простой цикл в несколько строк, то для меня это верный признак, что надо вводить какой-то уровень абстракции под циклом. Как минимум процедуры, а то и, как сказал выше, какой-то тип для работы с виртуальной последовательностью. (Благо Оберон позволяет объекты-значения).

Автор:  Valery Solovey [ Среда, 29 Июнь, 2011 10:53 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

alexus писал(а):
... на многих формах используются фильтры, позволяющие сократить объемы отображаемой информации...

А можно по-подробнее? Помнится, у Вас на сайте были материалы про БД, но я их не осилил. Они помогут в понимании приведённого примера (например, объяснят термины отсечение, агрегация, отображение, группировка)?

И ещё: зимой Вы обещали рассказать про БД, когда время найдётся.

Автор:  alexus [ Среда, 29 Июнь, 2011 21:01 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Илья Ермаков писал(а):
Любую задачу со сложной обработкой данных я и не подумаю засовывать в одну процедуру, а разобью помельче.
Это не меняет сути...

Автор:  alexus [ Среда, 29 Июнь, 2011 21:16 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Valery Solovey писал(а):
alexus писал(а):
... на многих формах используются фильтры, позволяющие сократить объемы отображаемой информации...
А можно по-подробнее?
Можно... но чтобы не расписывать теорию, поясню на простом примере... Например, есть отдел сбыта. Центральная ось здесь: заявки-заказы-счета. Вводим фильтры: по датам регистрации заявки (принятия заказа, выписки счета); по номенклатуре товаров; по готовности (необработанные заявки, необсчитанные заказы, неоплаченные заказы, оплаченные заказы, выданные заказы и пр.). Пользователь, устанавливая те или иные значения в фильтрах, получает ограниченное подмножество данных (и их аналитические показатели).
Valery Solovey писал(а):
Помнится, у Вас на сайте были материалы про БД, но я их не осилил. Они помогут в понимании приведённого примера (например, объяснят термины отсечение, агрегация, отображение, группировка)?
Нет, по БД там две статьи, одна посвящена тому, как сделать классификацию данных средствами реляционной СУБД, вторая статья о выборе ключей.
Valery Solovey писал(а):
И ещё: измой Вы обещали рассказать про БД, когда время найдётся.
Да, я помню, но писатель из меня плохой (видите, пишу не слишком понятно, да, и не слишком интересно...). Но я постараюсь исполнить свое обещание, тем более, что статья готова более, чем на половину.

Автор:  igor [ Четверг, 30 Июнь, 2011 09:51 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

alexus писал(а):
Valery Solovey писал(а):
И ещё: измой Вы обещали рассказать про БД, когда время найдётся.
Да, я помню, ...
Уважаемый alexus мне тоже кое-что обещал (давно уже :wink: ). Но я исхожу из того, что никто никому ничего не должен, так что я ни на кого не в обиде. :D

Автор:  Valery Solovey [ Четверг, 30 Июнь, 2011 10:45 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

Так я не в смысле, что кто-то кому-то должен. Просто тема интересная, а за полгода о ней можно было и позабыть...

Автор:  Андрей [ Пятница, 01 Июль, 2011 00:58 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

вот пример из практики (C#)
http://ayende.com/blog/3619/more-code-review-errors

Обратите внимание на комментарии

Автор:  alexus [ Суббота, 02 Июль, 2011 21:58 ]
Заголовок сообщения:  Re: Точки выхода или немного о структурном программировании

igor писал(а):
alexus писал(а):
Valery Solovey писал(а):
И ещё: измой Вы обещали рассказать про БД, когда время найдётся.
Да, я помню, ...
Уважаемый alexus мне тоже кое-что обещал (давно уже :wink: ). Но я исхожу из того, что никто никому ничего не должен, так что я ни на кого не в обиде. :D

Помню... и прошу прощения, что пока не готов публиковать эти материалы... Материал по проекту СУБД выложил... хотя не все, что нужно было, смог/успел написать.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/