函数的学习与感悟

 

  1. 函数要短。但不是为了短而短,而是为了表达意思,让读者看了这个函数而能迅速的把握函数要带来的信息。盲目的为了短而,并不是初衷,也不是目的。
  2. 函数只做一件事。依照单一职责原则(一个类只会因为一个原因改变)设计函数。一个函数要么进行流程控制(即方法里面先调用A方法,再调用B方法,再调用C方法,依次调用,这种方法只起到拼接传递,串接流程的作用)或逻辑判断(什么是逻辑判断,比如买火车票,根据身份证号判断,此人是否有买过当天同车次的车票),要么改变某事物的状态(比如:买火车票,检查用户退票次数,一天是超过三次,如果是就把当前用户给锁上,今天就不能再进行买票了,更改用户的锁定状态),要么计算并返回结果,要么调用多个下一抽象级的其他函数(另一种流程控制而已)。不要有多余功能。
  3. 最好把函数分解成多个抽象层级来设计,同一层级的函数,依照倒树状图来设计函数。
  4. 函数不应该有作为标识的参数,这意味着函数会有多种不同的执行方式被改变。
  5. 函数参数最多有两个,或者是具体的操作值,或者是封装之后的参数对象。
  6. 自身行为状态的改变,不应该让外界去改变,应该由对象本身对外提供改变的能力,例如:判断用户是否可以构买火车票,应该由用户本身提供是否可以买火车票的函数,而不应该调用一个函数在对象外操作,来改对象内部的操作。把改变类x的状态的函数调用addFooter(x),改为x.addFooter()。
  7. 函数不要返回错误码,这需要你有错误码的枚举类,并且违反了开放封闭原则(你需要加入新错误码来扩展新错误),直接抛出异常就好了。(可以通过继承父异常来扩展)
  8. 函数名称描述清楚,不要有歧义,不要容易混淆,注释写场景,能不用文档说明就不用。
时间: 2024-11-08 19:25:39

函数的学习与感悟的相关文章

Matlab中常见的神经网络训练函数和学习函数

一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a network training function that updates weight and bias values  according to gradient descent. 2.traingda Name:Gradient descent  with adaptive learning rate

初探C++函数模版学习笔记

泛型程序设计 特点:算法实现时不指定具体要操作的数据的类型.算法实现一遍但可适用于多种数据结构. 优势:减少重复代码的编写. 实现:大量编写模板, 使用模板的程序设计. 函数模版 为了交换两个int变量的值, 需要编写如下Swap函数: void Swap(int & x, int & y) { int tmp = x; x = y; y = tmp; } 为了交换两个double型变量的值, 还需要编写如下Swap函数: void Swap(double & x, double

SQL Server -- 自定义函数(学习总结,备忘)

SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@[email protected])Y Learn from:http://www.cnblogs.com/lideng/archive/2013/04/15/3022418.html 自定义函数分为:标量值函数或表值函数两种. 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 表值函数:如果 RETURNS 子句指定 TABLE,则函

Hive自定义函数的学习笔记(1)

前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到, 因此hive提供了自定义函数的接口, 方便用户扩展. 自己好像很久没接触hadoop了, 也很久没博客了, 今天趁这个短期的项目, 对hive中涉及的自定义函数做个笔记. 准备: 编写hive自定义函数前, 需要了解下当前线上hive的版本. hive --vesion 比如作者使用到的hive

JavaScript字符串常用操作函数之学习笔记

字符串简介 使用英文单引号或双引号括起来,如:’Hello’,”World”,但是不能首尾的单引号和双引号必须一致,交错使用,如果要打印单引号或者双引号,可以使用转义字符\’(单引号),\”(双引号)  代码如下 复制代码 var str_1 = 'Hello World!';  //Hello World!var str_2 = "Hello World!";  //Hello World!var str_3 = '他说:"这样可以的."';  //他说:&quo

函数库学习入门指引

函数库学习入门指引 转自:http://www.cnblogs.com/bangerlee/archive/2011/08/31/2161347.html 2011-08-31 21:58 by bangerlee, 2875 阅读, 0 评论, 收藏, 编辑 在学习某一函数库的时候,我们经常做的第一件事, 就是把该函数库的源码下载回来进行编译和安装(一般是这三步:./configure -> make -> make install),然后写一些调用库函数的小用例,看其能否正常运行以及运行后

函数的学习以及用法

  浅谈函数应用 函数存在的意义:  把main函数中复杂的逻辑进行拆分,由一个一个单独的函数来处理一个单独的模块,main函数只是起到宏观调控作用 我们可以自己编写一些函数,实现某些功能,把函数的声明放在.h文件里,把函数的定义即实现放在.m文件里,然后在main.m文件里的main函数里调用实现,但是调用之前一定不要忘记把自己写的文件导入即导入头文件,导入自己编写的头文件用#import "",导入系统头文件用#import <> 此外,一个函数最多不要超过60行代码,

R语言——绘图函数深入学习

利用R自带数据集 通过data()函数可以查看R自带数据集. > data() 返回以下结果,每一条记录都是一个数据,键入相应的数据名称可以查看具体信息. Data sets in package ¡®datasets¡¯: AirPassengers Monthly Airline Passenger Numbers 1949-1960 BJsales Sales Data with Leading Indicator BJsales.lead (BJsales) Sales Data wit

QT QObject::connect函数的学习

从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: [cpp] view plaincopy static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType = #ifdef qdoc Qt::AutoConnection #else #ifdef QT3_S