Тип данных Maybe
Создайте пустую папку в вашей системе. Вы можете называть его всем, что хотите.
$ mkdir возможно
$ cd maybe
Откройте эту папку в редакторе кода. Мне нравится использовать VS Code.
$ code.
Создайте файл с именем utils.js и напишите в нем простую служебную функцию.
const inc = n => n + 1
module.exports = {
inc
}
Здесь функция inc принимает число , увеличивает его на единицу и возвращает его в качестве результата.
Создайте еще один файл с именем index.js и импортируйте внутри него функцию inc .
const {inc} = require ('./ utils')
const input = 2;
const result = inc (input);
console.log (результат);
Запустите этот код в своем терминале, используя команду node index.js и вы получите результат как 3 .
Но что, если вы дадите строку как вход? В файле index.js передайте любую строку на вход и запустите команду index.js .
Что вы получите так как вывод является одной и той же строкой, но с прикрепленным к нему 1. Это происходит потому, что теперь оператор плюс действует как конкатенатор.
Измените значение ввода на undefined и теперь ваш результат будет NaN . Чтобы избежать этого препятствия, мы можем добавить условное утверждение, которое проверяет тип типа на входе .
const result = typeof input === 'number'? inc (input): 0
. Хотя это работает, мы можем сделать что-то намного лучше с помощью типа данных возможно, . Импортируйте новую библиотеку в этот модуль под названием crocks .
$ пряжи добавить crocks
Эта библиотека содержит Может быть тип данных внутри него. Импортируйте эту библиотеку в файл index.js .
const Возможно = require ('crocks / Maybe')
Возможно, — объект, который обертывает значение и позволяет нам различать ценности, на которые мы хотим действовать, и ценность, на которую мы не хотим действовать. Причина этого заключается в том, что Возможно состоит из двух основных типов, и это может быть любой из них за один раз.
Возможно, состоит из Просто и Ничего типа. Просто является значением, над которым мы хотим, чтобы наш код работал, а Nothing — значение которое мы хотим, чтобы наш код игнорировался.
В файле index.js перепишите код внутри него, используя тип данных Maybe .
const input = Maybe.Just (2);
const result = input.map (inc);
Запуск этого кода даст нам результат как Всего 3 . Случилось так, что мы завернули наш 2 в этом Возможно . Затем, когда мы нанесли карту на нее, чтобы применить к этой функции, Возможно развернули это значение, получили 2 и передали его в inc функция. Функция inc затем увеличила ее на 1 и передала ее в результат и завернула его обратно в Just .
Замена значения внутри вход с Возможно. Ничто () даст нам результат как Ничего .
Чтобы использовать оба этих типа создайте новую функцию внутри index.js под названием num и передайте ее на вход .
const num = val = > typeof val === 'number'? Maybe.Just (val): Maybe.Nothing ();
const input = num (2);
const result = input.map (inc);
console.log (результат);
Передача любого типа данных, который не является числом, будет пропускаться функцией, которая ожидает только числа, и даст нам Nothing . Используя возможно, тип мы добавили элемент безопасности в функцию без изменения этой исходной функции.








