OberonCore
https://forum.oberoncore.ru/

Модуль без процедур (для пущей близости с паскалю и ЕГЭ)
https://forum.oberoncore.ru/viewtopic.php?f=7&t=2246
Страница 1 из 2

Автор:  Info21 [ Среда, 20 Январь, 2010 23:35 ]
Заголовок сообщения:  Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Насмотревшись на всякие старые книжки в связи со шрифтами, а также в виду пугала ЕГЭ, вот что придумалось.

Добавляем в DevDebug команду Reload (код ниже; она просто перегружает модуль; при этом, само собой, выполняется исполняемое тело модуля).
Втыкаем ее в меню Dev с привязкой на, скажем, Ctrl+R (или куда Анатолий Иванович посоветует; строка ниже).
После этого простейшие учебные программы пишем в таком виде:

Код:
MODULE  y;
   IMPORT  Log := StdLog,  In := i21sysIn,  Math;
   
BEGIN
   Log.String('Привет');  Log.Ln;
END y.

Компилируем -- Ctrl+K.
Выполняем -- Ctrl+R.

Плюсы:
-- максимально близко к старым программам.
-- не надо вообще командиров/коммандеров -- никаких объяснений, ничего.

Минус:
-- маленький барьер при переходе к полноценной работе с процедурами -- НО программ с процедурами в ЕГЭ и нет.

Процедура для вставки в DevDebug:
Код:
   PROCEDURE Reload*;
      VAR  t: TextModels.Model;  s: TextMappers.Scanner;  ok: BOOLEAN;
   BEGIN
      t := TextViews.FocusText();
      IF t # NIL THEN
         s.ConnectTo( t );  s.SetPos( 0 );
         REPEAT Scan( s ) UNTIL ( s.type = smodule ) OR s.rider.eot;
         IF  s.type = smodule  THEN
            Scan( s );
            IF ( s.type = TextMappers.string ) & IsIdent( s.string ) THEN
               ok := TRUE;
               UnloadMod( s.string, ok );
               IF  ok  THEN  Dialog.ShowStatus("#Dev:Ok")  END;
               Controls.Relink;
               Kernel.LoadMod( s.string )
            ELSE
               Dialog.ShowMsg("#Dev:NoModNameFound");
            END
         ELSE
            Dialog.ShowMsg("#Dev:NoModNameFound");
         END
      END
   END Reload;


Строка для меню Dev:
Код:
   "&Reload"   "R"   "DevDebug.Reload"   "TextCmds.FocusGuard"

