Тип данных 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
. Используя возможно, тип
мы добавили элемент безопасности в функцию без изменения этой исходной функции.