• [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);
  • 相关阅读:
    C#如何为程序打包发布应用(图解教程) (转)
    异步委托与多线程
    如何判断自己的WP7 SDK版本
    (转)c#实现WinRAR解压缩
    网页HTML代码大全
    byte[] ,image, bitmap之间的转换
    MS开发者应懂得知识
    StringFarmat控制字符串居中显示
    WP7模拟器的感应器和GPS模拟定位功能
    lucene.net搜索文档(pdf,doc,txt)内容
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9026342.html
Copyright © 2020-2023  润新知