zoukankan      html  css  js  c++  java
  • [Javascript Crocks] Safely Access Object Properties with `prop`

    In this lesson, we’ll use a Maybe to safely operate on properties of an object that could be undefined. We’ll use our initial code as the basis for a prop utility function that can be reused with different objects and various property names. Instead of just blindly asking for a property, this version of prop will drop us into the safe confines of a Maybe, giving us a Just when the property exists and a Nothing for an undefined property. Once we’ve built up our own prop utility, we’ll refactor the code one more time to take advantage of the built-in proputility provided by the crocks library.

    When you want to pull out a value from object or array, you might doing like this:

    const safe = require('crocks/Maybe/safe');
    const { inc } = require('./utils');
    const { not, compose, isNil, prop } = require('ramda');
    
    // check the value is not undefined or null
    const isNotNil = safe(compose(not, isNil));
    // check object's prop value is not undefined or null
    const safeProp = propName => obj => isNotNil(prop(propName, obj));
    // get 'page' prop from the object as Maybe type
    const safePage = safeProp('page');
    // data
    const qs = { page: 4, pageSize: 10, totalPages: 203 };
    //default value is 1
    const result = safePage(qs).option(1);
    
    console.log(result); // 4

    Actually from the code above we write many code, we use Ramda lib for utils functions and  safe prop method.

    const { not, compose, isNil, prop } = require('ramda');
    
    const isNotNil = safe(compose(not, isNil));
    const safeProp = propName => obj => isNotNil(prop(propName, obj));

    Actually crocks lib provide 'prop' method to simply the code:

    const prop = require('crocks/Maybe/prop');
    const { inc } = require('./utils');
    
    const safePage = prop('page');
    
    const qs = { page: 4, pageSize: 10, totalPages: 203 };
    const result = safePage(qs).option(1);
    
    console.log(result);
  • 相关阅读:
    Luogu P1020 导弹拦截
    洛谷 p1196 带权并查集
    gradle 语法基础
    Codeforces Round #542 div.2 C
    我了解的字符编码
    洛谷p3374 树状数组1
    树状数组2
    线段树模板 求区间和, 区间加法,乘法更新
    洛谷 p1886 滑动窗口
    HDOJ.1251
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9026342.html
Copyright © 2011-2022 走看看