OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 21:19

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




Начать новую тему Ответить на тему  [ Сообщений: 145 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 16 Февраль, 2010 10:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
ain писал(а):
Опираясь на ваши рассуждения, можно любую конструкцию заменить на SomeOperator.
Тот же if.


Цитата:
Не можете.
Exit – элемент управления ходом выполнения программы.


Я ПОНИМАЮ, ЧТО НЕ МОГУ! :)
Вот в том и претензия, что не могу!
Потому что имею полное право заменять элементы в гнёздах конструкции более высокого уровня, без повреждения логики работы этой конструкции.

Кто считает, что не имею, пусть идёт учить чо-нить.... Из области физмата или машиностроения, на выбор.

Смотрите с другой стороны. Не я в Вашу конструкцию подставляю, а Вы в мою.
Запишем
if c1 then s1;
if c2 then s2;
if c3 then s3;
Так вот, если вместо s1, s2, s3 подставить блоки, в которых есть Exit, логика работы указанной конструкции изменится.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Хотя, надо ещё заметить, что в старом Паскале цепочки вида
if then begin
end
else if begin
...

читаются действительно тяжело, громоздко.

Отсюда, возможно, желание избегать такой компоновки и "брекать".

Вот ещё один косяк старопаскалевского синтаксиса, затормаживающий программёрскую грамотность (противоречием между правильностью и ясной записью).


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
Хотя, надо ещё заметить, что в старом Паскале цепочки вида
if then begin
end
else if begin
...
читаются действительно тяжело, громоздко.
Агащазз! Конечно, конструкции вида:
if ...
then if ...
then ...
else
else ...

читаются гораздо легче, а, главное, в них невозможно сделать ошибку! :lol:

Нет уж, увольте, я как раз ВСЕГДА пишу begin-end для гарантии, и считаю, что это больше плюс, чем минус.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да не про begin-end сам по себе, а в целом про многобуквенность и малонаглядность того, что в Обероне/КП пишется просто IF ELSIF ELSIF END.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:05 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Евгений Темиргалеев писал(а):
Код:
begin
  Data := Sender.GetNodeData(Node);
  CellText := '';
  if not Assigned(Data) then Exit;
...

1) Ни одной конструкции с заданием результата и явным послед. выходом через Exit
2) В нескольких местах неявное завершение приводит к одному и тому-же умолчальному результату.

1) Есть (CellText := '').
2) Что Вас смущает?

Не вижу тут никаких противоречий. На мой взгляд, применён стандартный шаблон программирования:

Result:=<default>;
if ... then begin A; exit end;
if ... then begin B; exit end;
if ... then begin C; exit end;
...

Шаблон действительно плох, если кому-то захочется копипастить A, B, или C.
Шаблон плох, потому что в результате редактирования A, B, или C легко сделать ошибку (забыть exit), которая может привести к дополнительному выполнению ненужного кода.
Шаблон хорош, потому что гарантирует возврат осмысленного результата независмио от прочих ошибок в коде и особенностей входных данных.
Однако тем же он и плох, поскольку ошибка может быть замаскирована.
Однако, без дефолтного результата ошибка ещё более замаскирована...

А чего обсуждаем-то? Вывод тут один: дефолтный результат есть, всё в порядке.

Если речь более про exit, то в процитированном примере он всего лишь один. Не вижу в этом коде ничего криминального. Но и показательно-назидательного тоже не вижу, кроме дефолтного результата :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:08 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
ain писал(а):
Я лично пишу так, чтобы мне было как можно проще и понятней.
Чем меньше нужно времени на понимание, что же именно происходит в данной процедуре, тем лучше программа для меня.


Вот давайте про понимание. Когда перед Вами процедура, Вы читаете её линейно, как книжку, строчка за строчкой? Формируя в голове представление о том, как оно может выполняться?

А некоторые (я не буду называть их опытными... или грамотными... хотя они так и называются :) ) будут изучать (просто уже на уровне подсознательного управления взглядом) в соответствии со структурой. Как если применить зум и оставить конструкции только самого верхнего уровня, а потом постепенно спускаться вниз.
Т.е. Ваш кусок кода при первом пробеге взглядом по процедуре читается как if ... then ...; if ... then ...; И уже вычленена информация о том, какой порядок выполнения возможен в данном алгоритме.

Далее погружаемся вглубь (в тела if-ов) и пробегаю по ним их. Так вот, информация, которую я получу при более детальном изучении программы (на следующем уровне зума), не может вступать в противоречие с той, которую я уже получил, просмотрев конструкции верхнего уровня. В частности, не может влиять на порядок их выполнения.

