OberonCore https://forum.oberoncore.ru/ |
|
История с несколькими моралями (в том числе анти-FOR) https://forum.oberoncore.ru/viewtopic.php?f=7&t=1443 |
Страница 5 из 7 |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 17:31 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Algo писал(а): Тем не менее у них нет строгого положения в блоке и структурность они всё равно нарушают. Нет, не нарушают. Или по-вашему IF/ELSE тоже нарушает, потому что у ELSE нет строгого положения в блоке? Рассматривайте FOR с BREAK как один блок с соответствующей семантикой. И процедуру с RETURN - тоже как один блок. Algo писал(а): Vlad писал(а): Не, не становится. Потому что условие - трехэтажное выражение с 10 переменными, модификация которых плавно размазана по всем 20 строкам. Почему то, обычно, условия даже для длинных циклов трёх этажными не становятся. Ну конечно. А с какого примера все началось в этой теме? Или это условие не считается трехэтажным? Vlad писал(а): Ещё есть возможность, в соответствии с задачами, возлагаемыми на тело цикла, ввести доп. логические переменные, которые условие сократят но не ухудшат понимания. С этим тоже есть проблема. Такие переменные нужно инициализировать до цикла и внутри цикла. Причем зачастую одинаковым способом. Это ведет к дублированию и разбуханию кода. Чтобы там не говорили о принципиальной разнице между "инициализацией" цикла и вычислением следующего шага. Vlad писал(а): Если циклы должны быть на 1-2 строки, о чём вообще тогда сыр бор? Сыр-бор о догматичности А именно о занесении RETURN из FOR в разряд "плохих" конструкций, вплоть до исключения из языка в пользу обобщенного WHILE. Мне кажется такой подход неправильным. Во всяком случае до предложения "другого" WHILE, не уступающему в читабельности такому FOR. |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 17:48 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Madzi писал(а): Прерывают. Не прерывают. См. мой ответ Algo. Madzi писал(а): Просто нужно грамотно условие выхода составлять, чтобы оно было понятно при обозрении, а не запутывать умышленно. Так я ж уже упоминал, что как раз стремление записать условие в одном месте и не дает сделать его наглядным. Вкупе с секцией VAR Madzi писал(а): Я уже говорил выше. Никто не запрещает писать FOR с RETURN, или пользоваться GOTO, но при этом не нужно говорить что программа структурная. Преимущества структурного подхода давно доказаны, поэтому спорить по этому поводу не вижу смысла. Я не собираюсь спорить с преимуществом структурного подхода. Я принципиально против приравнивания RETURN к GOTO. Madzi писал(а): По поводу исключений скажу следующее: любое исключение это тот же самый GOTO на обработку ошибок (отложенная обработка). Появились исключения не от хорошей жизни, а от упавшего уровня программистов разработчиков, которые вместо грамотного построения программы "ловят" ошибки на выходе. Гы Опять без комментариев %) Почитайте про механизм исключений хоть в википедии, что-ли... А то слова try/catch знаете, а зачем это нужно и какие проблемы призвано решать - нет. Madzi писал(а): Если мы НЕ ЗНАЕМ какие ошибки могут возникнуть в foo (); (например библиотека стороннего разработчика и он открыл только часть исключений), то грамотно обработать ситуацию мы не можем. Ужас И чем это отличается от ситуации, когда вместо "неизвестного" исключения возвращается "неизвестный" INTEGER? Ну кроме того, что INTEGER можно забыть проверить и полезной информации из него вытащить можно намного меньше? (2Alexey_Donskoy: не, ну как тут не прикалываться, а? Madzi писал(а): Пример 1: try { a = x / y; } catch (Exception e) { System.out.writeln("Деление на нуль."); } Пример 2: IF x = 0 THEN Out.String("Делитель равен нулю"); Out.Ln; ELSE a = x / y; END; Э... И к чему эти примеры? |
Автор: | Algo [ Вторник, 07 Апрель, 2009 19:01 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
2 Vlad Больно в ваших сообщениях много смаликов. Уж не прикалываетесь ли вы сударь. Разборки на тему почему IF THEN ELSE структурный оператор, а GOTO и Ко не структурные это уже за границами моего интереса... В приведённом примере условие (из трёх неравенств) не трёх этажное. В моём понимании этажность с количеством строк коррелирует. И всё же непонятна ваша просветительская роль в борьбе с догмами. Зачем нужна туча конструкций для реализации циклов, которые будут занимать 1-2 две строки? В чём выражается сложность восприятия какого либо варианта программы, если текста физически мало? Какой нибудь объективный критерий этой сложности можете указать? Я уже высказался в защиту чистого WHILE: в все основные характеристики цикла сосредоточены в одном месте, и в случае не однострочного цикла - анализировать проще. |
Автор: | Algo [ Вторник, 07 Апрель, 2009 19:13 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
2 Madzi Интересны (действительно интересны) Ваши рассуждения на счёт исключительных ситуаций. Как вы предлагаете обрабатывать такие ситуации: 1. Процедуры вызывают друг друга: A->B-> ... Z. В Z возникает проблема, которую имеет смысл решать только в A, цепочку вызовов же следует просто прервать. Раздувать код проверками в каждой процедуре? 2. Где-то, в глубине программы произошла ошибка, обработки которой по методике "без-исключений" предусмотрено не было (ну не учли). Ошибка не фатальная, можно было бы отменить часть действий и пойдти дальше. Как это реализовать без исключений? |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 19:30 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Algo писал(а): Больно в ваших сообщениях много смаликов. Уж не прикалываетесь ли вы сударь. Местами, когда оппонент заявляет, что "исключения появились от упавшего уровня программистов" или т.п. чушь. Но по поводу FOR и RETURN я вполне серьезно. Algo писал(а): В приведённом примере условие (из трёх неравенств) не трёх этажное. В моём понимании этажность с количеством строк коррелирует. Приведенный пример через FOR с RETURN записывается понятнее. Условие упрощается. Вот и все. Algo писал(а): И всё же непонятна ваша просветительская роль в борьбе с догмами. Зачем нужна туча конструкций для реализации циклов, которые будут занимать 1-2 две строки? В чём выражается сложность восприятия какого либо варианта программы, если текста физически мало? Какой нибудь объективный критерий этой сложности можете указать? Я уже высказался в защиту чистого WHILE: все основные характеристики цикла сосредоточены в одном месте, анализировать проще. Я уже тоже сказал, почему WHILE не заменяет FOR. FOR - явно выражает итерацию по диапазону. WHILE - нет. FOR - высокоуровневая конструкция. WHILE - ассемблер. Я в своей практике использую еще более высокоуровневые конструкции - find, for_each, filter, transform, которые я не хочу писать через WHILE или FOR по той же причине. |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 19:34 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Ну конечно. А с какого примера все началось в этой теме? Или это условие не считается трехэтажным? У меня слов нет. Честно. Если у Вас большие проблемы с обычными логическими выражениями, то стоит ли так долго буянить? По-детски это как-то выходит... Студенты-прогульщики вот так на "чёртовы формулы" обижаются обычно. Других ассоциаций в голову нейдёт... |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 19:38 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Приведенный пример через FOR с RETURN записывается понятнее. Условие упрощается. Вот и все. Да ни хрена он не понятней. Программа должна читаться "между строк", т.е. по условиям, которые выполняются между операторами. (другой, обычный вариант - читается как есть и прогоняется "в уме", как если бы её выполнял комп). Мне НАДО видеть условие целиком. Вот эту самую конъюнкцию. И я не собираюсь её восстанавливать по частям из Ваших RETURN. Тем более гонять в уме цикл. Мне наплевать, как его будет выполнять компьютер, мне важно знать, какое "уравнение" из предикатов он итерационно решает. |
Автор: | Евгений Темиргалеев [ Вторник, 07 Апрель, 2009 19:43 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Приведенный пример через FOR с RETURN записывается понятнее. Условие упрощается. Вот и все. viewtopic.php?p=27092#p27092Который уже круг? Сколько я пропустил? |
Автор: | Algo [ Вторник, 07 Апрель, 2009 19:49 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Я уже тоже сказал, почему WHILE не заменяет FOR. FOR - явно выражает итерацию по диапазону. WHILE - нет. FOR - высокоуровневая конструкция. WHILE - ассемблер. Я в своей практике использую еще более высокоуровневые конструкции - find, for_each, filter, transform, которые я не хочу писать через WHILE или FOR по той же причине. Только не надо сваливаться в другую тему. Для реализации этих конструкций достаточно наличия анонимных методов. Но здесь не о filter речь, а о WHILE против FOR+RETURN. Вы сказали, что циклы должны быть на 1-3 строчки. Ладно, я это не обсуждаю, завернём всё по процедурам и функциям, бог с ним. Как программа из 3-х строчек, решающая одну и ту же задачу с WHILE может быть сложнее для восприятия чем с FOR+RETURN? Пусть while - ассемблер, пусть. Но какая разница если программа короткая? Как для программиста может быть настолько сложным логическое выражение из трёх неравенств? Неужели их понимание не является одним из важнейших в деятельности программиста? |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 20:41 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Algo писал(а): Как для программиста может быть настолько сложным логическое выражение из трёх неравенств? Неужели их понимание не является одним из важнейших в деятельности программиста? Логическое выражение из трех неравенств сложнее логического выражения из двух неравенств. Чисто количественно. Плюс разделение разных по смыслу действий - итерации и проверки. |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 20:44 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Логическое выражение из трех неравенств сложнее логического выражения из двух неравенств. Чисто количественно. Плюс разделение разных по смыслу действий - итерации и проверки. Нет никаких действий. Есть единый процесс. И единое логическое "уравнение". |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 20:46 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Илья Ермаков писал(а): Мне НАДО видеть условие целиком. А как же "разделяй и властвуй"? Или к циклам этот принцип не относится? Илья Ермаков писал(а): Вот эту самую конъюнкцию. И я не собираюсь её восстанавливать по частям из Ваших RETURN. Тем более гонять в уме цикл. Мне наплевать, как его будет выполнять компьютер, мне важно знать, какое "уравнение" из предикатов он итерационно решает. Да никто не гоняет в уме цикл. Видят цикл FOR - итерация по диапазону. Видят RETURN - возврат из функции. Сразу видно диапазон. Сразу видно по какому условию возврат. |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 20:47 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Илья Ермаков писал(а): Нет никаких действий. Есть единый процесс. И единое логическое "уравнение". Это в вашей терминологии это единый процесс с единой проверкой. Приводящий в определенных случаях к нечитаемому коду. |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 20:49 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): А как же "разделяй и властвуй"? Или к циклам этот принцип не относится? Ну ядрёна вошь, что разделять-то? То, что должно восприниматься целостно? Ну, Влад у нас и спорщик. Он тут удовлетворяет сразу две цели: любопытство и любовь поспорить до у.. до упору... |
Автор: | Vlad [ Вторник, 07 Апрель, 2009 21:01 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Илья Ермаков писал(а): Ну ядрёна вошь, что разделять-то? То, что должно восприниматься целостно? Ну блин. Вот я напишу целостную программу в целостном файле на 10 мегабайт текста. И скажу сопровождающему программисту - программа должна восприниматься как одно целое. Илья Ермаков писал(а): Ну, Влад у нас и спорщик. Он тут удовлетворяет сразу две цели: любопытство и любовь поспорить до у.. до упору... Я всего лишь высказываю свое ИМХО. Основанное на чтении многих мегабайтов кода. |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 21:13 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Vlad писал(а): Я всего лишь высказываю свое ИМХО. Основанное на чтении многих мегабайтов кода. Замечательно, все поняли, ИМХО хорошо известно. Оно аргументировано в рамках общепринятого в ИТ контекста понимания. И стиля составления алгоритмов. Но речь о другой ситуации. |
Автор: | sia [ Вторник, 07 Апрель, 2009 21:30 ] |
Заголовок сообщения: | Руки прочь от FOR (и от WHILE тоже)! |
Наблюдаю непрекращающуюся дискуссию про FOR и WHILE. Да, интересно. Непонятно только - зачем противопоставлять одни конструкции языка другим? Вполне можно варьировать употребление в зависимости от ситуации, удобства, читаемости, вкуса, опыта, пристрастий (начальника), гибкости (мышления), закостенелости (пальцев)... И ссылаясь на многогранность мира радоваться, что в Обероне молодой Вирт не ограничился одним только WHILE (хотя мог бы). А вообще, как мне кажется, корень проблемы - недостаток или неполноценность имеющегося FOR - отсутствие операторов BREAK и CONTINUE. Поэтому остаётся пользоваться суррогатным RETURN в качестве выхода и из процедуры тоже! На мой взгляд методологически более правильно: 1) когда диапазон известен на момент запуска цикла - использовать FOR (вываливаться по RETURN если результат уже известен, но ещё не конец, т.к. не заложен! штатный BREAK и нет другого способа); 2) если с помощью FOR не удаётся - границы неизвестны, нелинейные приращения индекса, и т.п. - то использовать WHILE. В общем случае я бы характеризовал цикл FOR как более компактный, жёсткий, определённый, наглядный и надёжный; тогда как WHILE - гибче, допускает больший произвол, требует большей внимательности, легче ошибиться, - а потому более ненадёжный и опасный. ... Д.Кнут писал на асемблере, пользовал метки и "GOTO", и оттого его алгоритмы не стали хуже. Структурность не догма, и думаю не стоит размахивать ею как жупелом. Ну а истина скорее где-то посередине. [size=150][/size] |
Автор: | Alexey_Donskoy [ Вторник, 07 Апрель, 2009 21:31 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Илья, повторяю свой вопрос - как быть в случае необходимости работы с диапазоном индексов? FOR определяет и показывает этот диапазон в явном виде. WHILE размазывает этот диапазон так, что трудно увидеть и собрать. Эргономика, однако! P.S. Это просто к апологетике FOR; досрочный выход из цикла - другая тема... |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 21:38 ] |
Заголовок сообщения: | Re: История с несколькими моралями (в том числе анти-FOR) |
Ну, напишите раздельно присваивание начального значения, а границы выделите шрифтом в исходнике. Жирненьким. Правда, не всякая среда программирования позволяет такую штуку, как оформление исходника по смыслу Стоп. Вы вообще про без досрочного выхода? Ну, используйте FOR - почему нет-то... |
Автор: | Илья Ермаков [ Вторник, 07 Апрель, 2009 21:42 ] |
Заголовок сообщения: | Re: Руки прочь от FOR (и от WHILE тоже)! |
sia писал(а): Непонятно только - зачем противопоставлять одни конструкции языка другим? Ещё раз и снова попёрло. Хоть ветку закрывай. Ну хоть ап стену биццца - но одни конструкции соответствуют математическому пониманию алгоритмов, которое должно быть в голове у каждого программёра, а другие - нет. Они не плохи и не хороши. Они просто - призраки, которых нет... Не возникают при составлении алгоритма как должно. Касательно Вирта - хоть бы думали, прежде чем писать. 55 лет - молодой? С 5 языками за спиной - тем более. Именно потому цикла FOR в Виртовском Обероне как раз НЕТ. Дональд Кнут выполнял работу по собиранию и упорядочиванию коллекции алгоритмов. Какое это отношение имеет к вопросу обоснования программирования, которым занимались другие учёные? Просто Кнут на каждой уважающей себя полке таки стоит, а Дейкстра, к сожалению, нет. Не такая внушительная книжка - да и как-то гораздо меньше издавались. |
Страница 5 из 7 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |