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);
  • 相关阅读:
    MyBatis入门案例、增删改查
    Hibernate第三次测试错题解析
    HIbernate二级缓存
    Hibernate组件映射
    java 序列化
    圈复杂度(Cyclomatic Complexity)
    ASE加、解密
    异常Exception
    动态代理(jdk--cglib)
    java.lang.Class类
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9026342.html
Copyright © 2011-2022 走看看