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]';
  • 相关阅读:
    网页布局
    Block Formatting Context
    SEO初识
    新的一个月,就这么不知不觉的来临了
    Js结束,项目进行中
    JS学习中....
    ws快捷键
    Html的学习以及webstorm的使用
    从事前端开发应该了解的CSS原理
    jQuery动画
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10779156.html
Copyright © 2011-2022 走看看