`
HYFY
  • 浏览: 11973 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

圈复杂度,underscore与函数式编程

阅读更多
圈复杂度,英文为CCN(Cyclomatic Complexity Number)。官方解释为:

“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度 大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。

简单来说,圈复杂度表现了一段代码的复杂程度(这里的复杂,指逻辑的复杂),即圈复杂度越大,代码中的逻辑判断数量越多,越复杂,从而可能导致代码质量越差。

计算圈复杂度的方法:
每出现while,for,if中的一个,圈复杂度就要加一,出现一个switch,有几个case,圈复杂度就要加几。

除此之外很难一眼看出这个for循环或while循环是做什么的,也就是说循环体的意义没有被表现出来。

如何较为安全快速的减少圈复杂度,并且直观的展现出一段代码的含义呢?这就是underscore的功能了。

目测underscore的功能很强大,目前学会的也只是冰山一角。

underscore中常用的一些功能,就是针对数组及对象的一些方法了。简单说几个:

首先要说的是如何将一个对象转换成underscore对象:


通过_()转换
var a=[1,2,3];
b=_(a);

这样,b就成了underscore对象,可以直接调用underscore提供的任何方法。

通过.value()还原
c=b.value();

这样,c又变成了原始的js对象。

遍历:_.each(params[0],params[1])

params[0]为要遍历的对象,params[1]为操作这个对象中没一个元素的方法,是个函数。例如:
_.each([1,2,3],function(num){alert(num);});

也可以直接写成
_.each([1,2,3],alert);
匿名函数体和函数名是等价的,这样会一次alert出1,2,3.

链式处理:_.chain()

var a=[{'name':'B'},{'name':'A'},{'name':'C'}];
var b=_.chain(a).sortBy(function(people){return people.name;}).map(function(people){return people.name + ' is a boy.';}).value();


结果b=["A is a boy.", "B is a boy.", "C is a boy."]

等等,这里就不一一列举例子了,有兴趣的同学可以看这里: http://www.css88.com/doc/underscore/

写道这里,各位同学有没有发现underscore的调用很诡异,为什么每个方法的参数中总是有一个匿名函数体,不像我们曾经使用过的js方法如push()等方法的参数直接就是一个变量呢?


另一种编程思想:函数式编程

最开始我理解函数式编程是:程序中全是一个个的函数,没有单独的语句。后来发现这是一个美丽的误会。后来通过看一些资料明白了一些基本的:
所谓函数式编程,参数和返回值都是函数(这里的函数是函数体的地址),也就是不同函数之间飞来飞去的也都是函数。

用js写个简单的例子:


var a = function(num){
num=num+1;
return function(second_num){
  return num - second_num;
}}
var b = a(1)(3)

这样b=-1.
0
0
分享到:
评论

相关推荐

    underscore-example:Underscore.js 演示

    为了更好地掌握Underscore.js,你需要理解其背后的函数式编程思想,以及如何在实际项目中灵活运用。可以通过阅读源码、完成示例练习、解决实际问题等方式来提升技能。同时,Underscore.js与jQuery的配合使用也是常见...

    eb-api-1.0.30.zip

    underscore.js是一个轻量级的JavaScript实用库,它提供了一套丰富的函数式编程工具,旨在简化对数组、对象和函数的操作。在JavaScript领域,underscore.js被广泛用于数据处理和逻辑控制,它的功能包括但不限于:数组...

    Underscore.js常用方法总结

    Underscore.js是一款功能强大的JavaScript实用工具库,它提供了丰富的函数式编程方法,使得JavaScript编程变得更加便捷和高效。该库体积小巧,压缩后仅4KB大小,支持多种方法,涵盖了集合操作、数组操作、函数操作、...

    JavaScript_Application_Architecture_with_Backbone.js

    - **功能性与面向对象编程辅助工具**:提供一系列实用函数,如Underscore.js等。 - **模块化与依赖管理**:支持代码组织与管理,如RequireJS等。 - **路由与历史管理**:处理页面间的导航逻辑,如History API等。 - ...

    kEyk-supplies

    11. **数据处理**:可能包含Lodash或Underscore这样的工具集,用于数据操作和函数式编程。 12. **错误跟踪**:如Sentry,用于捕获和报告生产环境中的错误。 13. **部署流程**:如使用GitHub Actions或CircleCI进行...

    JerrysMovies:杰瑞需要观看的电影的统计数据

    在IT行业中,JavaScript是一种常用的编程语言,特别是在网页开发和客户端脚本方面。在这个名为"JerrysMovies"的项目中,我们看到它被用来处理和分析杰瑞需要观看的电影的相关统计数据。以下是对这个项目的一些关键...

    hologosreader

    JavaScript是Web开发中广泛使用的语言,尤其在前端领域,用于实现交互式用户界面和动态网页内容。由于hologosreader可能是基于浏览器的应用,因此它很可能使用了JavaScript的DOM操作、事件处理、异步编程等特性。 ...

Global site tag (gtag.js) - Google Analytics