четверг, 7 ноября 2013 г.

GUI-тестирование "по-русски". Скажем так. "Анонс существующих возможностей" №2

Эта статья опять будет без отсылок к Delphi.

Да простят меня Borland и Embarcadero.

 Вот тут - http://18delphi.blogspot.ru/2013/11/gui_9015.html я описал использование слова WORDWORKER.

На самом деле - использование этого слова - позволяет ЗНАЧИТЕЛЬНО влиять на грамматику языка.

Это слово и подобные ему позволяют формировать "свой DSL" из аксиоматики заданной в коде скриптовой машины на Delphi (всё же одна отсылка есть)

 Приведу ещё один пример.

 Давайте узнаем входит ли число в заданный интервал.

Например между 2 и 10.

 В нашем языке конечно есть конструкция if и всякие разные операторы сравнения. Как они "устроены внутри" - я КОНЕЧНО ЖЕ позже расскажу.

А пока - вернёмся к нашей задаче.

 На "хардкорном" уровне поставленная выше задача решается так:

X 2 >= IF (
 X 10 <= IF
  true
 ELSE
  false
)
ELSE
 false

По-русски? Да что-то - СОВСЕМ не по-русски. Да и "обратная польская запись". Не все её любят.

 Поработаем над этим.

Ещё один "анонс" - у нас есть не только слово WORDWORKER, но и WORDWORKERFUNCTION. Название "то ещё". Но учитывая наличие слова WordAlias - любой желающий может придумать ему подходящий синоним и пользоваться им.

WORDWORKERFUNCTION отличается от WORDWORKER тем, что не только умеет работать с "параметрами слева" или "параметрами справа", но и возвращать значение.

Попробуем описать слова "между" и "строго между".

Выглядит это так:

BOOLEAN WORDWORKERFUNCTION между INTEGER IN anX
 INTEGER VAR "Нижняя граница"
 INTEGER VAR "Верхняя граница"
 WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже)
 DO // - вычисляем переданное слово
 =: "Верхняя граница" // - снимаем со стека верхнюю границу
 =: "Нижняя граница" // - снимаем со стека нижнюю границу
 anX "Нижняя граница" >= IF (
  anX "Верхняя граница" <= IF
   true =: Result
  ELSE
   false =: Result
 )
 ELSE
  false =: Result
END //между

BOOLEAN WORDWORKERFUNCTION "строго между" INTEGER IN anX
 INTEGER VAR "Нижняя граница"
 INTEGER VAR "Верхняя граница"
 WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже)
 DO // - вычисляем переданное слово
 =: "Верхняя граница" // - снимаем со стека верхнюю границу
 =: "Нижняя граница" // - снимаем со стека нижнюю границу
 anX "Нижняя граница" > IF (
  anX "Верхняя граница" < IF
   true =: Result
  ELSE
   false =: Result
 )
 ELSE
  false =: Result
END //между

Пример использования:

 
 3 между ( 2 5 ) // true
 0 между ( 2 5 ) // false
 2 между ( 2 5 ) // true
 5 между ( 2 5 ) // true
 10 между ( 2 5 ) // false

 3 "строго между" ( 2 5 ) // true
 2 "строго между" ( 2 5 ) // false
 5 "строго между" ( 2 5 ) // false
 0 "строго между" ( 2 5 ) // false
 10 "строго между" ( 2 5 ) // false

Ну и ещё есть "синтаксический сахар", что а_без_пробелов равно "а_без_пробелов" поэтому для "единообразия можно писать и так:

 3 "между" ( 2 5 ) // true
 0 "между" ( 2 5 ) // false
 2 "между" ( 2 5 ) // true
 5 "между" ( 2 5 ) // true
 10 "между" ( 2 5 ) // false

 3 "строго между" ( 2 5 ) // true
 2 "строго между" ( 2 5 ) // false
 5 "строго между" ( 2 5 ) // false
 0 "строго между" ( 2 5 ) // false
 10 "строго между" ( 2 5 ) // false

Ещё хотел написать о логических операторах.

Но по-моему - "и так много".

В общем - в следующей серии".

Сейчас я её напишу.

Следующая серия вот - http://18delphi.blogspot.com/2013/11/gui-3.html

Комментариев нет:

Отправить комментарий