Функция calculate в javascript

Как понять решение задачи на JS?

Надоел уже наверно тупыми вопросами по решению задач на JS, но все же разобраться и понять хочется.

Напишите конструктор Calculator, который создаёт расширяемые объекты-калькуляторы.

Первый шаг задачи: вызов calculate(str) принимает строку, например «1 + 2», с жёстко заданным форматом «ЧИСЛО операция ЧИСЛО» (по одному пробелу вокруг операции), и возвращает результат. Понимает плюс + и минус -.
Пример использования:

alert(calc.calculate(«3 + 7»)); // 10
Второй шаг — добавить метод addMethod(name, func), который учит калькулятор новой операции. Он получает имя операции name и функцию от двух аргументов func(a,b), которая должна её реализовывать.

function isNumeric(n) < return !isNaN(parseFloat(n)) && isFinite(n); >function Calculator() < var methods = < "-": function(a, b) < return a - b; >, "+": function(a, b) < return a + b; >>; this.calculate = function(str) < var split = str.split(' '), a = split[0], op = split[1], b = split[2] if(!methods[op] || !isNumeric(a) || !isNumeric(b)) < return NaN; >return methods[op](+a, +b); > this.addMethod = function(name, func) < methods[name] = func; >; > var calc = new Calculator; calc.addMethod("*", function(a, b) < return a * b; >); calc.addMethod("/", function(a, b) < return a / b; >); calc.addMethod("**", function(a, b) < return Math.pow(a, b); >); var result = calc.calculate("2 ** 3"); alert(result); // 8

Напишите кто может Коментарии к «каждой» строчке кода. А то сижу уже 100500 минут и понять как «программа» работает не могу. вообще почти не понимаю, как бы сказать, алгоритма.

// просто функция проверяющая, является ли данное ей значение числом function isNumeric(n) < return !isNaN(parseFloat(n)) && isFinite(n); >// конструктор объектов типа Калькулятор, считай определение класса function Calculator() < // массив методов калькулятора, каждый из которых есть функция от двух чисел // виден только внутри объекта var methods = < "-": function(a, b) < return a - b; >, "+": function(a, b) < return a + b; >>; // публичный метод калькулятора, собственно его предназначение // принимает строку с выражением которое надо вычислить this.calculate = function(str) < // парсит строку с выражением // разбивая ее на 3 части по пробелам var split = str.split(' '), // создаются три переменные, два числа и операнд a = split[0], op = split[1], b = split[2] // валидация переменных if(!methods[op] || !isNumeric(a) || !isNumeric(b)) < return NaN; >// достается элемент массива methods под названием op // он является функцией // ей передаются оба числа и она с ними что-то делает // собственно результат ее выполнения возвращается из функции calculate return methods[op](+a, +b); >

// еще один публичный метод калькулятора
// принимает название функции и саму функцию
// нужен, чтобы в массив methods можно было добавлять новые операции
this.addMethod = function(name, func) methods[name] = func;
>;
>

Читайте также:  Java Cookies Example

// создается новый объект класса Калькулятор
var calc = new Calculator;

// добавляется возможность умножать два числа, будет называться «*», объект функции прилагается
calc.addMethod(«*», function(a, b) return a * b;
>);

// аналогично, возможность делить одно число на другое
calc.addMethod(«/», function(a, b) return a / b;
>);

// аналогично, возведение в степень
calc.addMethod(«**», function(a, b) return Math.pow(a, b);
>);

// смотри описание this.calculate = function(str) var result = calc.calculate(«2 ** 3»);
alert(result); // 8

Источник

Малоизвестные функции JavaScript, которые позволят улучшить качество вашего кода

В этой статье я объясню, как использовать некоторые встроенные функции, которые, несомненно, окажутся для вас полезными. Я расскажу о Debounce, Throttle, Once, Memoize, Curry, Partial, Pipe, Compose, Pick, Omit и Zip, которые вы можете сохранить в служебном файле / классе, чтобы оптимизировать качество вашего кода как разработчика JavaScript.

Хотя функции объясняются для языка JavaScript, они могут быть легко реализованы на любом языке программирования. Как только концепция различных функций будет понята, её можно будет применять везде.

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

Независимо от того, являетесь ли вы новичком или опытным senior-разработчиком, эти функции оптимизируют ваш код. Они сделают работу с JavaScript более приятной и эффективной.

Функция Debounce — это метод предотвращения повторной активации функции в результате быстрой серии событий. Она работает путём откладывания выполнения функции до тех пор, пока не пройдет определённый период времени. Функция Debounce — это полезное решение, которое может быть применено в реальных приложениях для повышения производительности за счёт предотвращения выполнения функций, если пользователь быстро нажимает на кнопки.

Следующий фрагмент покажет, как реализовать функцию debounce на JavaScript:

Источник

artsiomYavorski / calculate.js

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

function calculate ( num1 )
return function operation ( oper )
return function number2 ( num2 )
var result = 0 ;
switch ( oper )
case «+» :
result = num1 + num2 ;
break ;
case «-» :
result = num1 — num2 ;
break ;
case «*» :
result = num1 * num2 ;
break ;
case «/» :
result = num1 / num2 ;
break ;
default :
return console . log ( ‘Function suports only «+», «-«, «/», «*» opearations’ ) ;
>
if ( isNaN ( num1 ) || isNaN ( num2 ) )
return console . log ( «Enter numbers correctly!» ) ;
>
return console . log ( result ) ;
>
> ;
> ;
calculate ( 40 ) ( «+» ) ( 3 ) ;
calculate ( NaN ) ( «-» ) ( 3 ) ;
calculate ( 5 ) ( «-*» ) ( 3 ) ;
calculate ( «Hello» ) ( «/» ) ( «3» ) ;

Источник

Оцените статью