Протестируйте себя: действительно ли вы владеете Java-Script в SAP HANA XS?
В этой статье я хочу немного рассказать о возможностях js-а, описание которых мне не удалось найти на scn-е, но о которых, на мой взгляд, было бы полезно знать тем, кто изучает или работает с SAP HANA XS.
Введение:
В этой статье я хочу немного рассказать о возможностях js-а, описание которых мне не удалось найти на scn-е, но о которых, на мой взгляд, было бы полезно знать тем, кто изучает или работает с SAP HANA XS. В статье будут рассмотрены:
- итераторы,
- динамические аргументы функций,
- простой способ копирования объектов,
- объект Map,
- небольшой пример по каррингу,
- «на закуску», пример по типизированным массивам.
Итераторы
Итератор – это объект, который представляет из себя некую последовательность и позволяет последовательно обращаться к её объектам с помощью специального метода – next() . Вы поймёте принцип работы итератора, проанализировав следующий код:
function Generator(){
yield "num1";
yield "num2";
for (var i = 0; i < 3; i++)
yield i;
}
var g = Generator();
var temp1 = g.next();
var temp2 = g.next();
var temp3 = g.next();
$.response.setBody(temp1+', '+temp2+', '+temp3+' ');
$.response.contentType = "text/html";
Результатом работы этого кода будет строка –
num1, num2, 0
Оператор yield – позволяет сформировать генератор, который ставит на «паузу» а также запускает далее выполнение кода.
Предлагаю рассмотреть более комплексный пример:
function vals() {
for (var i = 0; i < arguments.length; i++) {
yield arguments[i];
}
}
var o = vals(1, 2, 'abc');
var temp = o.next();
temp = temp+o.next();
temp = temp+o.next();
$.response.setBody(temp);
$.response.contentType = "text/html";
В этом примере также формируется итератор. Но уже количество в последовательности зависит от количества аргументов в функции.
Результатом здесь будет
3abc
Почему 3 – потому что o.next() вернёт по очереди все аргументы, но переменная temp сначала будет Number, а после того, как вернётся третий аргумент – станет string-ом.
Если же мы поменяем порядок вызова аргументов, например так:
var o = vals('abc',1, 2);
То результат уже будет такой:
аbc12
Динамическое выполнение кода
В следующем примере представлена функция, которая превращает любые объекты в символьное представление. Функция, обратная функции eval – uneval. Один из самых очевидных способов её применения – это копирование объектов.
var m = function () {this.a = 1};
var temp = new m();
temp.am_i_copy = 0;
var h = temp;
var h2 = eval(uneval(temp)); //easy method to copy objects
h2.am_i_copy = 1;
$.response.setBody(h2.am_i_copy+' - '+h.am_i_copy);
$.response.contentType = "text/html";
Результатом будут
1 – 0
То есть h – ссылается на temp. Оператором = мы указали на него же.
А объект h2 – это уже новый объект – клон, поэтому когда мы присваиваем свойству am_i_copy - 1-у исходный h – не меняется.
Объект Map
Следующий пример – это описание объекта Map(). Map позволяет оперировать
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти