Вот тут - http://18delphi.blogspot.ru/2013/11/gui_4.html я описал слово "Нажать". Которое позволяет нажимать клавиши и отправлять их текущему контролу.
Используется это слово так:
А если надо нажать скажем 5 раз?
Ну можно написать так:
А если 100? А тысячу?
На самом деле у нас в языке конечно есть циклы. Разные.
Один из них - LOOP.
Его использование выглядит так:
Этот пример нажимает клавишу "стрелка вниз" 5 раз.
Кстати давайте его сразу перепишем:
Введём в словарь определение:
Тогда пример можно переписать так:
По-русски? Да вроде бы - да, но не совсем.
Как это переписать "по-русски"?
До сих пор нам встречались определения новых слов такие как PROCEDURE и FUNCTION.
Они умеют работать с "параметрами слева", т.е. с теми значениями, которые помещены на стек значений.
Но. Есть и ещё одно слово для определения НОВЫХ пользовательских слов.
Называется - WORDWORKER.
Оно умеет работать не только с "параметрами слева", но и с "параметрами справа". Давайте посмотрим на пример его использования.
Напишем:
Теперь наш пример можно написать так:
А если нам надо нажать 2 раза? Но пока это выглядит так:
По-русски? Вроде - да.
Но не совсем. Коряво очень. "По-колхозному".
Что можно сделать?
Можно конечно определить слово "раза", через WORDWORKER, но это не очень здорово. Дублирование кода и всё такое...
Но на наше счастье у нас в аксиоматике есть слово WordAlias. Которое занимается тем, что определяет синонимы к уже определённым словам.
При этом это именно - синонимы, а не вызов или повторение кода.
Воспользуемся словом WordAlias:
Как только мы это написали, то мы можем писать так:
Ну и ещё один штрих:
Тогда пример можно переписать так:
Надеюсь, что идея понятна.
Ну и в завершение - хочу сказать, что это был пример использования слова WORDWORKER.
На самом деле при наличии слова WordAlias - изначально можно было написать так:
Все остальные примеры - остаются без изменений.
Думаю, что в ближайшем будущем - я напишу заметку о том, "как это устроено внутри" со стороны Delphi.
А следующая серия незамедлительно следует вот тут - http://18delphi.blogspot.com/2013/11/gui-2_6.html (в ближайшие 30 мин я её напишу). Но она тоже из разряда "анонсов".
P.S. Что характерно - мы в этой статье практически нигде не упомянули Delphi и код на нём.
Т.е. мы уже "достаточно быстро" оторвались от базового языка и начали оперировать терминами DSL (http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
P.P.S. Можно кстати и "по-английски":
Тогда можно написать код:
Понятное дело, что грамматика остаётся ФОРМАЛЬНОЙ.
И есть всякие скобочки/закорючки.
И о "программировании на естественном языке" - речь не идёт.
Но! Для тестов это по-моему - самое оно.
Тестировщик может открыть код теста и повторить ТО ЖЕ САМОЕ руками.
Конечно он должен знать (или догадываться) о назначении скобочек и закорючек.
Используется это слово так:
"Нажать {('Enter')}" "Нажать {('Tab')}" "Нажать {('Shift-Tab')}" "Нажать {('Down')}"
А если надо нажать скажем 5 раз?
Ну можно написать так:
"Нажать {('Down')}" "Нажать {('Down')}" "Нажать {('Down')}" "Нажать {('Down')}" "Нажать {('Down')}"
А если 100? А тысячу?
На самом деле у нас в языке конечно есть циклы. Разные.
Один из них - LOOP.
Его использование выглядит так:
5 LOOP "Нажать {('Down')}"
Этот пример нажимает клавишу "стрелка вниз" 5 раз.
Кстати давайте его сразу перепишем:
Введём в словарь определение:
CONST "Стрелка вниз" 'Down'
Тогда пример можно переписать так:
5 LOOP "Нажать {("Стрелка вниз")}"
По-русски? Да вроде бы - да, но не совсем.
Как это переписать "по-русски"?
До сих пор нам встречались определения новых слов такие как PROCEDURE и FUNCTION.
Они умеют работать с "параметрами слева", т.е. с теми значениями, которые помещены на стек значений.
Но. Есть и ещё одно слово для определения НОВЫХ пользовательских слов.
Называется - WORDWORKER.
Оно умеет работать не только с "параметрами слева", но и с "параметрами справа". Давайте посмотрим на пример его использования.
Напишем:
WORDWORKER раз INTEGER IN aCount // - aCount это "параметр слева" aCount LOOP // - LOOP - уже знакомый нам оператор цикла ( WordToWork // - WordToWork - "параметр справа", т.е. ссылка на то, что идёт за нашим словом DO // - вычисляет значение WordToWork. В терминах паскаля DO "эквивалентен" операции ^, или в терминах C - * ) ; // раз
Теперь наш пример можно написать так:
5 раз "Нажать {("Стрелка вниз")}"
А если нам надо нажать 2 раза? Но пока это выглядит так:
2 раз "Нажать {("Стрелка вниз")}"
По-русски? Вроде - да.
Но не совсем. Коряво очень. "По-колхозному".
Что можно сделать?
Можно конечно определить слово "раза", через WORDWORKER, но это не очень здорово. Дублирование кода и всё такое...
Но на наше счастье у нас в аксиоматике есть слово WordAlias. Которое занимается тем, что определяет синонимы к уже определённым словам.
При этом это именно - синонимы, а не вызов или повторение кода.
Воспользуемся словом WordAlias:
WordAlis раза раз // - это синоним к слову "раз"
Как только мы это написали, то мы можем писать так:
5 раз "Нажать {("Стрелка вниз")}" 2 раза "Нажать {("Стрелка вниз")}"
Ну и ещё один штрих:
WordAlias "Стрелку вниз" "Стрелка вниз"
Тогда пример можно переписать так:
5 раз "Нажать {("Стрелку вниз")}" 2 раза "Нажать {("Стрелку вниз")}"
Надеюсь, что идея понятна.
Ну и в завершение - хочу сказать, что это был пример использования слова WORDWORKER.
На самом деле при наличии слова WordAlias - изначально можно было написать так:
WordAlias раз LOOP // - это синоним к слову LOOP WordAlis раза раз // - это синоним к слову "раз"
Все остальные примеры - остаются без изменений.
Думаю, что в ближайшем будущем - я напишу заметку о том, "как это устроено внутри" со стороны Delphi.
А следующая серия незамедлительно следует вот тут - http://18delphi.blogspot.com/2013/11/gui-2_6.html (в ближайшие 30 мин я её напишу). Но она тоже из разряда "анонсов".
P.S. Что характерно - мы в этой статье практически нигде не упомянули Delphi и код на нём.
Т.е. мы уже "достаточно быстро" оторвались от базового языка и начали оперировать терминами DSL (http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
P.P.S. Можно кстати и "по-английски":
WordAlias times LOOP // - это синоним к слову LOOP WordAlias "Press" "Нажать"
Тогда можно написать код:
5 times "Press {('Down')}"
Понятное дело, что грамматика остаётся ФОРМАЛЬНОЙ.
И есть всякие скобочки/закорючки.
И о "программировании на естественном языке" - речь не идёт.
Но! Для тестов это по-моему - самое оно.
Тестировщик может открыть код теста и повторить ТО ЖЕ САМОЕ руками.
Конечно он должен знать (или догадываться) о назначении скобочек и закорючек.
Комментариев нет:
Отправить комментарий