OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 07 Апрель, 2009 08:55 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Vlad писал(а):
P.S. Только не надо опять начинать про то, что такие вольности (RETURN из FOR) позволяют писать кошмарный код. Да, позволяют. Но и более читабельный, чем обощенный WHILE - тоже позволяют.
Ваша читабельность с RETURN и FOR - закостенелые в мозгах неправильные паттерны. У правильно обученного студента проблем с читабельностью правильных паттернов не будет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 08:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Иван Кузьмицкий писал(а):
Если речь идёт о конкретном FOR с RETURN, то существо тут, на мой взгляд такое. Когда человек с кем-то договаривается, то от него ждут выполнения оговоренных условий.


Ну вот такие условия у типичного FOR - заданные итерации или выход через RETURN. Что не устраивает? Нужна гарантия отсутствия RETURN - придумайте свой FOR :) Менее практичный, но более строгий. В C++, например, есть std::for_each (из него нельзя сделать return :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:00 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Что-то в этом есть, конечно :)
Но вот тут мы уже вроде договорились, что в Дракон-схеме уже такого "кидалова" не получается, а получается всё просто и понятно.

Какой из этого следует вывод? А такой, что "договорённость" касательно итератора носит более психологический, характер, нежели характер принципиальной необходимости. И вообще - мелкий технический вопрос :)

Да, использование итератора для поиска, возможно, не совсем методически верно. Но - это ж просто элемент технической реализации...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:04 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Евгений Темиргалеев писал(а):
Ваша читабельность с RETURN и FOR - закостенелые в мозгах неправильные паттерны.
Простите меня, пожалуйста, за занудство, но почему тот паттерн - правильный, а этот - неправильный?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:07 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Alexey_Donskoy писал(а):
Евгений Темиргалеев писал(а):
Ваша читабельность с RETURN и FOR - закостенелые в мозгах неправильные паттерны.
Простите меня, пожалуйста, за занудство, но почему тот паттерн - правильный, а этот - неправильный?

Вот именно!
Как говорится: А судьи-то кто?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:12 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Хотя бы потому, что
1) Не выбивается из общего подхода к построению цикла с инвариантом. Простейший пример.
2) Наработка этого паттерна параллельно нарабатывает навыки использования матлогики.
3) Не нарушает принципов структурного программирования.

Я думаю этого вполне достаточно, чтобы этот паттерн был правильным в преподавании. Пока не будет найдено более правильного.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:24 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Vlad писал(а):
Ну вот такие условия у типичного FOR - заданные итерации или выход через RETURN. Что не устраивает?

FOR, согласно определению\контракту - это цикл с заданным числом повторений. Вставка RETURN - нарушение контракта. Вы сперва говорите - "пройду все 10 элементов", а потом на 5-м номере вдруг спрыгиваете. Зачем тогда говорить "пройду все 10 элементов"? Бла-бла-шоу, вот что это такое.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вот кстати ещё пункт + отдельно про читабельность. Vlad-у не стоит забывать, что FOR в КП и в Cи/Си++ и иже с ними совсем разные вещи.

Уточню сразу:
1) В КП - FOR - частный случай WHILE.
2) В Си/Си++ - while - частный случай for. За всякие явы/шарпы говорить не буду ибо точно не знаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:42 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Иван Кузьмицкий писал(а):
FOR, согласно определению\контракту - это цикл с заданным числом повторений. Вставка RETURN - нарушение контракта. Вы сперва говорите - "пройду все 10 элементов", а потом на 5-м номере вдруг спрыгиваете. Зачем тогда говорить "пройду все 10 элементов"? Бла-бла-шоу, вот что это такое.
Замечу, что аналогичные рассуждения справедливы также и для WHILE. При нормальном выходе из WHILE мы знаем, что "условие продолжения" гарантировано не выполняется. Если же внутри WHILE стоит RETURN, то таких гарантий уже нет. Аналогично для REPEAT.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 09:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Да, и если для понимания границ итератора достаточно посмотреть на условие цикла, то в случае с RETURN придётся анализировать весь код цикла. Это РАДИКАЛЬНО ухудшает читаемость. Вот такой поворот судьбы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 10:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
Здравая мысль. Но не кажется ли вам, Илья, что паттерны вполне можно заучивать и на С++?

Конечно, можно. Мне приходилось как-то учить на С++ (вытаскивать оставших студентов).
Только всё равно приходится вводить драконовские ограничения. Стоит ли игра свеч? А в коде у соседа они увидят другой кунштюк - и сразу вопрос "А почему мне так низя?" :)

P.S. По поводу "любил поиграть" - ну, мы тут когда-то в Орле тоже вдоволь "наигрались". Шаблоны же, вах :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 10:33 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Иван Кузьмицкий писал(а):
Да, и если для понимания границ итератора достаточно посмотреть на условие цикла, то в случае с RETURN придётся анализировать весь код цикла. Это РАДИКАЛЬНО ухудшает читаемость. Вот такой поворот судьбы.

