Система СИ и взаимосвязи между единицами физических величин.
Система СИ и взаимосвязи между единицами физических величин.

Программируя традиционным образом, очень просто упустить из виду, в каких единицах измеряются числа, с которыми мы оперируем. Например, можно сложить метры с литрами, и никакой компилятор нам при этом не поможет. 

Эта проблема реальная и уже доказано приводила к авариям, обошедшимся во многие миллионы долларов. (Одна из историй здесь).

Избежать этого помогает использование специальных библиотек, которые корректно работают с физическими единицами системы СИ типа метров или ваттов и иными единицами типа валют или штук. 

Одна из таких библиотек - KotUniL (si-units), разработанная изначально на Котлине. 

Сразу же после её появления автору библиотеки посыпались запросы по переносу её на JavaScript. Некоторое время назад в рамках обеспечения мультиплатформенности библиотеки разработан вариант библиотеки для JavaScript.

Как это принято в мире JavaScript, подключить библиотеку к вашему проекту можно с помощью NPM вот из этой репозитории.

К сожалению, JavaScript не поддерживает operator overloading и поэтому код смотрится менее элегантно, чем на Котлин.

Рассмотри, например, такую задачку: Маша протирала снаружи стекло аквариума, задела стоявшую рядом вазу, в результате чего стекло аквариума разбилось и вода вытекла на пол. В аквариуме до этой неприятности было 32 литра воды. Комната Маши имеет длину 4 метра и ширину 4,3 метра. На какой высоте в мм. находится сейчас вода в комнате, при условии, что она осталась там и не вытекла?

На Котлине решение выглядит таким образом:

val s = 4.m * 4.3.m
val h = 32.l/s 

А на JavaScript нам приходится вместо знаков арифметических операций над размерными единицами использовать функции:

var s = m.times(4).timesExp(m.times(4.3));
var v = l.times(32);
var h = v.divExp(s);

Однако все остальные прелести KotUniL сохранены. Амперы с секундами складывать нельзя, а перемножать и делить можно.

Дальнейшую информацию о KotUniL вы надаете в репозитории на GitHub ( см. подробный пример использования в модуле web_app_js).

Про теоретические основы и особенности использования KotUniL вы можете прочитать и в этой серии стаей:

  1. Магия размерностей и магия Котлина. Часть первая: Введение в KotUniL  

  2. Магия размерностей и магия Котлина. Часть вторая: Продвинутые возможности  KotUniL

  3. Магия размерностей и магия Котлина. Часть третья: Смешение магий

Комментарии (0)