重构之使用基本数据类型的技巧

最近在看《代码大全》,对其中一些重构技巧、代码风格比较欣赏。但是无奈自已记性不是很好,所以决定每读完一章,把比较重要的觉得可以采用的关键点记录下来,以备不时之需。

整数:注意检查中间结果溢出;

浮点数:避免等量判断;在C++中应如此:

const double ACCEPTABLE_DELTA = 0.00001;
bool equals(double term1, double term2)
{
  if(abs(term1 - term2) < ACCEPTABLE_DELTA)
    return true;
  else
    return false;
}

C风格的字符串
1. 把C风格字符串的长度声明为CONSTANT + 1;因为长度为n的字符串需要n + 1个字节的存储空间
2. 用null初始化字符串以避免没有结束符’\0’的字符串。例:
char EventName[MAX_NAME_LENGTH + 1] = {0};
布尔变量
1. 通过引入布尔变量对程序加以说明;

//目的不明确的布尔判断
if( (elementIndex < 0) || ( MAX_ELEMENTS < elementIndex ) || ( elementIndex == lastElementIndex))

{
...
}
//目的明确的布尔判断
bool finished = ( (elementIndex < 0) || ( MAX_ELEMENTS < elementIndex ) );

bool repeatedEntry = ( elementIndex == lastElementIndex );
if( finished || repeatedEntry )
{
...
}

2. 需要的话,创建自已的布尔类型;比如说C中没有bool类型,可以这样做:

typedef int Bool;
或者:

enum Bool
{
TRUE = 1,
FALSE = (!TRUE)
};

枚举类型
1. 用枚举类型作为布尔变量的替代方案
    有时布尔变量无法充分表达它所需要表达的含义。举例而言,假设你有一个函数成功完成任务后返回true,否则返回false。后来你可能发现事实上有两种false。第一种表示任务失败了,并且影响只局部于子程序自身;第二种表示任务失败了,而且产生了一个致命错误。这种情况下,一个包含STATUS_SUCCESS, STATUS_WARNING, STATUS_FATAL_ERROR值的枚举类型,就是一个包含true, false的布尔变量更有用。如果成功和失败的具体类型有所增加,对其进行扩展以区分这些情况也是非常容易的。
2. 检查非法值
    定义枚举的第一项和最后一项,以便用于循环边界;
    把枚举类型的第一个元素留做非法值;如:

enum Country
{
  COUNTRY_INVALID = 0,
  COUNTRY_FIRST = 1,
  COUNTRY_CHINA = 1,
  COUNTRY_ENGLAND = 2,
  COUNTRY_INDIA = 3,
  COUNTRY_USA = 4,
  COUNTRY_JAPAN = 5,
  COUNTRY_LAST = 5
};

使用类型别名
作用:
1) 易于修改,更加灵活;
    例如,如果一开始不确定坐标x,y是用float还是double来表示,可以创建一个数据类型:
    typedef float Coordinate;
    Coordinate x, y, z;
     改变后的类型定义:
    typedef double Coordinate;
2) 弥补语言的不足,如C中没有Bool类型,可以typedef int Bool

Note: 

    1) 适当的时候,可以考虑创建一个类而不是使用typedef;
    简单的typedef对隐藏变量的底层类型信息是大有帮助的。但是,有时你可能需要在此数据类型上定义与类型相关的特定操作,来获取更大的灵活性,这种情况可以考虑创建一个类(抽象数据类型, ADT)。

    2)避免使用magic number(没有经过解释的数值文字常量,如100,47536)。
    替代方法:使用具名常量,即C/C++中的const变量;或全局变量、枚举类型。
    一条很好的经验法则是,程序中仅能出现的文字量就是0和1,用于表示从数组的第一个元素开始遍历和增量。

原文链接: https://www.cnblogs.com/victoria/archive/2011/11/30/fundamental_data_types.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    重构之使用基本数据类型的技巧

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/37602

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午2:14
下一篇 2023年2月8日 下午2:15

相关推荐