Комментарии по теме

«Ре­ко­ме­нда­ции по обе­спе­че­нию бе­зо­па­сно­сти и контроля SAP HANA»
Дмитрий Буслов:
(1) Автор начинает с того, что HANA — это СУБД, позволяющая хранить записи в колонках и работающая в оперативной памяти. Я бы, хотел сделать акцент на том, что HANA — не просто СУБД,...
«Различие между двумя текущими версиями HANA»
Олег Точенюк:
Спасибо конечно... я вот не понимаю как консалт выживает в этом мире, когда есть такой чудесный традиционный сайт help.sap.com/ :-)
«Мастер класс по архи­те­кту­ре SAP HANA»
Олег Точенюк:
Особенно если учесть, что часть настроек являются блокирующими для перехода, а часть просто начинают работать по другому, то как бы с ERP вообще возможно придется настраивать новую систему...

Протестируйте себя: действительно ли вы владеете Java-Script в SAP HANA XS?

1790

Введение:

В этой статье я хочу немного рассказать о возможностях 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

Следующий пример – это

Ограниченный доступ

Для прочтения полной версии статьи необходимо зайти как зарегистрированный пользователь.

Функциональная область: SAP HANA / SAP HANA
Ролевое назначение: SAP Консультант / Consultant

Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»