Документация BILLmanager 6 Startup, Advanced

Операторы условий

Операторы условий позволяют обработать несколько возможных сценариев построения печатной формы документа. В процессе формирования шаблона система проверяет заданные условия и на основе полученного результата выполняет подходящий фрагмент кода. 

В данной статье описаны некоторые операторы для реализации условий:

  • операторы сравнения;
  • логические операторы;
  • оператор if ... else;
  • условный оператор;
  • оператор switch.

Операторы сравнения

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

ОператорИСТИНАОписание
===Если значения равны.Проверка на идентичность без типизации данных. При сравнении числа и строки всегда ложно, так как сравниваются данные разных типов.
!==Если значения не равны.
==Если значения равны.Проверка на идентичность с типизацией данных. При сравнении числа и строки преобразует текст в число и выполнит сравнение двух чисел.
!=Если значения не равны.
>Если левое значение больше.Выявление большего значения.
<Если левое значение меньше.
>=Если левое значение больше или равно правому.
<=Если левое значение меньше или равно правому.

Логические операторы

Логические операторы служат для объединения двух и более условий по правилам логических выражений. 

  • && — логическое И. Чтобы логическое выражение было истинным, все условия должны быть истинны. 
  • || — логическое ИЛИ. Чтобы логическое выражение было истинным, хотя бы одно условие должно быть истинным. 
  • ! — логическое НЕ. Изменяет результат условия на противоположный. Ложное условие будет считаться истинным и ложное условие будет считаться истинным. 

Результат логического выражения в коде обозначается ключевыми словами true и false. Логическое выражение возвращает значение true, если оно истинно и значение false, если выражение ложно. 

Оператор if ... else

Базовый синтаксис конструкции:

if (логическое выражение) {
	фрагмент кода 1 //выполняется если логическое выражение истинно.
} else {
	фрагмент кода 2  //выполняется если логическое выражение ложно.
}

Использование ключевого слова else не является обязательным:

if (логическое выражение) {
	фрагмент кода 1 //выполняется если логическое выражение истинно.
}
фрагмент кода 2 //выполняется в любом случае, независимо от результата логического выражения. 

Если из одного условия вытекает больше двух сценариев, то можно использовать вложенную конструкцию else if. В качестве примера приведено условие для отображения копеек в прописной записи итоговой суммы:

if (_second_num == 1 & _first_num != 1) _string += ' копейка'; //Первое условие. Если истинно, то выполняется описанный код и выход из условия. 
	else if (_second_num > 1 && _second_num < 5) _string += ' копейки'; //Второе условие. Проверяется, если первое условие ложно. 
else _string += ' копеек';// Выполняется, если ни одно из условий не оказалось истинным. 

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

В стандартном шаблоне счёта с помощью конструкции if ... else реализован вывод информации о плательщике:

<% if ((findu(payment.customer.profiletype) == 2) || (findu(payment.customer.profiletype) == 3)) { %> // Если плательщик является юр. лицом или ИП, тогда
	<div class="title">Покупатель:&nbsp;</div>
	<div class="company"><%= findu(payment.customer.name) %></div>
	<div>ИНН <%= findu(payment.customer.vatnum) %>, КПП <%= findu(payment.customer.kpp) %></div> // Вывести на печатную форму документа ИНН и КПП. 
   	<div class="line">&nbsp;</div>
   	<div><%= findu(payment.customer.postcode_legal) %>, <%= findu(payment.customer.country_legal_name) %>, 
	<%= findu(payment.customer.city_legal) %>, <%= findu(payment.customer.address_legal) %></div>
<% } else { %> // Иначе плательщик счиатется физ. лицом
	<div class="title">Покупатель:&nbsp;</div>
   	<div class="company"><%= findu(payment.customer.person) %></div>
   	<div class="line">&nbsp;</div>
   	<div><%= findu(payment.customer.postcode_physical) %>, <%= findu(payment.customer.country_physical_name) %>, 
	<%= findu(payment.customer.city_physical) %>, <%= findu(payment.customer.address_physical) %></div> // Вывести на печатную форму документа адрес плательщика.
<% } %>

В приведённом фрагменте кода проверяется тип плательщика. Если это юридическое лицо или индивидуальный предприниматель, то на печатную форму счёта выводится его ИНН и КПП. Иначе плательщик считается физическим лицом и на печатную форму счёта выводится его адрес. 

Условный оператор

Условный оператор — удобная альтернатива конструкции if ... else. Оператор выполняет одно действие, если логическое выражение истинно и другое действие, если выражение ложно. Базовый синтаксис:

(условие)?фрагмент кода 1:фрагмент кода 2

Фрагмент кода 1 выполняется, если условие истинно. Фрагмент кода 2 выполняется, если условие ложно. 

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

В функции приведения числа к строковому написанию содержится код:

var n=!isFinite(+number)?0:+number

Его можно расшифровать как "если выражение +number не является конечным числом, то переменной n присваивается 0, иначе n присваивается выражение +number". 

Оператор switch

Оператор switch принимает одну переменную или выражение и в зависимости от полученного результата выполняет необходимый фрагмент кода. Базовый синтаксис выглядит следующим образом:

switch (выражение) {
  case 1:
    фрагмент кода 1
    break; // завершает выполнение оператора case

  case 2: // конструкций case (вариантов) может быть любое количество
    фрагмент кода 2
    break;
  
  default: // выполняется, если полученное значение не соответствует ни одному результату. 
    фрагмент кода 3
}

Фрагмент кода 1 выполняется, если результатом выражения стало число 1. Фрагмент кода 2 выполняется, если результатом выражения стало число 2. Фрагмент кода 3 выполнится, если результатом выражения станет любое значение, кроме чисел 1 и 2. 

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

В качестве примера приведён фрагмент кода, который возвращает одну из четырёх фраз, в зависимости от входного значения. Данный код не используется в предустановленных шаблонах биллинговой системы. 

switch (word) {
  case 'hi':
    phrase = 'Hello my dear friend';
    break;

  case 'bye':
    phrase = 'Goodbye, i hope to see you again';
    break;

  case 'joke':
    phrase = 'I dont know jokes';
    break;

  case 'day':
    phrase = 'Have a nice day!';
    break;

  default:
    phrase = 'I dont understand you';
}

Данный фрагмент кода сопоставляет значение входной переменной word с возможными значениями:

  • если в переменной "word" содержится слово "hi", то переменной "phrase" будет присвоено значение "Hello my dear friend";
  • если в переменной "word" содержится слово "bye", то переменной "phrase" будет присвоено значение "Goodbye, i hope to see you again";
  • если в переменной "word" содержится слово "joke", то переменной "phrase" будет присвоено значение "I dont know jokes";
  • если в переменной "word" содержится слово "day", то переменной "phrase" будет присвоено значение "Have a nice day";
  • если совпадения не найдены, то переменной phrase будет присвоено значение "I dont understand you".