OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Июнь, 2025 02:07

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




Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 13:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Vlad писал(а):
Vlad писал(а):
Тем не менее, границы WHILE строго определены и не могут пересекаться другими структурными операторами.

И break'ом в том числе.

Мы "вообще" или "конкретно про" Обероны?


Ну совсем вообще неинетересно, пусть для определенности будет оберон/C#/C++.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 14:09 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Ну совсем вообще неинетересно, пусть для определенности будет оберон/C#/C++.

О'кей.
Код:
switch (len % 8) {
  case 0: {
    do { HAL_IO_PORT = *pSource++;
      case 7: { HAL_IO_PORT = *pSource++; }
      ...
      case 1: { HAL_IO_PORT = *pSource++; }
    } while (--n > 0);
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 14:50 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
The Top 10 Ways to get screwed by the "C" programming language


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 15:34 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Сергей Губанов писал(а):

Как Вы думаете, зачем в структурном программировании существует конструкция WHILE, в чём её смысл?


Для организации цикла в заданном (заранее обозримом) блоке кода.

Понятно, что конструкция цикла служит для организации цикла, только это тавтология, а не ответ.

Конструкция WHILE реализует цикл с предусловием. Условие выполнения очередного шага цикла проверяется перед его началом. Для него по определению справедливо тождество:

WHILE c DO b END;
ASSERT(~c);

Он идеален для задач поиска:

WHILE ~нашли DO следующий END;
ASSERT(нашли);

модифицированный вариант на тот случай когда поиск может закончится неудачей по причине отсутствия искомого варианта:

WHILE есть_где_искать & ~нашли DO следующий END;
ASSERT(нашли OR ~есть_где_искать);
IF есть_где_искать THEN Ура мы его нашли!!! ELSE Перебрали все варианты и ничего не нашли. END

Инструкция & здесь работает по короткой схеме вычисления предиката.

Язык программирования - это прежде всего формальная нотация записи алгоритма для человека. Так вот люди придумали дисциплину программирования и договорились между собой о том, что схему поиска они формально будут опознавать по наличию специально раскрученного под эту кампанию лэйбла WHILE. Увидел в чужом коде ракрученный лэбл WHILE - сразу смекаешь, ага, значит здесь наверняка идёт какой-то поиск или какая-то его вариация. Понятно, что самому компьютеру безразлично как там на высоком уровне был записан цикл - хоть через goto. WHILE - это для человека. Если Вы пишите поиск не через WHILE значит Вы не знакомы с дисциплиной программирования. Это аналогично тому как если бы какой-нибудь инженер начал бы чертить чертежи так как ему вздумается, а не так как это принято по ГОСТу.

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

Поэтому я и спрашиваю на собеседовании в первую очередь линейный поиск. То как человек его пишет говорит о том знаком ли он с дисциплиной программирования = всемирным договором заключенным между профессиональными программистами или не знаком. Если не знаком, значит он - и в самом деле "народный ополченец" от программирования.

Пишешь поиск через for = "чертишь чертежи не по ГОСТу".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 15:54 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
О'кей.


Ну и к чему эта страшилка? К тому, что в C++ можно нарушить структурность? Да, можно. Но никто так не делает и к теме разговора не относится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 15:59 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Ну и к чему эта страшилка? К тому, что в C++ можно нарушить структурность? Да, можно. Но никто так не делает и к теме разговора не относится.

Дык, именно, что относится!
Во-первых, делали, делают и будут делать. По разному набору причин.
А, во-сторых, сами ваши вопросы и позиция в теме, немного наводят на мысль, что и вы вознамерились это же делать... :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 16:24 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Понятно, что конструкция цикла служит для организации цикла, только это тавтология, а не ответ.


Ну извини, забыл упомянуть предусловие.

Сергей Губанов писал(а):
Конструкция WHILE реализует цикл с предусловием. Условие выполнения очередного шага цикла проверяется перед его началом. Для него по определению справедливо тождество:

WHILE c DO b END;
ASSERT(~c);


Как только "c" становится чем-то с сайд-эффектом, ASSERT идет лесом.

Сергей Губанов писал(а):
Он идеален для задач поиска:


Это прямо мантра какая-то...

Сергей Губанов писал(а):
WHILE ~нашли DO следующий END;
ASSERT(нашли);


Ну и чем это лучше вот такого:
Код:
foreach()
    if (нашли)
        сделали что надо;


Сергей Губанов писал(а):
Язык программирования - это прежде всего формальная нотация записи алгоритма для человека.


Какие претензии к формальности foreach? Предусловия нет? Так это foreach, а не WHILE. foreach менее универсален в каких-то случаях, зато более удобен в других. Неужели так трудно понять? Или все что претендует на цикличность должно удовлетворять той же формулировке, что и WHILE?

Сергей Губанов писал(а):
Так вот люди придумали дисциплину программирования и договорились между собой о том, что схему поиска они формально будут опознавать по наличию специально раскрученного под эту кампанию лэйбла WHILE.


Это какие люди? Люди в моей компании, например, ищут исключительно через функциюю find. Потому что это наглядно, удобно и надежно.

Сергей Губанов писал(а):
Увидел в чужом коде ракрученный лэбл WHILE - сразу смекаешь, ага, значит здесь наверняка идёт какой-то поиск или какая-то его вариация.


Увидев в чужом коде find я понимаю, что это поиск (и ничто больше).

Сергей Губанов писал(а):
Если Вы пишите поиск не через WHILE значит Вы не знакомы с дисциплиной программирования.


Нет, это значит, что я пишу на языке, который может выразить алгоритм поиска нагляднее/удобнее/безопаснее чем через цикл с предусловием. Применительно к C# (по которому ты собеседовал) c его foreach, использование while для поиска выглядит по меньшей мере причудой (и непониманием принципиальных преимуществ foreach).

Сергей Губанов писал(а):
Это аналогично тому как если бы какой-нибудь инженер начал бы чертить чертежи так как ему вздумается, а не так как это принято по ГОСТу.


Это аналогично черчению на бумаге одних и тех же деталей, когда есть AutoCad с готовыми примитивами.

Сергей Губанов писал(а):
Дисциплина программирования - это всеобщий договор между программистами о том как формально выражать свои мысли с помощью формальной нотации алгоритмического языка программирования.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 16:34 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Дык, именно, что относится!


Каким образом?

Wlad писал(а):
Во-первых, делали, делают и будут делать.


Написать такое по незнанию сложно (интуитивно понятно, что блочные операторы не должны пересекаться). А по знанию - только чтобы навредить тому, кто это будет сопровождать.

Wlad писал(а):
А, во-сторых, сами ваши вопросы и позиция в теме, немного наводят на мысль, что и вы вознамерились это же делать... :о)


Использование break не ломает структуру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 16:45 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Использование break не ломает структуру.

Опять про филологию вспомним? Вот что Лингво (только при подключенном Компьютерном Словаре) даёт:

break 1) разрыв, обрыв || разрывать, обрывать 2) размыкать ( электрическую цепь ) 3) прерывание, (принудительный) останов || прерывать, (принудительно) останавливать 4) ломать(ся), портить(ся) 5) нарушать ( правило )

