zoukankan      html  css  js  c++  java
  • [Functional Programming] Functional JS

    Learning notes. Video.

    Less than:

    If you use 'ramda', you maybe know 'lt, gt'..

    R.lt(2, 1); //=> false

    Is '2' less than '1' , the result is false. We can see that the data is actually come first which is 2.

    Normally in FP, we want data come last. What we can do is using 'flip' from 'crocks.js'.

    const {flip} = require('crocks')
    const {lt} = require('ramda')
    
    // isLessTen :: Number -> Boolean
    const isLessTen = flip(lt, 10)
    isLessThen(9) // true

    If/Else:

    const diff10 = v => {
        let result = null;
        if (v < 10) {
            result = v - 10
        } else {
            result = v + 10
        }
    }

    We can use 'ifElse' from 'crocks.js':

    const {not, ifElse} = require('crocks');
    const {add, lt} = require('ramda');
    
    const declarative = ifElse(
        not(flip(lt, 10)), // if the given number is greater than 10
        add(10), // then plus 10
        add(-10) // go negitive
    )

    or/and:

    /**
     * Or && And
     */
    // Just check one object has length prop is not enough
    // Because Array has length, function has length
    // Array is also object
    const _hasLengthProp = x =>
        (isObject(x) && x.length !== undefined) || isArray(x);
    
    // hasLengthProp :: a -> Boolean
    const hasLengthProp = or(isArray, and(isObject, hasProp('length')));
    log(hasLengthProp([])) // true

    [100] === [100]?

    The Answer is : false

    JS consider each [] is a new Object. 

    In this case, we can use 'propEq' from 'crocks.js' to save us some safe checking:

    const _aIs100A = x => isObject(x) && x.a === [100];
    log(
        _aIs100A({a: [100]})
    ) // false, because it consider [100] is a new object
    const aIs100A = and(isObject, propEq('a', [100]))
    log(
        aIs100A({a: [100]}) // true
    )

    ES5 way to check Array is typeof Array, and Date is typeof Date:

    const _isArray = x => Object.prototype.toString.call(x) === '[object Array]';
    const _isDate = x => Object.prototype.toString.call(x) === '[object Date]';
  • 相关阅读:
    qemu-img 整理
    学习 Spring (七) Resource
    学习 Spring (七) Resource
    ASP.NET 文件上传类 简单好用
    IOS之UIStepper控件详解
    IOS颜色块设置
    IOS之GCD记录
    ios项目中引用其他开源项目
    IOS之pageControl
    UI常用字体定义和继承的实例,ResearchKitCode
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10779156.html
Copyright © 2011-2022 走看看