OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:04

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 26 Июнь, 2011 22:28 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Июнь, 2011 05:17 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Июнь, 2011 12:46 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
alexus писал(а):
Андрей писал(а):
Это ужас, почитайте комментарии, они там даже не знают базовый паттерн поиска элемента в массиве... булевы переменные какие-то вводить предлагают...
http://habrahabr.ru/blogs/complete_code/40841/
Жизнь в шаблон не вложишь... А логические переменные иногда весьма полезны... наряду с другими типами переменных, разумеется :)


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Июнь, 2011 16:39 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Июнь, 2011 22:46 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
я про вот это, в частности:

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Июнь, 2011 06:02 
Аватара пользователя

Зарегистрирован: Суббота, 27 Февраль, 2010 23:34
Сообщения: 746
Андрей писал(а):
я про вот это, в частности:...
И что же вызвало Ваш ужас?.. Вполне нормальное обсуждение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Июнь, 2011 09:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Цикл есть только один -- цикл Дейкстры.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Июнь, 2011 13:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Был тут у нас и другой пример - от пальцегнутого компиляторщика:
http://oberoncore.ru/wiki/%D1%81%D1%82% ... 0%BB%D0%B0


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Июнь, 2011 16:19 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Июнь, 2011 17:05 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
alexus писал(а):
Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.
Отвечать подробно совершенно некогда, поэтому отвечу коротко: плохому программисту принципы мешают.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 29 Июнь, 2011 10:44 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
alexus писал(а):
Но выполнять группировку данных и их анализ (в результате которой возможно придется прервать цикл)... в том же заголовке... садомазохизм, IMHO. Логика обработки имеет ярко выраженные стадии: фильтрация и анализ, что и моделируется циклом. И следует хорошо подумать, прежде чем, "улучшать" эту логику (в угоду каким-то принципам), делая ее при этом менее прозрачной/понятной.


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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 29 Июнь, 2011 10:53 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
alexus писал(а):
... на многих формах используются фильтры, позволяющие сократить объемы отображаемой информации...

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

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


Последний раз редактировалось Valery Solovey Четверг, 30 Июнь, 2011 10:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 29 Июнь, 2011 21:01 
Аватара пользователя

Зарегистрирован: Суббота, 27 Февраль, 2010 23:34
Сообщения: 746
Илья Ермаков писал(а):
Любую задачу со сложной обработкой данных я и не подумаю засовывать в одну процедуру, а разобью помельче.
Это не меняет сути...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 29 Июнь, 2011 21:16 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Июнь, 2011 09:51 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 30 Июнь, 2011 10:45 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Так я не в смысле, что кто-то кому-то должен. Просто тема интересная, а за полгода о ней можно было и позабыть...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Июль, 2011 00:58 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
вот пример из практики (C#)
http://ayende.com/blog/3619/more-code-review-errors

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Июль, 2011 21:58 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB