線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3182
推到 Plurk!
推到 Facebook!

全域變數的使用時機

答題得分者是:ANDY8C
skywillnosky
一般會員


發表:12
回覆:11
積分:4
註冊:2012-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-02-04 17:18:39 IP:61.220.xxx.xxx 訂閱
情況一:
假設有一個功能A
拆成數個function
function之間要達成的目的(單就該function而言)不一樣
但是有些變數X會一直重複使用到,
也就是有很多function會有幾個一模一樣的參數,
而這些變數X,甚至在其他的功能B、功能C、功能D的部分function也會用到
但是這些變數X主要是基於功能A的需要所產生的
這種情況下
需不需要宣告成該功能的全域變數?
或是另外開一個unit專門定義這些變數X?
可讀性會不會有所改善?

情況二:
假設在一個Library內有一個function
拆成數個更小的function
而這些function又拆成更小的function
有點階層式的感覺
例:
function_layer1
begin
...
function_layer2;
...
end;
function_layer2
begin
...
function_layer3;
...
end;
但是與情況一一樣,某幾個變數從最外層到最內層的function幾乎都會用到
這種情況下
需不需要宣告成該Library的全域變數?
或是另外開一個unit專門定義這些變數X?
可讀性會不會有所改善?
會這麼問是因為,最近交接的Code用到數量相當的全域變數,
一直參照來參照去(加上Delphi沒有雙視窗切換熱鍵),在交接初期吃足苦頭,
雖然看完後覺得好像有這麼點道理,但是還是對全域變數的使用感到困惑,
故有此一問...
感謝您
編輯記錄
skywillnosky 重新編輯於 2013-02-04 02:25:51, 註解 加入原因‧
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-02-04 20:31:13 IP:210.66.xxx.xxx 未訂閱

===================引 用 skywillnosky 文 章===================
情況一:
假設有一個功能A
拆成數個function
function之間要達成的目的(單就該function而言)不一樣
但是有些變數X會一直重複使用到,
也就是有很多function會有幾個一模一樣的參數,
而這些變數X,甚至在其他的功能B、功能C、功能D的部分function也會用到
但是這些變數X主要是基於功能A的需要所產生的
這種情況下
需不需要宣告成該功能的全域變數? 既然為 "全域" ,宣告在那一個 UNIT 沒差,要記得 USES 該 "專門" 的 UNIT

可讀性會不會有所改善? 您想的太複雜了..... 命名要有點技巧,我是 _X...開頭,就是全域,變數名稱取有意義的好維護
EX. _X123435 與 _XmyBirthday ,後者就有意義多了...

感謝您
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
skywillnosky
一般會員


發表:12
回覆:11
積分:4
註冊:2012-12-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-02-05 09:17:02 IP:61.220.xxx.xxx 訂閱
不知何為 "可讀性" ?? 比較好維護是真的.
其實就是讓以後交接的人可以比較迅速了解這程式的目的和他的架構。

現在的CODE麻煩的地方就是
功能A有用到功能B、C、E的全域變數
功能C有用到功能A、B、D的全域變數
功能E有用到功能A、B的全域變數
功能D有用到功能B、C、E的全域變數
功能B有用到功能D、C的全域變數
...(感情糾葛?剪不斷理還亂?!)

所以整個滿亂的。
還是說情況一跟二都用private,再用property的方式存取會不會比較好?
(可是這樣好像要Create)
希望至少在這方面可以多少降低一些耦合現象

命名有用類似匈牙利命名法,可是我沒有把型別也加入變數名稱裡面就是了(名稱好長)。

ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-02-05 23:24:38 IP:114.40.xxx.xxx 未訂閱

===================引 用 skywillnosky 文 章===================
現在的CODE麻煩的地方就是
功能A有用到功能B、C、E的全域變數
功能C有用到功能A、B、D的全域變數
功能E有用到功能A、B的全域變數
功能D有用到功能B、C、E的全域變數
功能B有用到功能D、C的全域變數

以上說法...怪怪的
既然是全域變數,應該在所有的 unit 都可用
全域變數,不管宣告在那一個 unit 都可以
只要有 uses 該 unit ,則變數就可以使用,目前的unit 不一定看的見該變數的宣告

您可以將全部的全域變數集中在某個 X_unit,
所有程式都 uses 該 X_unit 即可,只要維護 X_unit 就好


------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
skywillnosky
一般會員


