热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多点使用短函数

还记得刚学编程那时关于“为什么要用函数”的问题吗?那就是把重复的代码归纳到一个函数中多次利用。这点毋庸置疑,大家也用的很熟了,但是除了这个还有什么改进空间吗?答案肯定是有的。大家都知道当一个函数很长的时候,就会造成阅读困难,那以前我们都是怎么解决的呢?

还记得刚学编程那时关于“为什么要用函数”的问题吗?那就是把重复的代码归纳到一个函数中多次利用。这点毋庸置疑,大家也用的很熟了,但是除了这个还有什么改进空间吗?答案肯定是有的。

长函数有什么问题

大家都知道当一个函数很长的时候,就会造成阅读困难,那以前我们都是怎么解决的呢?

  1. 写注释:这个大家都知道怎么用,也是一种有效的方法。
  2. 用 #region 代码块:这个也是一个行之有效的方法。

还有什么别的方法吗?其实还有一个方法就是:使用短函数。在讨论短函数有点之前,我想先用一点篇幅来讲述一下什么时候改写注释。

什么时候该写注释

函数主要就有两个用途:

  1. 在 Class 和 别的函数、字段、属性前打三个 / ,就会自动生成供 VS 使用的智能提示内容。
  2. 解释代码意图。

第一点大家都会用,而且就这么用,没有什么替代的办法。但是关于第二点,注释未必是最好的解决办法。

因为如果一段代码让人看不懂,要么就是“英文看不懂”,要么就是“逻辑复杂”。注释是为了弥补它们带来的缺点,但是为什么不从根本解决呢?

“英文看不懂”:每个程序员都应该有一定的英文基础吧?另外注意命名规范,就可以解决了。

“逻辑复杂”:如果一段程序逻辑复杂,让人看不懂,你觉得你应该费力地去给别人解释呢?还是自己好好整理整理,把代码梳理一下呢?

那怎么梳理你的代码呢?短函数?

短函数的优点——有助于梳理代码

我想废话不多说了,都是程序员,大家一看代码就明白了。代码才是最好的注释,其实写的就是短函数的优点。

顺便提一下 region ,其实 region 在 VS 下的收缩功能可以达到差不多的效果,你可以选用这个,但是不是很推荐。下面,我还要和大家探讨一下另一个优点。

短函数的优点——可优化性能

关于这点,我是在《More Effective C#》中看到的,觉得非常好,所以推荐给大家。

把一个大函数拆分成很多小函数可以优化性能?这点看上去很可笑。是的,其实这点性能的提升微不足道,但是如果可以,为什么不做呢?更何况这样做还有上面说的另一个优点。

为什么长函数分割成短函数的时候可以优化 .Net 下的性能呢?

你首先要明白:.Net 下的语言编译的时候只是编译成了中间语言。运行的时候,它会再一次编译成机器码。这个中间语言编译成机器码是以一个函数为基本代为的。也就是说,每次调用函数的时候,这个函数才会被编译。

那长函数分割成了短函数有优势吗?代码量不还是一样的?纯粹的分割反而会产生更多的代码呢!

的确如此,所以说,这里还有另一个条件:当这个长函数中有很多分支的时候。

public void Func1()
{
    if(xxxx)
    {
        //代码段1,几百行
    }
    else
    {
        //代码段2,几百行
    }
}

上面这段代码,有两大段代码,每次调用这个函数其实只会执行一部分。所以,如果把这两块代码段提取出来,编译的过程中就会少编译一半的代码。

现在明白在什么时候把长函数分割成短函数能优化性能了吧。

虽然这点性能提升并不明显,但是,如果你一个函数中,有一个很大的分支。你在看代码的过程中,一定会看花眼,滚屏的过程中,都不知道自己现在身处在哪个部分。随意就算不考虑性能,也推荐把这样的代码分割成短函数。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1762,欢迎访问原出处。


推荐阅读
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
author-avatar
mobiledu2502858723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有