对程序员来说最重要的小事——整洁代码

news2024/9/25 19:18:16

文章目录

  • 为什么要写整洁代码
  • 命名
    • 名副其实
    • 做有意义的区分
    • 类名、方法名
  • 函数
    • 短小
    • 只做一件事
  • 注释
    • 注释类型
    • 好注释
    • 坏注释
  • 格式
    • 目的
    • 垂直格式
    • 横向格式
    • 团队规则
  • 总结

为什么要写整洁代码

现在阅读这篇博客的你不论是刚入行的新人还是开发了很多年的老鸟一定碰到过"祖传代码"(也有人称之为屎山,话糙理不糙),并为之头疼。对代码的每次修改都影响其他两三处的代码,每次添加或修改代码,都得对那一堆乱麻了然于心,否则随着这团乱麻越来越大,再也无法清理,最后束手无策。宁愿自己重新写这个功能,也不愿碰它。被祖传代码拖了后腿,开发者又背负 deadline压力,只好继续堆叠混乱。而事实上,制造混乱无助于赶上期限。随着混乱的増加,团队生产力持续下降,以至趋向于零。保持、提高效率的唯一办法,就是始终尽可能的保持代码整洁。

命名

名副其实

  1. 选个好名字需要花时间,但省下来的时间比花掉的多
  2. 如果名称需要注释来补充,那就不算是名副其实

做有意义的区分

  1. 如果名称相异,意义也应该不同
    例:add和insert
    两个均为添加的意思,我们在使用的时候就需要尽量保持使用一致,不能这出使用add下个方法就用insert来表示添加。
  2. 废话都是冗余
    例:Variable一词永远不应该出现在变量名中,Table一词永远不应该出现在表名中

类名、方法名

  1. 类名和对象名应该是名词或名词短语
    例:Customer、WikiPage
  2. 方法名应当是动词或动词短语
    例:postRequest、deletePage

函数

短小

  1. 函数的第一规则是要短小,第二规则是还要更短小
  2. 每行不超过150个字符,函数总长度20行封顶最佳
  3. 应该到达的程度:每个函数都一目了然,每个函数都只说一件事,每个函数都依次把你带到下一个函数。

只做一件事

函数应该做一件事,做好这件事,只做一件事

注释

注释类型

  1. 行注释
    如下图,每行代码都用注释描述清楚做了什么
    image.png
  2. 块注释
    如下图,一个方法上面或某个逻辑操作上添加注释描述
    image.png

好注释

  1. 法律信息
  2. 提供信息的注释
  3. 对意图的解释
  4. 阐释
  5. 解释
  6. TODO注释

坏注释

  1. 喃喃自语、多余的注释、废话注释
  2. 误导性注释
  3. 日志式注释
  4. 注释掉的代码

格式

目的

代码格式关乎沟通,今天编写的功能很有可能在下一版本中被修改,但代码风格和可读性会影响到可维护性和可扩展性。

垂直格式

  1. 在导入声明、每个函数之间都用空白行隔开
  2. 变量声明,变量声明应尽可能靠近其使用位置
  3. 实体声明,实体应该在类的顶部声明
  4. 相关函数,某个函数调用了另外一个,就应该把他们放到一起,而且调用者尽可能放在被调用者上面。

横向格式

使用空格把关系紧密的事物联系到一起,把相关性较弱的分隔开(格式化代码,idea快捷键:ctrl+alt+L)

团队规则

每个程序员都有自己喜欢的格式规则,但如果在一个团队中工作,就是团队说了算。一组开发者应当认同一种格式风格,每个程序员都应该采用那种风格。

总结

image.png
今天的分享内容大部分都来自与《代码整洁之道》这本书,如果想了解更多的整洁代码的方法和技巧,可以深入研究一下这本书,你将会受益匪浅。

以上就是今天分享的内容了,如果觉得有收获可以关注点赞一波。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【原创】java+swing+mysql户籍管理系统设计与实现

户籍管理系统感觉跟学生管理系统有些类似,一个是对学生进行信息的管理,一个是对社会人员进行信息管理,难度系数基本一样,今天我们就来介绍一下使用javaswing和mysql进行户籍管理系统的开发。 功能分析: 户籍管理&…

【java 8】方法引用与构造器引用

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

INT3断点和硬件断点

Ollydbg动态调试的时候需要打一些断点,断点分为INT3断点和硬件断点,本文是区分两个断点的文章。 目录 INT3断点 好处 坏处 硬件断点 原理 优点 缺点 INT3断点 OD中使用F2快捷键设置的断点就是INT3断点 打INT3断点的时候,断点处就会被…

Unity学习笔记--在Editor下实现一个有下拉菜单的文件路径记忆功能(保姆级教程)

目录前言需求分析知识前提一、下拉菜单的实现二、选取对应文件夹路径三、写入到.txt文件完整代码前言 最近需要在Unity编辑器下实现一个面板,有一个下拉菜单,其他人可以往这个下拉菜单里面添加一些文件夹路径,保证下次进来的时候能够直接通过…