А если вдруг влияет, то идёт "когнитивный диссонанс". После чего врубается (всё это за долю секунды происходит) уже сознательный уровень, с ощущением дискомфорта и намерением разобраться, в чём подвох. После чего идёт мягкая или крепкая, от ситуации, ругань на того, кто это писал :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:11 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
Далее погружаемся вглубь (в тела if-ов) и пробегаю по ним их. Так вот, информация, которую я получу при более детальном изучении программы (на следующем уровне зума), не может вступать в противоречие с той, которую я уже получил, просмотрев конструкции верхнего уровня. В частности, не может влиять на порядок их выполнения.
Это важно. Убедил - в очередной раз! :)


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Alexey_Donskoy писал(а):
Не вижу в этом коде ничего криминального. Но и показательно-назидательного тоже не вижу, кроме дефолтного результата :)


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

Для преподавания вообще очень ценное понимание. Иначе трудно понять, почему с таким трудом доходят некоторые дисциплинирующие требования до новичков - они просто ещё не видят разницы между написанным, которое "литературно" - шо в лоб, шо по лбу. А структурно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:23 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Я все-таки считаю, что необходим учет "психофизики". У меня нет оснований считать, что Ain или Геннадий Тышов "обманывают" когда говорят, что стиль "скульптор" с отсечениями- выходами дает им более понятную картину (а мне наоборот требуется дополнительное умственное усилие, чтобы при таком стиле получить целостную картину). Я также не склонен думать, что это просто "плохая" привычка. Предполагаю, что это особенности мышления - восприятия (кому когнитивный диссонанс, а для кого "точка активации"). Мне кажется это нужно учитывать. В этой связи считаю, что В КП достигнут оптимум (имеется ввиду LOOP и свободный RETURN)
Сейчас заметил, что при таких рассуждениях я тоже оказываюсь на позиции где программа - это "литературный текст" для компьютера. Но может в этом что-то есть. Кстати литераторов тоже учат правильному стилю :D


Последний раз редактировалось Axcel Вторник, 16 Февраль, 2010 11:31, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
очередной раз за последние дни понял проблему - разницу между структурным и "литературным" чтением.


С этим же, кстати, может быть связана проблема "математики - худшие программисты".

Человек, не совсем поднаторевший в работе с формальными текстами (или не видящий в этом самом по себе "кайфа", как физики) , будет тянуться к организации своей работы с ними (что поменьше тратить на это времени). Подбирать и применять приёмы структурирования, и т.п.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Axcel писал(а):
Предполагаю, что это особенности мышления - восприятия.


Так на таком уровне особенности не бывают прирождёнными.

Это уже когда-то сформированные особенности. Или наоборот - какие-то не были сформированы, и они компенсировались развитием других (не привыкли структурировать - поднаторели в распутывании в голове "макарон" из исходника).

Ну да, я допускаю, что изменить эти особенности в какой-то момент уже будет очень трудно, почти невозможно. Да и нужно ли, если у кого-то дело к пенсии, например? :)

Но в целом - всё это формируемо; это - прививаемая культура, которая должна закладываться при проф. подготовке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:30 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Илья Ермаков писал(а):
Вот давайте про понимание. Когда перед Вами процедура, Вы читаете её линейно, как книжку, строчка за строчкой? Формируя в голове представление о том, как оно может выполняться?

А некоторые (я не буду называть их опытными... или грамотными... хотя они так и называются :) ) будут изучать (просто уже на уровне подсознательного управления взглядом) в соответствии со структурой. Как если применить зум и оставить конструкции только самого верхнего уровня, а потом постепенно спускаться вниз.
Т.е. Ваш кусок кода при первом пробеге взглядом по процедуре читается как if ... then ...; if ... then ...; И уже вычленена информация о том, какой порядок выполнения возможен в данном алгоритме.

Далее погружаемся вглубь (в тела if-ов) и пробегаю по ним их. Так вот, информация, которую я получу при более детальном изучении программы (на следующем уровне зума), не может вступать в противоречие с той, которую я уже получил, просмотрев конструкции верхнего уровня. В частности, не может влиять на порядок их выполнения.

А если вдруг влияет, то идёт "когнитивный диссонанс". После чего врубается (всё это за долю секунды происходит) уже сознательный уровень, с ощущением дискомфорта и намерением разобраться, в чём подвох. После чего идёт мягкая или крепкая, от ситуации, ругань на того, кто это писал :)


Не зацикливаясь на циклах и не уходя от экзитов - что есть структура?

