重構之使用基本資料型別的技巧

2022-03-24 14:10:15 字數 2079 閱讀 5723

最近在看《**大全》,對其中一些重構技巧、**風格比較欣賞。但是無奈自已記性不是很好,所以決定每讀完一章,把比較重要的覺得可以採用的關鍵點記錄下來,以備不時之需。

整數:注意檢查中間結果溢位;

浮點數:避免等量判斷;在c++中應如此:

const

double acceptable_delta = 0.00001;

bool equals(double term1, double term2)

c風格的字串

1. 把c風格字串的長度宣告為constant + 1;因為長度為n的字串需要n + 1個位元組的儲存空間

2. 用null初始化字串以避免沒有結束符』\0』的字串。例:

char eventname[max_name_length + 1] = ;

布林變數

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

;

列舉型別

1. 用列舉型別作為布林變數的替代方案

有時布林變數無法充分表達它所需要表達的含義。舉例而言,假設你有乙個函式成功完成任務後返回true,否則返回false。後來你可能發現事實上有兩種false。第一種表示任務失敗了,並且影響只區域性於子程式自身;第二種表示任務失敗了,而且產生了乙個致命錯誤。這種情況下,乙個包含status_success, status_warning, status_fatal_error值的列舉型別,就是乙個包含true, false的布林變數更有用。如果成功和失敗的具體型別有所增加,對其進行擴充套件以區分這些情況也是非常容易的。

2. 檢查非法值

定義列舉的第一項和最後一項,以便用於迴圈邊界;

把列舉型別的第乙個元素留做非法值;如:

enum country

;

使用型別別名

作用: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,用於表示從陣列的第乙個元素開始遍歷和增量。

Objective C之基本資料型別

整型 int integertype 5 浮點型 float floattype 3.1415 雙浮點型 double doubletype 2.2033 短整型 short int shorttype 200 長整型 long int longlongtype 7758123456767l c語言...

python之基本資料型別

1 數字型別 整形 int 1.1 作用 記錄年齡 身份證號 個數等 1.2 定義 age 18print type age 浮點型 float 1.3 作用 記錄薪資 身高 體重 1.4 定義 salary 3.3height 1.87 weight 70.3 print type salary ...

MySQL之基本資料型別

目錄基本資料型別 時間型別 列舉與集合型別 日常生活中檔案格式有很多中,並且針對不同的檔案格式會有對應不同儲存方式和處理機制 txt,pdf,word,mp4.針對不同的資料應該有對應的不同的處理機制來儲存 儲存引擎就是不同的處理機制 mysql主要儲存引擎 檢視所有的儲存引擎 show engin...