Linux SPI-NAND 驱动开发指南

文章目录Linux SPI-NAND 驱动开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员3 流程设计3.1 体系结构3.2 源码结构3.3 关键数据定义3.3.1 flash 设备信息数据结构3.3.2 flash chip 数据结构3.3.3 aw_spinand_chip_request3.3.4 ubi_ec_hdr3.3.5 ubi_vid_hdr3.4 关键接口说…

webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题

webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题 文章目录webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题记录个iusse. 插入音频数据后,GetAudioInternal 进行操作决策: Normal:正常播放。 Acceleration:变声不变调的减速播放算法。 Pr…

【学习笔记】互联网金融:芝麻信用分的建模过程

学习资料: 数据分析学习随记 | 互联网金融行业2C授信模型(芝麻信用) 1. 背景 互联网金融的本质是风控。 1.1 数据分析师的角色 数据分析师在金融行业基本上有两种角色: 1.1.1 数据建模师 偏算法,但要很懂业务。要求对算法的理解较深&am…

电子标签播种墙方案

一、PTL优势: 二、系统构架: v1.2基站软件管理系统仓库标签v1.4仓库标签三、基站特点: 接收PC下达的操作指令,解析后再通过RF发送给电子标签 无线通讯距离30m无线通信速率200/50kbps网络通信速率10/100 Mbps自定义双向数据通讯协…

接口测试很难?3分钟带你入门接口自动化测试

1、什么是接口? 接口是连接前台和后台的桥梁,前台通过接口调用后端已完成的功能,而无需关注内部的实现细节。借助于接口,可以实现前后台分离,各自完成开发工作后,进行联调,提高工作效率。 2、接…

开学季电容笔怎么选?学生党高性价比电容笔推荐

或许许多人会认为苹果Pencil是无可取代的,但是我认为这压感取决于我们的预算和需求。要是我们对于绘画没有过高的要求的话,其实可以选择使用平替电容笔,而没必要入手apple pencil。为了让你对电容笔有更多的认识,我接下来推荐几款…

Flutter第三方插件objectbox的使用

Flutter基础 demo地址 参考地址 文章目录Flutter基础前言一、demo效果图二、objectbox是什么?三、objectbox的使用1.在pubspec.yaml文件中添加2.执行flutter pub get命令3.创建数据库模型4.执行flutter pub run build_runner build 命令5.如果报错则执行flutter pu…

Renderdoc中一个daraw的API调用以及其作用

分析renderdoc中一个draw调用的api接口,如下是一个draw调用的渲染api的过程,下面来分析一下这几个函数的作用。 PSSetShaderResources、VSSetShader、PSSetShader这三个方法在renderdoc调用过程使用的方法,这三个方法的做法分别如下&#xff…

【华为OD机试模拟题】用 C++ 实现 - 日志采集系统(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

NMS详解

(类别,坐标1,坐标2,坐标3,坐标4,类别分数) step1:对最后一列分数进行排序 ,可以看到类别就被打乱了 step2: 弹出得到selected_bboxes作为基准,减少bbox_list。其实就是准…

寻路库recastnavigation改造

本文是介绍对寻路库recastnavigation 改造,使得使用更加友好。 Git仓库: https://github.com/jiangguilong2000/recastnavigation 首先,我们要做一些前置操作 SDL: 开放源代码的跨平台多媒体开发库 Premake:量跨平台构建系统 环境: VS 2019…

国内知名插画培训机构有哪些,学习插画怎么选培训班

国内知名插画培训机构有哪些?给大家梳理了国内5家专业的插画师培训班,最新无大插画班排行榜,各有优势和特色! 一:国内知名插画培训机构排名 1、轻微课(五颗星) 主打课程有日系插画、游戏原画…

Linux 计划任务讲解

目录 计划任务 一次性计划任务 长期性计划任务 计划任务 管理员可以编辑自己的和普通用户的计划任务 普通用户只可以编辑自己的计划任务 计划任务根据执行方式分为一次性计划任务、长期性计划任务 一次性计划任务 此计划只执行一次,执行后或就不会再执行了 通…

项目管理之三点估算(正态分布)

三点估算法主要来自于项目的计划评审技术 PERT,能评估时间与概率的关系。 三点估算法不仅可以用于定量风险分析,也可用于进度管理中活动历时估算。先记住几个概念:最乐观时间TO:完成该工作最少需要的时间;最悲观时间TP…

R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)

此文为《精通机器学习:基于R》的学习笔记,书中第九章详细介绍了无监督学习-主成分分析(PCA)的分析过程和结果解读。 PCA可以对相关变量进行归类,从而降低数据维度,提高对数据的理解。分析的主要目的一般是:1)识别数据…

CVPR2022 | ABINet+: 似人阅读: 场景文本识别的自主、双向和迭代语言建模

论文标题:ABINet:Read Like Humans: Autonomous, Bidirectional and Iterative Language Modeling for Scene Text Recognition代码:https://github.com/FangShancheng/ABINet链接:https://arxiv.org/abs/2103.06495一、AbstractH…