Структура есть нечто целое, что удобно взгляду и пониманию (пусть и в программистском частном случае).

Сам по себе вид структуры есть вопрос традиции.

Давайте пофантазируем.

Если
IF ... THEN ...
ELSEIF ... THEN ...
ELSEIF ... THEN ...
ELSEIF ... THEN ...
ELSEIF ... THEN ...
ELSE ...
END
структура

то
LOOP
...
EXITIF ... ;
...
EXITIF ... ;
...
EXITIF ... ;
...
ENDLOOP
структура ничуть не хуже... или как?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:36 
Модератор
Аватара пользователя

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

Касательно приведённой конструкции - она не нова, где-то была, в каких-то языках...

Ваша конструкция не эквивалентна произвольному EXIT-y, она строже.
Этот EXITIF может стоять только на 0-м уровне вложенности внутри LOOP (а не где-то глубже).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:38 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Илья Ермаков писал(а):
...
Ну да, я допускаю, что изменить эти особенности в какой-то момент уже будет очень трудно, почти невозможно. Да и нужно ли, если у кого-то дело к пенсии, например? :)...

Вы меня имеете ввиду? Ну мы еще посмотрим кто - кого. :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:38 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Alexey_Donskoy писал(а):
1) Есть (CellText := '').
2) Что Вас смущает?
Меня смущает противоречие между
1) код называют читабельным и более понятным, нежели получаемый по схеме if elsif else end, предложенной Губановым (на всякий случай уточняю: ain привёл свою схему с Exit как более понятную viewtopic.php?p=42527#p42527; потом привёл конкретный код, сделанный по этой схеме viewtopic.php?p=42854#p42854)
2) при всей этой "понятности", чтобы сформулировать условие (понять) когда какой результат будет выдан -- хоть CellText := '', хоть остальные -- нужно изучать код покомандно от и до. В то время как в "конкурирущем" подходе достаточно поглядеть на охрану соотв. ветки if


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Кстати, как раз Вашего рода конструкции в практике не приживаются. Потому что для строгого программирования они практически бесполезны (что есть, что нету; вон REPEAT и тот отмер практически).

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:41 
Модератор
Аватара пользователя

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


Нет, Вас и в мыслях не держал... Держал другого человека, да.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 11:54 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Евгений Темиргалеев писал(а):
Меня смущает противоречие между
1) код называют читабельным и более понятным, нежели получаемый по схеме if elsif else end, предложенной Губановым (на всякий случай уточняю: ain привёл свою схему с Exit как более понятную viewtopic.php?p=42527#p42527; потом привёл конкретный код, сделанный по этой схеме viewtopic.php?p=42854#p42854)
2) при всей этой "понятности", чтобы сформулировать условие (понять) когда какой результат будет выдан -- хоть CellText := '', хоть остальные -- нужно изучать код покомандно от и до. В то время как в "конкурирущем" подходе достаточно поглядеть на охрану соотв. ветки if
Совершенно согласен. И с первым, и со вторым. И приведёный код не очень-то соответствует приведённой схеме. И потребовались некоторые усилия, чтобы понять, что именно является результатом. И т.п.

Тем не менее, схема от ain мне показалась более эргономичной. Почему? Потому что, видимо, в голове нет паттерна цепочки if...elseif (вернее, есть, но он изначально "испорчен" ожиданием многостраничного кода и соответствующей необходимостью поиска этого elseif).
Визуально в Драконе всё выглядело бы значительно понятнее - с самого первого взгляда.

Возможно, это мои личные проблемы и не стоит их выносить на форум. Аргументы Ильи убедительны, но я так пока не умею. Усилия прилагать надо...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Февраль, 2010 12:02 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Илья Ермаков писал(а):
... конструкция не эквивалентна произвольному EXIT-y, она строже.
Этот EXITIF может стоять только на 0-м уровне вложенности внутри LOOP (а не где-то глубже).

Касательно приведённой конструкции - она не нова, где-то была, в каких-то языках...

Это все так. Но если ограничиться "взглядом", то и при существующем порядке вещей и внутренней дисциплине можно изобразить нечто

LOOP
q1; IF p1 THEN
EXIT END;
q2; IF p2 THEN
EXIT END;
q3; IF p3 THEN
EXIT END;
END

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

Насчет предикатов - сразу не соображу, а вот постановка задачи - у всех на зубах навязла, типичный пример - чтение из файла и обработка неизвестного числа элементов...


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

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


Это чем же там простейший WHILE не угодил?


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

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


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

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


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

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