Ну, ЧИТАЕМОСТЬ это не ухудшит, а вот ДОПОЛНИТЕЛЬНЫЙ объём работ по анализу кода - добавит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 10:39 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Игорь Лоскутов писал(а):
Иван Кузьмицкий писал(а):
FOR, согласно определению\контракту - это цикл с заданным числом повторений. Вставка RETURN - нарушение контракта. Вы сперва говорите - "пройду все 10 элементов", а потом на 5-м номере вдруг спрыгиваете. Зачем тогда говорить "пройду все 10 элементов"? Бла-бла-шоу, вот что это такое.
Замечу, что аналогичные рассуждения справедливы также и для WHILE. При нормальном выходе из WHILE мы знаем, что "условие продолжения" гарантировано не выполняется. Если же внутри WHILE стоит RETURN, то таких гарантий уже нет. Аналогично для REPEAT.

Я думаю что пора называть вещи своими именами. RETURN в цикле (WHILE, REPEAT, FOR) - это скрытый GOTO. А использование GOTO является нарушением принципа структурного программирования. Поэтому, конечно, цикл FOR с RETURN имеет право на жизнь, но в этом случае речь о структурном программировании вести не стоит.

Помниться есть такие правила Кодда, которые ограничивают базы данных, определяя Реляционную модель. Думаю что стоит вспомнить правила ограничивающие структурное программирование.

Надеюсь, что для всех очевидны преимущества СТУКТУРНОГО программирования, перед неструктурным.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 10:53 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Madzi писал(а):
Ну, ЧИТАЕМОСТЬ это не ухудшит, а вот ДОПОЛНИТЕЛЬНЫЙ объём работ по анализу кода - добавит.

Я бы всё же сказал, что чтение всегда связано с анализом написанного.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 10:59 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Иван Кузьмицкий писал(а):
Madzi писал(а):
Ну, ЧИТАЕМОСТЬ это не ухудшит, а вот ДОПОЛНИТЕЛЬНЫЙ объём работ по анализу кода - добавит.

Я бы всё же сказал, что чтение всегда связано с анализом написанного.

Я не спорю, что связано. Говоря что читаемость не ухудшится, я имел ввиду ЭРГОНОМИЧЕСКУЮ составляющую процесса. Энергетические затраты будут естественно выше, потому что будет анализ "лишнего кода", без которого можно было бы и обойтись, если бы мы чётко знали, что в цикл нам лезть не нужно. А знать мы это можем только в одном случае, когда из цикла нет другого выхода, а только по условию


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 11:19 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Так-то я согласен, только ещё думаю, что эргономичность здесь получается искусственная - нарушаешь тобой же поставленное условие ради выверта из собственных же загогулин. То есть, налицо ослабление требования построения правильных конструкций, что является расходованием накопленной энергии


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 14:00 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Ну, а я считаю, по хорошему цикл FOR должен быть составной частью общего с WHILE цикла. Т.е. FOR это не самостоятельный цикл, а просто специальное средство для работы с индексами.
FOR i:= 0 TO Count-1 WHILE "условие f(i)" DO ... END;

FOR i:= 0 TO Count-1 REPEAT
...
UNTIL "условие f(i)" END;

FOR i:= 0 TO Count-1 WHILE True DO f(i) END; а здесь WHILE можно опустить.

Мне кажется это бы решило некоторые проблемы, либо просто выкинуть FOR, что бы никого не путать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 15:18 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Иван Кузьмицкий писал(а):
FOR, согласно определению\контракту - это цикл с заданным числом повторений. Вставка RETURN - нарушение контракта. Вы сперва говорите - "пройду все 10 элементов", а потом на 5-м номере вдруг спрыгиваете. Зачем тогда говорить "пройду все 10 элементов"? Бла-бла-шоу, вот что это такое.


Какому определению/контракту? Если язык позволяет фигачить туда RETURN, то какое это нарушение контракта? Я бы еще понял претензию, если RETURN можно было сделать неявно. Но нет, все явно - или заданное количество итераций или RETURN.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 15:24 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Иван Кузьмицкий писал(а):
Да, и если для понимания границ итератора достаточно посмотреть на условие цикла, то в случае с RETURN придётся анализировать весь код цикла. Это РАДИКАЛЬНО ухудшает читаемость. Вот такой поворот судьбы.


Неправда. Границы в случае FOR как раз явно заданы (в отличие от WHILE, где они смешаны с "полезным" условием выхода). Так что анализировать надо больше в случае WHILE. О чем я и говорю с самого начала :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Апрель, 2009 15:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Я думаю что пора называть вещи своими именами. RETURN в цикле (WHILE, REPEAT, FOR) - это скрытый GOTO.


Ужас какой :) GOTO! :)

Madzi писал(а):
А использование GOTO является нарушением принципа структурного программирования.


Вы сначала докажите, что это GOTO :) А уж потом предавайте анафеме :)

Madzi писал(а):
Поэтому, конечно, цикл FOR с RETURN имеет право на жизнь, но в этом случае речь о структурном программировании вести не стоит.


В каком месте FOR c RETURN противоречит структурному программированию? При том, что он тривиально может быть преобразован к FOR без RETURN?

P.S. Чего ж вы про механизм исключений тогда скажете? Хе-хе :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

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


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

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


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

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