作家
登录

如何写出小而清晰的函数?(JS 版)

作者: 来源: 2017-08-11 14:47:32 阅读 我要评论

  •  
  • function getCollectionWeight(collection) {   
  •  
  •   let collectionValues; 
  •  
  •   if (collection instanceof Array) { 
  •  
  •     collectionValues = collection; 
  •  
  •   } else if (collection instanceof Map) { 
  •  
  •     collectionValues = [...collection.values()]; 
  •  
  •   } else { 
  •  
  •     collectionValues = Object.keys(collection).map(function (key) { 
  •  
  •       return collection[key]; 
  •  
  •     }); 
  •  
  •   } 
  •  
  •   return collectionValues.reduce(function(sum, item) { 
  •  
  •     return sum + getWeightByType(item); 
  •  
  •   }, 0); 
  •  
  •  
  • let myArray = [null, { }, 15];   
  •  
  • let myMap = new Map([ ['functionKey'function() {}] ]);   
  •  
  • let myObject = { 'stringKey''Hello world' };   
  •  
  • getCollectionWeight(myArray);  // => 7 (1 + 4 + 2)   
  •  
  • getCollectionWeight(myMap);    // => 4   
  •  
  • getCollectionWeight(myObject); // => 2  
  • 看起来很多多少了,对吧? getWeightByType() 函数是一个自力的组件,仅仅用于决定各类型的权重值。并且它是可复竽暌姑的,你可以在其他任何函数中应用它。

    getCollectionWeight() 稍微瘦了点身。

    WEIGHT_NULL_UNDEFINED, WEIGHT_PRIMITIVE 还有 WEIGHT_OBJECT_FUNCTION 都是具备自文档才能的常量,经由过程它们的名字就可以看出各类型的权重。你就不须要猜测 1、2、4 这些数字的意义。

    Step 2: 持续切分,使之具备扩大性

    如不雅函数都短小清楚,定名简洁:代码读起来就会像诗一样迷人。

    函数名称应当异常简洁:长短适中。幻想情况下,名称应当清跋扈的概括函数的功用,而不须要读者深刻懂得函数的实现细节。

    然而,这个进级版依然有不足的处所。假如你计算对一个 Set,甚至其他用户自定义集合来实现权值计算。getCollectionWeight() 会快速膨胀,因为它包含了一组获得权值的具体逻辑。

    让我们将获得 maps 权重的代码提取到 getMapValues(),将获得根本 JavaScript 对象权值的代码则放到 getPlainObjectValues() 中。看看改进后的版本吧。

    1. function getWeightByType(value) {   
    2.  
    3.   const WEIGHT_NULL_UNDEFINED = 1; 
    4.  
    5.   const WEIGHT_PRIMITIVE = 2; 
    6.  

        推荐阅读

        安全36计 你需要了解的那些安全术语

      【51CTO.com快译】 软件开辟中的安然主题是多种多样的,安然术语对不合的团队具有不合的含义。为赞助澄清问题和避免安然问题的混淆,小编列出了A-Z最重要的安然相干词条供你参考。 A>>>详细阅读


      本文标题:如何写出小而清晰的函数?(JS 版)

      地址:http://www.17bianji.com/lsqh/36650.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)