当前位置: 首页 > news >正文

如何编写整洁的代码

代码整洁之道

有意义的命名

  1. 见名知意

  2. 有意义的区分

  3. 避免使用编码(字母、数字前后缀区分等)

  4. 类名、对象名,使用名词或名词短语

  5. 方法名应是动词或动词短语

  6. 每个概念对应一个词,一以贯之,方便后续查找

    例如表示查找有get/find/obtain/search等,建议使用统一的概念

函数

  1. 简短,太长可提取为小函数
  2. 单一职责
  3. 使用具有描述性的名称
  4. 输入参数尽可能少
  5. 使用异常替代返回错误码
  6. 提取try/catch代码块为新函数,try/catch只囊括存异常代码
  7. DRY原则,别重复自己

注释

  1. 注释不能美化糟糕的代码
  2. 用好的代码命名自解释
  3. 警示地方须注释

格式

  1. 垂直格式
    1. 向报纸学习
    2. 不同概念代码块,空行隔开
    3. 紧密联系的代码,应靠近
    4. 垂直距离
      1. 局部变量:尽可能靠近其使用位置
      2. 实体变量:类的顶部声明
      3. 相关函数:同类中相互调用函数,调用者尽可能放在被调者上面
      4. 概念相关:相关代码应该放到一起
  2. 横向格式
    1. 避免单行过长
    2. 水平对齐
    3. 注意缩进层次

异常处理

  1. 使用异常而非返回码

  2. 使用未检异常

    ​ 可检异常的代价,就是违反开闭原则,如果你在方法中抛出可检异常,而catch语句在3个层级之上,则你就得在catch语句和抛异常之间的,,每个方法签名中声明改异常。

    ​ 这意味着对较低层级的修改,都将波及较高层级的签名。修改好的模块必须重新构建、发布,即使他们自身所关注的任何东西都没改动过

参考文献
《代码整洁之道》

相关文章:

  • leetcode: 122. 买卖股票的最佳时机II
  • 字符串习题总结3
  • Java 操作RestHighLevelClient查询详解
  • 有效 TCP RST
  • 46.全排列 | 51.N皇后
  • 正则表达式的说明》
  • 【Vue】基础系列(三三)指令语法-事件及其修饰符,动态样式,v-model的用法,数据持久化存在本地localStorage,自定义指令
  • 3D感知技术(3)相机成像模型及相机标定
  • ThinkPHP 接口开发过程
  • Pytorch常用的4种随机数生成方法
  • java毕业设计闲一品交易平台mybatis+源码+调试部署+系统+数据库+lw
  • java计算机毕业设计汽车销售系统源码+数据库+系统+lw文档+mybatis+运行部署
  • GNS3 vm 添加 H3C VSR1000 镜像、导入初始配置
  • docker镜像学习
  • 5.ARP地址解析协议
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Babel配置的不完全指南
  • ComponentOne 2017 V2版本正式发布
  • JavaScript服务器推送技术之 WebSocket
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • React组件设计模式(一)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 复杂数据处理
  • 高性能JavaScript阅读简记(三)
  • 给第三方使用接口的 URL 签名实现
  • 关于Java中分层中遇到的一些问题
  • 为视图添加丝滑的水波纹
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 栈实现走出迷宫(C++)
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • #define、const、typedef的差别
  • #pragma data_seg 共享数据区(转)
  • $ git push -u origin master 推送到远程库出错
  • (003)SlickEdit Unity的补全
  • (07)Hive——窗口函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (js)循环条件满足时终止循环
  • (MATLAB)第五章-矩阵运算
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (安卓)跳转应用市场APP详情页的方式
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (汇总)os模块以及shutil模块对文件的操作
  • (转)jQuery 基础
  • .NET Micro Framework初体验(二)
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET程序员迈向卓越的必由之路
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /var/spool/postfix/maildrop 下有大量文件
  • @Data注解的作用
  • [ C++ ] STL---string类的模拟实现
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [145] 二叉树的后序遍历 js