`
glutinit
  • 浏览: 47311 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

代码大全读后杂记-02 为啥创建子程序(方法,函数)

 
阅读更多
人类是世界上最勤快的物种,人类也是世界上最懒的物种;当然,人类大多数的勤快的创造是为了让自己有机会懒。

为了耕种的方便,少留两滴汗多长两斤肉,发明了先进的机器;为了通讯的方便,少跑两里路,少死两只鸽子,发明了电报电话手机;为了节省程序员的脑细胞,发明了子程序!

PS:代码大全中的子程序(routine)就是C++中的函数(function),Java中的方法(method)~

Steve(此S非彼S,代码大全的作者哦)认为:抛开计算机本身,子程序也算得上是计算机科学中一项最伟大的发明了。



我们首先来看看创建子程序的正当理由吧~

降低复杂度
   可以将一些你容易忘记的细节隐藏起来,这样,一旦你写好某个子程序,在其他地方就只需要了解其功能而加以调用即可,毕竟,我们的脑袋存储空间有限;

引入中间、易懂的抽象
   很重要的一点,子程序的名字要起得好,否则这点的功能就要大打折扣了。将一些难懂晦涩的代码放置在子程序中,一方面便于阅读了解,另一方面也更加容易维护和修改;
   比如下面两块代码:
    if(a>b)
      return a;
   else return b;

   和 int maxNum=getMaxNum(a,b)
  比起来,显然第二个更加清楚,通常情况下子程序里的代码会更加复杂,你懂的
  
避免代码重复
   这也是我们上学时,老师在介绍C函数的时候常提到的子程序的功用,对于功能一致或类似的代码,最好是将它们提取到一个子程序里面。当然,对于具体的实现方法,你可以将这些重复的方法中相同的部分放到基类里面,而不同的放到子类里面;也可以让相同的代码放到一个新的子程序里面,在让其余的代码来调用之...

支持子类化
当你的子程序简单明了的时候,覆盖该方法的子类也会更加容易而不至于犯错~


隐藏顺序
将一些顺序执行的代码放置在子程序里面,因为这种顺序在大多数情况下没必要向外界公开

隐藏指针操作
指针操作通常容易让人犯难,所以,将它们放到子程序里面吧。另外,如果你想出不用指针的方法,那么直接修改该子程序即可,幸好java没有指针的困扰了...

提高可移植性
将不可移植的部分和可移植的部分分开,会在将来真的需要移植时让你倍感轻松...

简化复杂的布尔判断
和第二条有点类似,就是某写复杂难懂的布尔判断最好也放置在命名清晰的子程序中

改善性能
为了便于优化代码,请将你觉得写得一团糟的代码放到一起,这样以便以后重构方便,这也是经验活啊

确保所有的子程序都很小
当然,这点并不一定,关于子程序的长度把握,这也是一个经验活...好吧,这点当白说~





分享到:
评论

相关推荐

    工作杂记-YUV的dump和read

    工作杂记-YUV的dump和read

    Vue开发资源:vue相关的开发杂记-前端开发

    本资源包中的"Vue-dev-note-master1"可能包含了关于Vue开发的笔记、教程、示例代码等资料,对于想要深入理解和学习Vue.js的开发者来说,是一份宝贵的资源。 1. **Vue核心概念**: - **虚拟DOM**:Vue通过虚拟DOM...

    fortran90读书杂记

    - 内部过程(Internal Procedures)和模块过程(Module Procedures)简化接口,方便将外部子程序转换为模块过程。 - 使用`=>`指定过程,如`FUNCTION f(x) RESULT(y) => y`。 10. 作用域: - 声明的名称在其声明...

    计算机杂记

    - **turbo 环境下的外部函数使用方法**:描述了如何在 turbo 环境下使用外部函数的过程,包括创建项目文件、编译、连接等步骤。 - **include**:用于在 C/C++ 语言中引入其他文件的关键字。 - **sample 和 demo**:...

    网络问题:收集平时遇到的问题

    作者:hazer,时间:2019-6-28杂记-47-杂记-46-杂记-45-杂记-44-杂记-35- 内置简介:github readme自动生成工具作者:hazer,时间:2019-6-27杂记-33-杂记-32-杂记-31-杂记-30-杂记-29- 杂记-28- 杂记-27-杂记-26-...

    mynane#web-problem#杂记-18.获取运行环境1

    // 获取userAgent// 是否是ie// 是否是IE9// 是否是edge浏览器// 是否是android浏览器// 是否是ios// 是否是谷歌浏览器

    mynane#web-problem#杂记-45.Golang 在 Mac、Linux、Windows 下如何交叉编译1

    Mac 下编译 Linux 和 Windows 64位可执行程序Linux 下编译 Mac 和 Windows 64位可执行程序Windows 下编译 Mac

    oracle 9i杂记

    Oracle 9i的PL/SQL支持块结构,可以创建嵌套的PL/SQL块,这使得代码组织更加清晰。同时,PL/SQL提供了丰富的内置函数,如数学函数、字符串函数、日期时间函数等,极大地方便了开发者。 在实际应用中,PL/SQL的优势...

    全网最热Python3入门+进阶 更快上手实际开发

    - 高阶函数:接受一个或多个函数作为参数,并/或返回一个函数的函数。 2. **装饰器**: - 一种特殊类型的函数,可以修改其他函数的行为。 #### 六、实战项目 1. **Pythonic与Python杂记**: - Pythonic:遵循...

    CPP杂记——移动构造函数中需要注意的问题

    - **资源转移**:在移动构造函数中,完成资源转移后,需要确保原始对象不再持有资源,通常通过将其指针设为`nullptr`来实现,如示例中的`obj.m_pData = nullptr;`。 - **避免二次拷贝**:在声明移动构造函数时,...

    C#多线程C#线程及访问杂记

    可以使用构造函数传入一个委托作为线程的入口点,或者通过Start方法传递一个委托。 - **ThreadPool**:线程池是一种优化资源管理的方式,它可以重用已创建的线程,避免频繁创建和销毁线程的开销。使用ThreadPool....

    oracle杂记.doc

    oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。

    Python3入门到进阶课程

    - 数据类型的转换方法 ### 第4章 Python中表示“组”的概念与定义 - **课程目标**:讲解如何使用序列类型来组织数据。 - **核心知识点**: - 序列类型:列表、元组、字典 - 列表的操作:增删改查 - 字典的操作...

    51单片机C语言学习杂记

    创建项目后,你可以开始编写程序。如果尚未有现成的程序,可以点击新建文件按钮,或者通过File->New或Ctrl+N快捷键创建新的C程序文件。编写程序时,可以从简单的示例开始,比如经典的初始化串口和定时器的代码: ``...

    单片机C语言学习杂记

    ### 单片机C语言学习杂记 #### 一、单片机与C语言简介 在电子技术领域,单片机是一种集成了微处理器、存储器以及多种输入输出接口的微型计算机系统。51单片机是基于MCS-51架构的一种广泛使用的单片机型。由于其...

    编程学习杂记-序

    序: 编程10年了,感觉有些空虚。不敢称大牛,只能说是一个老鸟。有时候查资料也感觉比较麻烦。想想如果自己能写一些东西,然后查找起来应该会很快,这样对自己也是一个帮助,也希望能帮助到其他人。...

    【uni-app】只支持在微信小程序运行的 导入外部3d模型

    一种常见的方法是使用微信小程序提供的API,如`wx.createSelectorQuery()`和`wx.createCameraContext()`等,配合特定的3D模型转换工具,将3D模型转化为小程序能够识别的格式,如glTF或者FBX。这些转换后的模型文件...

    VC 和程序杂记

    包括 VC技术内幕第五版.chm VC知识库五.chm VC知识库六.chm VC知识库七.chm希望大家从中受益,相互交流,学问最重要的是交流,而不是相互抵斥团结起来我们的程序员兄弟们 世俗烦恼处,要耐的下 世事纷扰处,要闲的下...

    Android平台搭建杂记

    然后,你可以在Java代码中通过System.loadLibrary加载.so库,实现本地方法调用。 总结,搭建Android开发环境需要安装Eclipse、JDK、SDK和NDK,配置相应的环境变量,安装ADT插件,并在Eclipse中创建Android项目。...

Global site tag (gtag.js) - Google Analytics