Пример 14. Как расширить применение пользовательских функций с помощью параметров и оператора return() для iMacros?

В предыдущей записи блога было показано, как написать код, объявляющий функцию в формате function name() {}, а также способ её вызова для того, чтобы воспроизвести содержащиеся в ней (функции) определённые действия.

Сегодня расширим свой кругозор способами применения функций такими понятиями или терминами, как условные параметры и возвращающий оператор return().

Например, мы можем объявив переменную var t, присвоить ей какое-либо начальное значение, допустим 2, вот  так:

[code lang=»js»]
var t=2
[/code]

 

Значение этой переменной прибавим к iim-командной строчке, которая выполняет действие временной задержки. Вместе это будет так:

[code lang=»js»]
var t=2
iimPlayCode(‘WAIT SECONDS=’+t)
[/code]

 

Используя возможности функции, мы можем указывать любое необходимое значение переменной var t, вызывая её с указанным параметром вот так:

[code lang=»js»]
var t
function xtime(t) {iimPlayCode(‘WAIT SECONDS=’+t)}
xtime(2) //1-e действие: выполняется команда "ждать 2 секунды"
xtime(12) //2-е действие: выполняется команда "ждать 12 секунд"
[/code]

 

Как вы наверное заметили, переменной var t не присваивается какое-либо начальное значение, в этом нет необходимости, впрочем как и вообще её объявлять. В круглых скобках () после имени функции добавляется параметр, равный значению переменной var t. Теперь при вызове функции xtime(2) с указанием параметра внутри круглых скобок получаем нужное действие.

Из предыдущей записи блога вы наверное помните, что были показаны две отдельные функции для команды «нажми на кнопку» получишь результат и твоя мечта…, расположение которой ещё надо уточнить. Вызывать эти две функции нужно было соответственно, так:

[code lang=»js»]
function xbuy1() {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:purchase_button_top’)}
function xbuy2() {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:purchase_button_bottom’)}
xbuy1() //1-e действие: выполняется команда "жать по кнопке, расположенной ВВЕРХУ"
xbuy2() //2-e действие: выполняется команда "жать по кнопке, расположенной ВНИЗУ"
[/code]

 

Объявив дополнительные переменные и применив пример по использованию параметров, можно написать одну функцию для двух выше указанных действий. Это будет так:

[code lang=»js»]
var xbutton
var up=’purchase_button_top’
var down=’purchase_button_bottom’
function xbuy(xbutton) {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:’+xbutton)}
xbuy(up) //1-e действие: выполняется команда "жать по кнопке, расположенной ВВЕРХУ"
xbuy(down) //2-e действие: выполняется команда "жать по кнопке, расположенной ВНИЗУ"
[/code]

 

Теперь рассмотрим пример функции с оператором return(), возвращающим значение.

Для этого эксперимента возьмем iim-команду по извлечению спот-цены, вот она:

[code lang=»js»]
var price
iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:spot EXTRACT=TXT’) //извлечь значение
price=iimGetLastExtract(1) //получить извлечённое значение
[/code]

 

Теперь возведём, так сказать, iim-команду в функцию:

[code lang=»js»]
var price
function xspot()
{
iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:spot EXTRACT=TXT’) //извлечь значение
price=iimGetLastExtract(1) //получить извлечённое значение
return(price) //вернуть полученное значение функции
}
xspot() //вызвать функцию
[/code]

 

Если приглядеться, то можно, так сказать, упразднить переменную var price, и чтобы увидеть результат в отдельно открытом окне, поместим вызов функции в так называемый алерт alert(), вот так:

[code lang=»js»]
function xspot() {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:spot EXTRACT=TXT’); return(iimGetLastExtract(1))}
alert(xspot())
[/code]

 

Ну что же, давайте наконец-то напишем коротенькую инструкцию по торговым сделкам с применением функций разумеется. Что мы имеем? У нас есть функция извлечения спот-цены, функция ожидания, функция открытия сделки. Добавим ещё функцию закрытия информационного окна по результату cделки (см. в предыдущей записи блога), и зациклим все эти действия в бесконечность ))

[code lang=»js»]
var t
var spot_1
var spot_2
var xbutton
var up=’purchase_button_top’
var down=’purchase_button_bottom’

function xspot() {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:spot EXTRACT=TXT’); return(iimGetLastExtract(1))}
function xtime(t) {iimPlayCode(‘WAIT SECONDS=’+t)}
function xbuy(xbutton) {iimPlayCode(‘TAG POS=1 TYPE=SPAN ATTR=ID:’+xbutton)}
function xclose() {iimPlayCode(‘TAG POS=1 TYPE=A ATTR=ID:close_confirmation_container’)}

function xtrade()
{
spot_1=xspot() //извлечь цену
xtime(2) //ждать 2 секунды
spot_2=xspot() //извлечь цену (снова)
if(spot_1<spot_2) xbuy(up) //если предыдущий тик ниже текущего, то жать кнопку "вверх"
if(spot_1>spot_2) xbuy(down) //если предыдущий тик выше текущего, то жать кнопку "вниз"
xtime(12) //ждать 12 секунд
xclose() //закрыть информационное окно
}

while(true) {xtrade()} //пустить "по кругу" функцию торговли xtrade()
[/code]

 

Ну и «домашнее задание» для особо любопытных:

  • Что произойдёт, если (при воспроизведении выше записанного кода) «предыдущий тик станет равен текущему»?

 

 

Скачать примеры скриптов в zip-архиве.

 

В этом видео-ролике наглядно показан выше описанный процесс.