:о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 16:48 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Опять про филологию вспомним?


Не стоит. По сути (break не ломает структуры) не согласен?


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

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Не стоит. По сути (break не ломает структуры) не согласен?

Можно, конечно, начать рассусоливать, что вот в Си "своя гордость", своя СТРУКТУРА.
Но речь-то шла как раз про то, что от классических структур, которые были постулированы для удовлетворения ТРЕБОВАНИЙ (одна точка входа/одна выхода), это увело!
Был дан необходимый минимализм, решающий проблему. Но, с введением "удобств", было расширено множество вариантов решений и произошёл возврат к проблемам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:12 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Wlad писал(а):
Но речь-то шла как раз про то, что от классических структур, которые были постулированы для удовлетворения ТРЕБОВАНИЙ (одна точка входа/одна выхода), это увело!

Как насчёт RETURN в Обероне?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:16 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
PGR писал(а):
Как насчёт RETURN в Обероне?

Согласен!
Это - явное отступление от чистоты замыслов к реалиям помыслов! :о)

В оправдание можно сказать, что я не встречал прямого указания на аналогии между "обращением" к структурам управления, как к "функциональным элементам", следовательно, выход из функции, как прерывание "законченного" алгоритма не сродни break-у из циклической структуры, как ЧАСТИ реализации этого алгоритма.
Измените трактование и - "имеете полное право".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:24 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Но речь-то шла как раз про то, что от классических структур, которые были постулированы для удовлетворения ТРЕБОВАНИЙ (одна точка входа/одна выхода), это увело!


