首页 > 其他分享 >第三章 编码风格

第三章 编码风格

时间:2023-11-29 10:58:45浏览次数:33  
标签:编码 第三章 下划线 驼峰 do 风格 名称 命名

第三章 编码风格


注释

总结起来一句话: 优秀的代码本身就容易阅读,注释只需要提供有用的附加信息

分解

分解(decomposition) 指将代码分为小段.理想情况下,每个函数或方法都应该只完成一个任务.任何非常复的子任务都应该分解为独立的函数或方法.

重构(refactoring) 指重新构建代码的结构.下面是一些可用来重构代码的技术:

  • 增强抽象的技术
    • 封装字段:将字段设置为私有
    • 使类型通用:创建更通用的类型
  • 分割代码以使其更合理的技术
    • 提取方法:将较大方法的一部分转换为新方法
    • 提取类
  • 改善代码名称和位置的技巧
    • 移动方法或字段
    • 重命名方法或字段
    • 上移(pull up):移到基类中
    • 下移(push down):移到派生类中

命名

C++编译器有几个命名规则:

  • 名称不能以数字开头(如:2015class)
  • 包含两个下划线的名称作为保留名称,不该使用(如:my__name)
  • 以下划线开头跟着大写字母的名称是保留名称,不该使用(如:_Name)
  • 全局名称空间中以下划线开头的名称是保留的,不该使用(如:_name)
适当的名称 不当的名称
区分度高的名称:
sourceName,destinationName
笼统的名称
thing1,thing2
表明全局身份:
g_Settings
太长:
globalUserSpecificSettingsAndPreferences
表明成员身份:
m_nameCounter
太简单模糊:
mNC
简单明确:
calculateMarigoldOffset()
太宽泛:
doAction()
赏心悦目:
mTypeString
只有计算机喜欢:
typeSTR256
描述性名称:
errorMessage
非描述性名称:
String
无缩写:
sourceFile
有缩写
srcFile,dstFile

计数器

通常来说,C风格的计数器喜欢将i与j作为计数器.这是非常危险的行为,特别是考虑嵌套循环时.i与j有时难以区分.

因而,与使用i和j相比,将 rowcolumn 作为索引会更容易.

有些程序员也喜欢使用 outerLoopIndexinnerLoopIndex 等计数器.

前缀

前缀 示例 前缀含义
m
m_
mData
m_data
成员
s
ms_
sLookupTable
ms_lookupTable
静态
c
c_
cMaximumLength
c_maximumLength
常量
b_
is
b_completed
isCompleted
布尔值
g_ g_Settings 全局

匈牙利命名法 :使用更加详细的前缀而不是一个字母表示附加信息
好的名称会传递与用途有关的信息,而不会使代码阅读困难

常量

在一般情况下,应当将常量放到名称空间中去.

在所有情况下都不应该使用常量字面量表示某个常数,这种不经过解释的常量又称"魔数".特别是从C++20开始,标准库包含了一组预定义的数学常量,定义在 中的 std::numbers 名称空间中,包括e,pi,sqrt2,phi等.

在大部分情况下,使用引用代替指针,特别是需要常量的地方.

命名风格

  • 匈牙利命名法 :匈牙利命名法是早期的规范,主要在IDE还不智能的时期,将对象的数据类型与相关信息缩写作为前缀方便阅读.

    • 例如
      i:int c:char f:float str:string b:bool by:byte a:array w:word dw:double word
      fn:function l:long n:short p:pointer lp:long pointer sz:string with zero
    • 匈牙利命名法:cMyName,iMyAge
  • 驼峰命名法:小驼峰命名法要求第一个单词首字母小写,后面其他单词首字母大写.大驼峰法则在小驼峰法的基础上首字母大写. 一般驼峰命名法指小驼峰命名法.

    • 小驼峰法: myAge,myName,idChecker
      大驼峰法: MyAge,MyName,IDChecker
  • 帕斯卡命名法:一般指大驼峰命名法.

  • 下划线命名法:要求单词与单词之间通过下划线连接即可.

    • 下划线命名法: my_age,man_height

