重構函數(2)變量排查

拆分函數的時候,對於拆出來得到的新函數,

要看裏面的所有變量是什麼類型的變量,是否有定義。

 

按照變量所寫的位置,分爲幾種:

普通變量、數組下標變量、小數點或->後面的變量、宏裏面的變量,

當然,宏裏面的變量也分爲普通變量、數組下標變量、小數點或->後面的變量,

對於小數點或->後面的變量可以不用管,對於普通變量、數組下標變量,需要注意是否有定義。

 

如果是全局變量或宏定義的常量,那就是有定義,如果沒有定義,那就有2種處理方式:

要麼傳參,要麼直接在新函數中定義。

傳參是爲了傳值進來或者傳值出去,而有的臨時變量,既不會傳入,也不會傳出,就不用傳參。

 

臨時變量的生命週期拆分:

有的函數是這麼寫的:

    int x;
    x=fun1();
    y=f(x);
    x=fun2();
    z=f(x);

如果要把這個代碼拆成2個函數,對於x這個變量,其實是可以拆開的,也就是說,上述代碼等價於

    int x;
    x=fun1();
    y=f(x);
    int xxx
    xxx=fun2();
    z=f(xxx);

這樣,拆開成2個函數之後,就不用把第一個函數計算出來的x的值傳到第二個函數。

 

總結:

(1)注意讀宏

(2)小數點或->後面的變量可以不用管,全局變量或者宏定義的常量也不用管,宏裏面的變量和其他變量要麼傳參,要麼直接在新函數中定義。

(3)傳參是爲了傳值進來或者傳值出去,而有的臨時變量,既不會傳入,也不會傳出,就不用傳參。

(4)形如上述的代碼中,臨時變量的生命週期可拆分,避免冗餘的參數傳遞。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章