Меню

Протестируйте себя: действительно ли вы владеете 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

У вас уже есть учетная запись?

Войти