代码风格

  • K&R风格: Kernighan&Ritchie风格,左花括号与使用它的语句同一行
void function()
{
    if(bTrue){
    //do someting......
    } 
    else{
    //do someting......
    }
}
  • Allman风格: 每个花括号单独占一行
void function()
{
    if(bTrue)
    {
        //do someting......
    } 
    else
    {
        //do someting......
    }
}
  • Whitesmiths风格: 换行基于Allman风格,但具体缩进有不同
void function()
    {
    if(bTrue)
      {
      //do something
      }
   else
      {
      //do someting......
      }
   }

标签:编码,第三章,下划线,驼峰,do,风格,名称,命名
From: https://www.cnblogs.com/mesonoxian/p/17864037.html

相关文章

  • 自定义应用层通信协议结构消息的编码方式
    应用层通信协议设计 一、应用层通信协议概述TCP/UDP是基于字节流的传输层通信协议,对于其的编程是基于IO流编程,所谓“流”,就是没有界限的一长串二进制数据。TCP/UDP作为传输层协议,并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分。所以在业务上......
  • IF语句及代码风格
    Chap4条件IF语句IF语句的流程eg:deff(x): print("A",end="") ifx==0: print("B",end="") print("C",end="") #x不等于0时,这两行代码不会执行 print("D")f(1)ADf(0)ABCD实现一个函数,返回输入数字的绝对值p......
  • 条件语句和清晰代码风格
    if语句deff(x): print("A",end="") ifx==0:   print("B",end="")   print("C",end="") print("D")f(1)AD//defabs1(n): ifn<0:   n=-n returnn写在......
  • Linux第三章学习笔记
    Linux系统是一个多用户、多任务的操作系统。为了保证系统的安全和有效使用,Linux提供了严格的用户管理机制。本篇学习笔记主要讲解Linux用户管理相关内容。用户账户Linux系统中的用户账户包括系统管理员账户(root账户)和普通用户账户。其中,root账户拥有最高的权限,可以进行系统的所......
  • Vue3 第三章
    Vite目录public下面的不会被编译可以存放静态资源 assets下面可以存放可编译的静态资源 components下面用来存放我们的组件 App.vue是全局组件 maints全局的ts文件index......
  • Netty源码学习6——netty编码解码器&粘包半包问题的解决
    系列文章目录和关于我零丶引入经过《Netty源码学习4——服务端是处理新连接的&netty的reactor模式和《Netty源码学习5——服务端是如何读取数据的》的学习,我们了解了服务端是如何处理新连接并读取客户端发送的数据的:netty的reactor:主reactor中的NioEventLoop监听accept事件,然......
  • C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转
    简介字符串编码转换封装函数,UTF-8编码与本地编码互转。中文乱码的解决方法有时候我们会遇到乱码的字符串,比如:古文码可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(stringstr)函数转换一下就可以了。口字码可能是因为以UTF-8的方式读取GBK编码的中文导致的,用下面......
  • 字符串的解码和编码
    #str表示字符串类型转为bytes类型(二进制类型)s='伟大的中国梦'scode=s.encode(errors='replace')#默认是utf-8,因为utf-8每个中文占3个字节print(scode)#所以输出18位字节#输出结果为:\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa2\xa6#用_gbk方式s......
  • 求解--如何把图片的base64编码转换成图片(未解决)
    问题描述将图片弄好之后,并且显示我弄成功了,但是就是找不到图片保存到哪里了;然后发现可以将base64编码转换成图片,但是不会转~~~求解救呀~~~问题解决未解决!!!......
  • 第三章 Linux用户管理
    在Linux操作系统中,用户管理是系统管理员不可或缺的一项任务。有效的用户管理不仅仅涉及到创建和删除用户账户,还包括权限控制、群组管理以及其他与用户相关的各种任务。在这篇博文中,我们将深入探讨Linux用户管理的各个方面,为管理员提供全面的指导。1.用户账户的创建与删除1.1创......