Автор:  Info21 [ Четверг, 21 Январь, 2010 00:53 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Нужна еще поправка для русских ключевых слов, она есть, потом выложу.

Сейчас важно понять: это нужно или нет.

Вообще-то, даже с 5-клашками было удобно в модуле иметь несколько команд.
То есть тут мы несколько теряем в гибкости.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.

Автор:  А.П. [ Четверг, 21 Январь, 2010 08:23 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Info21 писал(а):
Сейчас важно понять: это нужно или нет.

Вообще-то, даже с 5-клашками было удобно в модуле иметь несколько команд.
То есть тут мы несколько теряем в гибкости.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.

Хм... Неожиданный ход. Налицо существенное упрощение для новичков без потерь для более гибкого использования. Только я бы отдал под компиляции и перезагрузку практически свободные в учебном контексте функциональные клавиши F8 (компиляция англоязычного варианта), F9 (компиляция русскоязычного варианта), F10 (перезагрузка модуля). Но надо объяснить, что перед перезагрузкой надо обязательно выделять тот материал (входной поток), который будет считываться операторами ввода. При наличии коммандера и строки запуска этого не требуется, а ошибочно оставленное выделение произвольного фрагмента может даже помешать.

Использование "привычной" строки запуска с коммандером и входным потоком здесь никак не ограничивается, что тоже хорошо.

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

Под эту новую возможность полезно переписать примеры начального уровня. Например, те, что предлагает Михалкович Станислав (http://pascalabc.net/ru/programmyi-i-al ... schih.html), только с полноценными русскими идентификаторами и без сишных "улучшений". Для удовлетворения требованиям ЕГЭ средствами с минимальной сложностью - самое то получится!

Так что полный "одобрямс" :D

Автор:  Info21 [ Четверг, 21 Январь, 2010 09:14 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

А.П. писал(а):
Хм... Неожиданный ход.
Это всё Сергей Юрьевич. Когда-то он сообщал, как надо сравнивать КП с Шарпом, и у него простейшая программа на КП как раз была телом модуля.

А отсутствие явной команды загрузки модуля мне царапало навроде отсутствия в наборе цифр нуля. Нуль -- штука мощная, окупается.

А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.

А.П. писал(а):
Но надо объяснить, что перед перезагрузкой надо обязательно выделять ... входной поток
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
После этого повторные выполнения (перезагрузки) его не меняют.

А.П. писал(а):
Под эту новую возможность полезно переписать примеры начального уровня. Например, те ...
Кому флаг в руки? :)

А.П. писал(а):
Для удовлетворения требованиям ЕГЭ средствами с минимальной сложностью - самое то получится!

Так что полный "одобрямс" :D
Спасибо.

Автор:  А.П. [ Четверг, 21 Январь, 2010 09:39 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Info21 писал(а):
А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.

У меня почему-то не работает. Ваша прилада компилит только русскоязычные тексты. Кроме того, нельзя смешивать русские и английские ключ. слова. Это ограничение появилось в последней версии, раньше было можно. Я вроде ничего не портил, только горячие клавиши навесил свои.
Info21 писал(а):
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
У меня этой команды никогда не было. В оригинальном ББ тоже не вижу.
Info21 писал(а):
Кому флаг в руки? :)

Кому-то вроде меня :(

Автор:  Александр Ильин [ Четверг, 21 Январь, 2010 09:59 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

А.П. писал(а):
F10 (перезагрузка модуля)
F10 бы не трогали. Это стандартная клавиша для выхода в главное меню, наряду с Alt. А Shift+F10 - вызов контекстного меню (ежели кто не знает).

Автор:  Info21 [ Четверг, 21 Январь, 2010 10:23 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Александр Ильин писал(а):
А.П. писал(а):
F10 (перезагрузка модуля)
F10 бы не трогали.
Не будем.

Автор:  Info21 [ Четверг, 21 Январь, 2010 10:27 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

А.П. писал(а):
Info21 писал(а):
А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.
У меня почему-то не работает. Ваша прилада компилит только русскоязычные тексты. Кроме того, нельзя смешивать русские и английские ключ. слова. Это ограничение появилось в последней версии, раньше было можно. Я вроде ничего не портил, только горячие клавиши навесил свои.
Проверил по школьной версии от i21 -- всё работает, смешивать можно. Нет такого ограничения -- и не помню, чтобы было.

А.П. писал(а):
Info21 писал(а):
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
У меня этой команды никогда не было. В оригинальном ББ тоже не вижу.
А это очень хорошая, удобная команда. Есть во всех новых версиях от i21, которые доведены до некоторого ума в связи с книгами (я специально некоторое время пободался с ними, раз такой повод был удачный).

А.П. писал(а):
Info21 писал(а):
Кому флаг в руки? :)
Кому-то вроде меня :(
Ну, тогда флаг Вам в руки, Анатолий Иванович! :)

Автор:  Trurl [ Четверг, 21 Январь, 2010 12:02 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

А вот вариант с одной кнопкой:
Код:
PROCEDURE CompileAndReload*;
BEGIN
   DevCompiler.CompileAndUnload;
   Kernel.LoadMod(DevCPT.SelfName$);
END CompileAndReload;

Автор:  А.П. [ Четверг, 21 Январь, 2010 13:21 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Trurl писал(а):
А вот вариант с одной кнопкой:

Однако гениально! :)
Простейший пример, не оставляющий "мусора" в РЖ, только результаты программы:
Код:
MODULE Пример;
   IMPORT Log := StdLog;
BEGIN
   Log.Clear;
   Log.String('Привет')
END Пример.

На компиляцию и перезагрузку задействована всего одна ф.клавиша, спорить стало не о чем. В случае синт.ошибок РЖ не чистится.

Мне этот подход всё больше нравится своей исключительной внешней простотой. По сравнению с Турбопаскалем появляется только строка импорта. Оппонентам остается все меньше пространства для маневра. Окончательная наша победа уже близко :mrgreen:
Теперь у нас в арсенале два главных орудия для работы с новичками:
1) черепашка - для детей;
2) "всё после BEGIN" - для старших, кому с черепашкой возиться не к лицу по возрасту.
Вариант с русским языком - запасное орудие для полной и безоговорочной капитуляции противников.
В который уже раз удивляюсь гибкости и мощи КП/ББ.:D :D

Автор:  Валерий Лаптев [ Четверг, 21 Январь, 2010 13:45 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Info21 писал(а):
Нужна еще поправка для русских ключевых слов, она есть, потом выложу.

Сейчас важно понять: это нужно или нет.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.

Нужно, нужно!
От Паскаля проще переходить. Спасибо!
Я тут среди одного школьного учителя попытаюсь такое внедрить. Так будет проще.

Автор:  Сергей Губанов [ Четверг, 21 Январь, 2010 15:53 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Мегаполезно для интерактивной работы.

Автор:  Info21 [ Четверг, 21 Январь, 2010 16:31 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Trurl писал(а):
А вот вариант с одной кнопкой:
Код:
PROCEDURE CompileAndReload*;
BEGIN
   DevCompiler.CompileAndUnload;
   Kernel.LoadMod(DevCPT.SelfName$);
END CompileAndReload;
Да понятно, что можно и в одну загнать.

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

Автор:  Илья Ермаков [ Четверг, 21 Январь, 2010 19:55 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Созерцатель писал(а):
Сергей Губанов писал(а):
Мегаполезно для интерактивной работы.
Просто интересно... Наверное я просто ещё чего-то не понял. Все радуются. Объясните на пальцах - по поподу чего такие бурные возгласы одобрения? :)


Раньше детишкам надо было писать главную процедуру и вызывать её через команду (коммандер с клюком мышкой).

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

Автор:  Info21 [ Пятница, 22 Январь, 2010 16:06 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Капитальный аргумент против объединения компиляции и выполнения (перезагрузки модуля) в одной команде -- противоречие такого объединения правилу "Почаще нажимай Ctrl+K".

Автор:  Сергей Губанов [ Пятница, 22 Январь, 2010 16:27 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Так вроде предлагалось объединить перезагрузку с предварительной компиляцией, но не предлагалось повесить её на Ctrl+K и отказаться от обычной компиляции.

Я у себя поставил так:
Ctrl+K - просто скомпилировать,
F9 - скомпилировать и запустить на выполнение (так было в турбо паскале и в дельфи).

Кстати, просто скомпилировать в турбо паскале/дельфи вроде было Ctrl+F9.

Автор:  Сергей Губанов [ Пятница, 22 Январь, 2010 16:29 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Надо бы ещё только в кнопке "скомпилировать и запустить на выполнение" не запускать на выполнение если не скомпилировалось.

Автор:  Евгений Темиргалеев [ Пятница, 22 Январь, 2010 19:09 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Сергей Губанов писал(а):
Так вроде предлагалось объединить перезагрузку с предварительной компиляцией, но не предлагалось повесить её на Ctrl+K и отказаться от обычной компиляции.

Ctrl+K - просто скомпилировать,
F9 - скомпилировать и запустить на выполнение (так было в турбо паскале и в дельфи).
А если хочется N раз программку выполнить? Зачем её компилировать лишние N-1 раз?

Самый простой вариант про который уже говорилось --- две команды: компиляция и перезагрузка (влекущая выполнение). Кому надо всегда напишут в меню третью "компиляция; перезагрузка"

Кстати в делфи по F9 компиляция шла при условии изменения исходника и отсутсвтия exe, иначе --- только запуск. Зачем гнаться за лишними сложностями? (в ББ можно и фолд развернуть или селектор и т.п. ... Models.clean)

Автор:  Info21 [ Пятница, 22 Январь, 2010 19:31 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Самый простой и четкий вариант: отдельно компиляция, отдельно выполнение/перезагрузка.

Разделение проверки(компиляции) и выполнения -- очень общая вещь.
Детям этот шаблон надо впечатывать.
В этом плане сваливать всё в одну кучу -- неразвивающе.

Тем более, что придется делать взаимодействие двух этапов по переменной СДЕЛАНО.
И возня, и бессмысленно.

Автор:  Илья Ермаков [ Пятница, 22 Январь, 2010 22:16 ]
Заголовок сообщения:  Re: Модуль без процедур (для пущей близости с паскалю и ЕГЭ)

Отделена тема "Стиль "Скульптор" и "Снова о методах"
viewtopic.php?f=73&t=2266

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/