發表:12
回覆:11
積分:4
註冊:2012-12-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-02-06 10:37:51 IP:61.220.xxx.xxx 訂閱
所以說如果有很多功能都會用到的變數
就寫到同一個UINT 註解
如果是某個功能底下多個函數會用到的變數
但是其他功能不會用到,就是在該功能宣告成私有成員。
是這樣嗎?
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2013-02-06 20:10:16 IP:125.230.xxx.xxx 未訂閱

其實變數不用如此,若是大家都會用,管他部份還是全部,都設為全域

若僅是目前函數使用,就宣告在該函數中

要變更變數名稱也很容易,delphi 的替換字元功能就可以



===================引 用 skywillnosky 文 章===================
所以說如果有很多功能都會用到的變數
就寫到同一個UINT 註解
如果是某個功能底下多個函數會用到的變數
但是其他功能不會用到,就是在該功能宣告成私有成員。
是這樣嗎?
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2013-02-06 22:21:40 IP:59.120.xxx.xxx 未訂閱
我覺得這是一個很有意思的問題, 我也一直想問的是

把很多變數分門別類放在不同的 unit , 其他unit 要用到再去做 uses 比較好, 還是直接在 每一個 unit 上設定public 格式, 透過其他unit 來 use好?
前者可能很多 unit (A,B,C...) 分別 use unit(1,2,3 變數宣告)
後者是 unitA uses unit1, unit2
unitB uses unit3
unitC uses unit2, unit3
unitD unise unit1

但萬一 unit 1 又有 uses unit 3

那那一種好呢?


ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2013-02-07 10:19:44 IP:125.230.xxx.xxx 未訂閱
全部的全域變數,放在 一個 UNIT_VRAS.PAS 中

任何 UNIT1 ,UNIT2....都 USES UNIT_VARS 即可

我個人是如此用,但牽扯軟體寫作風格及習慣,
所以不是每人都能沿用此觀念

大家參考就好



===================引 用 P.D. 文 章===================
我覺得這是一個很有意思的問題, 我也一直想問的是

把很多變數分門別類放在不同的 unit , 其他unit 要用到再去做 uses 比較好, 還是直接在 每一個 unit 上設定public 格式, 透過其他unit 來 use好?
前者可能很多 unit (A,B,C...) 分別 use unit(1,2,3 變數宣告)
後者是 unitA uses unit1, unit2
unitB uses unit3
unitC uses unit2, unit3
unitD unise unit1

但萬一 unit 1 又有 uses unit 3

那那一種好呢?


------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
skywillnosky
一般會員


發表:12
回覆:11
積分:4
註冊:2012-12-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2013-02-07 11:18:25 IP:61.220.xxx.xxx 訂閱
我大概知道要怎麼做了

感謝大家

老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2013-02-07 12:36:35 IP:210.61.xxx.xxx 未訂閱
ANDY8C 大跟P.D. 大都說的有理
但我個人覺得
要用這些變數時還要考慮到該變數"同時"被使用到的狀況
假如有兩個Form同時要使用某個變數
最好就獨立開來用

舉例來說~
使用者在某個FormA用到了FormB的變數AA
而在這過程中
使用者在沒有關掉FormA的情況下
去開起了FormB
而FormB在使用過程中也會用到AA
使用者把FormB用完後回過頭要使用FormA
那麼該變數AA已經變調了QQ
這時候可能會有點問題...

嗯...
這問題在我的前公司有遇過
有人想說懶得自己多打幾個字宣告一下
就直接uses UnitX
方便嘛~
結果有時就一直存檔時會有問題
怎麼找也找不到
後來有次直接看到使用者操作時
才發現原來他們有這樣子的操作方式
問題點才找到...ˋˊ
就只是因為某人的貪圖一時之快
讓我找問題找了超久....(/‵Д′)/~ ╧╧




===================引 用 ANDY8C 文 章===================
全部的全域變數,放在 一個 UNIT_VRAS.PAS 中

任何 UNIT1 ,UNIT2....都 USES UNIT_VARS 即可

我個人是如此用,但牽扯軟體寫作風格及習慣,
所以不是每人都能沿用此觀念

大家參考就好



===================引 用 P.D. 文 章===================
我覺得這是一個很有意思的問題, 我也一直想問的是

把很多變數分門別類放在不同的 unit , 其他unit 要用到再去做 uses 比較好, 還是直接在 每一個 unit 上設定public 格式, 透過其他unit 來 use好?
前者可能很多 unit (A,B,C...) 分別 use unit(1,2,3 變數宣告)
後者是 unitA uses unit1, unit2
unitB uses unit3
unitC uses unit2, unit3
unitD unise unit1

但萬一 unit 1 又有 uses unit 3

那那一種好呢?


系統時間:2024-04-27 1:47:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!