Мы сейчас пойдем по второму кругу. ТРЕБОВАНИЯ одной точки входа/выхода упрощают формальное доказательство кода. Не более и не менее. Никто не вышел и не стал себя бить пяткой в грудь, что он занимается формальным доказательством кода каждый день и поэтому следование ТРЕБОВАНИЯМ для него это святое. Однако на практике я вижу, что непременное следование этим ТРЕБОВАНИЯМ ухудшает ЧИТАБЕЛЬНОСТЬ кода ЧЕЛОВЕКОМ (со всеми вытекающими). Вопрос о том, что на практике получают те, кто не смотря на это продолжают безусловно следовать ТРЕБОВАНИЯМ остался открытым.

Wlad писал(а):
Был дан необходимый минимализм, решающий проблему. Но, с введением "удобств", было расширено множество вариантов решений и произошёл возврат к проблемам.


О каких именно проблемах речь? Только пожалуйста, не надо придумывать код, для которого соблюдение ТРЕБОВАНИЯМ действительно повышает ЧИТАБЕЛЬНОСТЬ. ЧИТАБЕЛЬНОСТЬ первична.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:33 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
О каких именно проблемах речь? Только пожалуйста, не надо придумывать код, для которого соблюдение ТРЕБОВАНИЯМ действительно повышает ЧИТАБЕЛЬНОСТЬ. ЧИТАБЕЛЬНОСТЬ первична.

Именно. Читабельность.
Вот для этого ( и ещё для обозревания проблем ) людям Дийкстру и советуют...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:47 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Однако на практике я вижу, что непременное следование этим ТРЕБОВАНИЯМ ухудшает ЧИТАБЕЛЬНОСТЬ кода ЧЕЛОВЕКОМ (со всеми вытекающими).

Интересно взглянуть на пример ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 17:57 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
PGR писал(а):
Vlad писал(а):
Однако на практике я вижу, что непременное следование этим ТРЕБОВАНИЯМ ухудшает ЧИТАБЕЛЬНОСТЬ кода ЧЕЛОВЕКОМ (со всеми вытекающими).

Интересно взглянуть на пример ...


foreach с break для поиска.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 18:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Именно. Читабельность.
Вот для этого ( и ещё для обозревания проблем ) людям Дийкстру и советуют...


Для повышения читабельности кода советуют более других авторов. При всем уважении. Причем авторы эти пишут обычно в применении к конкретному языку. И это правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 18:23 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
Для повышения читабельности кода советуют более других авторов. При всем уважении. Причем авторы эти пишут обычно в применении к конкретному языку. И это правильно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 01 Июнь, 2007 19:23 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Wlad писал(а):
Vlad писал(а):
Для повышения читабельности кода советуют более других авторов. При всем уважении. Причем авторы эти пишут обычно в применении к конкретному языку. И это правильно.

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


По-моему цель у всех уважающих себя авторов одна - донести свои знания и опыт до читателя. Причем здесь бизнес?


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

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


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

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


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

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