首页 > 其他分享 >代码整洁之道笔记2

代码整洁之道笔记2

时间:2023-11-15 19:57:29浏览次数:36  
标签:层级 函数 代码 笔记 之道 参数 错误码 使用 整洁

三.函数
短小,只做一件事

每个函数一个抽象层级

1.要确保函数只做一件事,函数中的语句都要在同一抽象层级上

2.自顶向下读代码:向下规则,让代码拥有自顶向下的阅读顺序,让每个函数后面都跟着下一抽象层级的函数,这样一来,在看函数列表时,就能循抽象层级向下阅读了,我把这叫做向下规则

switch语句

1.尽量隐藏switch,不要暴露

使用描述性的名称

1.沃德原则:“如果每个例程都让你感到深合已意,那就是整洁代码”

2.函数越短小,功能越集中,就越便于取个好名字

3.别害怕长名称,长而具有描述性的名称,要比短而令人费解的名称好

4.命名方式要保持一致。使用与模块名一脉相承的短语、名词和动词给函数命名

函数参数

1.最理想的参数数量是零,有足够的理由才能用三个以上参数

2.事件:在这种形式中,有输入参数而无输出参数,程序将函数看作一个事件,使用该参数修改系统状态

3.对于转换,使用输出参数而非返回值令人迷惑,如果函数要对输入参数进行转换操作,转换结果就该体现为返回值

4.向函数传入布尔值会使方法签名立刻变得复杂起来,大声宣布函数不止做一件事

5.如果函数看来需要两个、三个或三个以上参数,就说明其中一些参数应该封装为类了

6.有可变参数的函数可能是一元、二元甚至三元,超过这个数量就可能要犯错了

7.对于一元函数,函数和参数应当形成一种非常良好的动词/名词对形式

无副作用

1.函数承诺只做一件事,但还是会做其他被藏起来的事,会导致古怪的时序性耦合及顺序依赖

2.参数多数会被自然而然地看作是函数的输入

分隔指令与询问

1.函数要么做什么事,要么回答什么事,但二者不可得兼

使用异步替代返回错误码

1.从指令式函数返回错误码轻微违反了指令与询问分隔的规则。它鼓励了在if语句判断中把指令当作表达式使用

2.try/catch代码块把错误处理与正常流程混为一谈,最好把try和catch代码块的主体部分抽离出来,另外形成函数

3.错误处理就是一件事,处理错误的函数不该做其他事

4.依赖磁铁(dependency magnet):其他许多类都得导入和使用它,如一些错误码枚举类

别重复自己

结构化编程

1.函数中的每个代码块都应该只有一个入口和一个出口

2.尽量少使用break,continue,不能用goto

如何写出这样的函数

1.打磨代码,分解函数、修改名称、消除重复

2.缩短和重新安置方法、拆散类、保持测试通过

标签:层级,函数,代码,笔记,之道,参数,错误码,使用,整洁
From: https://www.cnblogs.com/liucaizhi/p/17834643.html

相关文章

  • 【论文阅读笔记】【Image Retrieval】 Global Features are All You Need for Image R
    SuperGlobalICCV2023读论文思考的问题论文试图解决什么问题?图片检索方法通常由粗粒度图片检索和精确的结果重排列两个模块组成。人们通常认为图片的localfeature在结果重排列中是不可或缺的,但对大量的localfeature的计算需要较高的计算资源和时间能否只用图片......
  • 【笔记】判环
    【笔记】判环整理一下主流且比较好写的两种方法:一、Tarjan(有无向图都推荐这种写法)有向图就用强连通分量,无向图的话同样魔改一下:每一条边不能反着再走一遍。有向图:#include<bits/stdc++.h>#defineF(i,l,r)for(inti=l;i<=r;++i)#defineG(i,r,l)for(inti=r;i>=l;--i)us......
  • 11.15每日总结(阅读笔记5)
    《人月神话》是一部我近期阅读的书籍,它给我留下了深刻的印象。这本书主要探讨了项目管理和人际关系之间的复杂性和挑战,让我有了许多新的思考和认识。首先,书中的每个章节都引人入胜,作者通过生动的案例和有趣的故事,让读者更好地理解了项目管理和人际关系的实质。特别是在处理项目延......
  • python初学者学习笔记-第十章-pandas
    Chapter10/pandas10.1dataframe简介dataframe是pandas中最基础的数据结构,当然它也是pandas中最常见的对象,它跟表格类似。dataframe的行和列是分别存储的数据集;这种存储方式,加快了列和行的操作效率。10.1.1创建dataframe一般情况下,可以通过列表和字典这些类型的数据源来创建......
  • openGauss学习笔记-124 openGauss 数据库管理-设置账本数据库-查看账本历史操作记录
    openGauss学习笔记-124openGauss数据库管理-设置账本数据库-查看账本历史操作记录124.1前提条件系统中需要有审计管理员或者具有审计管理员权限的角色。数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时段内有账本操作记录结果产生。124.2背景......
  • FPGA入门学习笔记001
    1、assignassign为连续赋值语句,通常用于组合逻辑电路,例如:assignled_out=(key_in==0)?a:b;2、timescale例如:`timescale1ns/1ps定义了一个仿真精度。'1ns'为仿真步进,例如设置100的延时'#100',则实际延时100*1ns。'1ps'为仿真精度,设定延时,可以精确到小数点后两位,例......
  • 【课程】算法设计与分析——第八周 题解笔记
    第八周算法题解笔记1极值点题目描述给定一个单峰函数f(x)和它的定义域,求它的极值点该单峰函数f(x)保证定义域内有且只有一个极值点,且为极大值点题解本题感觉和dp关系不大,主要思路是三分法,和二分法非常类似,但没有二分法常用,主要用途是用来求单峰函数的极值对于任意一个......
  • 【做题笔记】NOIP真题们
    [NOIP2022]种花题意不太好描述,感性理解(题意一道计数类问题。不难发现F形只需要在C形的基础上在末尾伸出一小支就好了。所以我们先考虑C形的计数方案。图形计数类一个基本的trick就是枚举拐点,因此我们考虑枚举下面这一行的拐点(也就是首个种花的位置)\((i,j)\)。令上面......
  • Python3 协程 await async 相关的用法和笔记
    想要提供可以进行协程切换的awaitable,可以使用下面的方法:1任务taskasyncdeffunc():print("yesWait")task=asyncio.create_task(func())awaittask2协程对象,可以使asyncdef定义的协程函数(是否能触发切换不一定,要看函数内容)函数内可以利用asyncio.sl......
  • 图论——最小生成树 学习笔记
    图论——最小生成树学习笔记本文仅对于无向连通图。生成树,SpanningTree(ST),在一个\(n\)个点的图中选取\(n-1\)条边,构成一棵树。最小生成树,MinimumSpanningTree(MST),通常是边权和最小的生成树。算法分类:算法PrimPrim堆优化Kruskal思想加点加点加边时间......