写好函数的规范小结

《代码整洁之道》第三章的阅读小结。

写好函数:

1,短小!20行左右就是上限。

2,只做一件事!这是最重要的一点。要判断函数是否只做了一件事的方法就是看能否再拆出来一个函数。

3,每个函数一个抽象层级。自顶向下读代码:向下原则。每个函数引出下一个函数。

4,switch语句应该埋在抽象工厂底下。而面对不同类型该做不同操作的功能用多态来实现。

5,使用描述性的名称。长而具有描述性的名称最佳。命名方式(风格)应该保持一致

6,函数参数:最佳是零参数,其次是单参数,再次是二,应避免三参数及以上。

7,单参数函数的形式。三种类型:一种是该函数会“问”该参数一些问题,如检查状态。另一种是对该参数进行操作。还有一种是事件类型,有输入参数而无输出参数。对于操作参数的单参数函数,最好使用返回值而不是输出参数。StringBuffer transform(StringBuffer in)是种好的实现

8,标识参数应该避免。如往函数传入布尔值!

9,动词与关键字。函数与参数应该形成动名词形式如writeField(name)和assertExpectedEqualsActual(expected,actual)

10,无副作用。即只做一件事,不应该隐藏着另外行为,如果不得不做,最后的办法就是在函数名中披露。

11,输出参数的大部分需求已经消失,应使用类方法或者返回值。

12,分隔指令与询问。如setXXX指令的返回值不该有可能是检测参数不合法的询问值。应该分成两个函数。

13,使用异常代替错误码。错误代码就能从主路径代码中抽离出来得到简化。

14,从代码主体中抽离try catch代码块,使得主体代码专心做事,另一个函数进行可能的错误处理。因为,错误处理就是一件事。

15,避免使用错误码枚举。考虑添加新的错误的情况。代替的办法是使用异常,因为异常可以派生子类。

16,避免重复代码!重复可能是软件中一切邪恶的根源!

17,如何写出以上的代码:从简陋的初稿开始打磨到最终完善。没有人可以从一开始就写出符合所有规则的函数!

时间: 2025-01-19 19:34:58

写好函数的规范小结的相关文章

面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

1 package com.rui.test; 2 3 import java.util.Random; 4 5 /** 6 * @author poseidon 7 * @version 1.0 8 * @date:2015年10月25日 上午11:12:24 9 * @description: 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果 10 * 陷阱: 11 * 1.循环需要倒着写,为什么? 12 * 想想顺着写循环的结果,第一个元素的值会发生变化门后面再除就会有问

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

写个函数用来对二维数组排序

29.写个函数用来对二维数组排序(新浪) Foreach有两种语法: 语法一:foreach($arr as $value){ Echo $value; } 语法一:foreach($arr as $key=>$value){ Echo $key . "=>" . $value; } 使用foreach遍历二维数组 与数组排序有关的函数: ?  sort():对数组元素的值升序排列,不保留索引关系 ?  rsort():对数组元素的值降序排列,不保留索引关系. ?  aso

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat

Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL

没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello package

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

python: 怎样写一个函数把名字大写并变成下面这样——字典与三引号

例题:python: 怎样写一个函数把名字大写并变成下面这样? 字典+列表:将每个字母以列表形式存在字典里,分六次打印输出: dic = { } dic['C']=[ ' CCCC ', ' C C', 'C ', 'C ', ' C C', ' CCCC ' ] dic['A']=[ ' A ', ' A A ', ' A A ', ' AAAAAAA ', ' A A ', 'A A' ] dic['T']=[ 'TTTTTTT', ' T ', ' T ', ' T ', ' T ', '

写一个函数对字符串数组排序,使所有变位词都相邻

题目 写一个函数对字符串数组排序,使得所有的变位词都相邻. 解答 首先,要弄清楚什么是变位词.变位词就是组成的字母相同,但顺序不一样的单词. 比如说:live和evil就是一对变位词.OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了.它要求我们在排序的过程中,按照变位词的准则来排序. 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数. 一般情况下我们如果要排序一个长度为n的数组A,我们可以这

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar