none
●●●變數命名法投票 RRS feed

  • 一般討論

  • 我公司用vb6 + MS SQL 2000來開發系統
    最近在討論新系統「變數命名」的議題,分2派:
    ●中派:允許變數加入中文命名,如:txt品號, sub算月利潤率 ...等,理由:(甚至不用註解)可一眼即知其意
    ●英派:不允許變數加入中文命名,如:txtPartNo, Get_ProfitRate_M,理由:加入中文名,會使得整體程式變得難以辨識(因為table欄位有用到中文欄名)
    --------
    請教各位支持何者?
    理由? (暫不論舊系統的用法,及主管的意見)
    thanks!

    2010年4月26日 上午 11:06

所有回覆

  • 我個人是英派的,因為中英文混雜會讓可讀性降低,不用註解更對可讀性有很大的殺傷力。
    就連 table 欄位也不應該用中文命名。

    但再怎麼樣,主管的意見才是意見 ... 如果主管自己認為要用中文命名,底下的人再怎麼反對都沒用。


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年4月26日 上午 11:29
    版主
  • .Net 完整支援 Unicode 也就算了,VB6 是 ANSI Window ,用中文當變數名... 是想要測試編譯器對中文的支援能力嗎?

    即使到了 .Net 也不會考慮中文名,你永遠無法預期未來的編譯器能力,你也無法預期你老闆對非中文市場的企圖心。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月26日 下午 02:13
  • 即使全英文,只要開發文件齊全,還是可以大幅降低維護難度

    就算全中文,真的就不用註解嗎??懷疑.....

    2010年4月26日 下午 05:33
  • 感謝指教,您認為,中英文混雜會讓可讀性降低,但若用純英文編法,可讀性也未必高吧!

    即使後面加註中文意思,但若程式中有幾十處有用到該英文變數,難道每次都要註解? 有人會說,在開頭定義處加註就好了,問題是,每隔一陣子,進來看程式,可能很多變數都要再跑到程式開頭,看其中文意思,也會拖慢時間,不如直接在英文編類後面,加上中文名,如:txt結關日,表示是TextBox,若用英文命名,還要傷腦筋英文要怎取,怎縮寫呢!

     

    2010年4月27日 上午 02:22
  • 感謝指教,老實說,舊系統已經用中派命名法有3年了,從未遇過因為中文命名而編譯錯誤的案例,況且,所謂中派命名,其實在中文變數名之前,是有英文字串當辨識的。
    2010年4月27日 上午 02:23
  • 感謝指教,您說得是,但,本公司不是軟體公司,故並無詳細規範變數命名原則、規則,也沒空製作完整的文件,前人英派命名,也常隨便命名,造成理解困擾,故才想要改用中派命名。

    上述的::(甚至不用註解)可一眼即知其意, 重點在「一眼」,

    意思是,中文變數名若表達清楚其意,即不必再說明之,否則,仍可加註,如:txt月利潤率, 註解:本單金額,加上同月份銷貨單金額來算毛利率。

    該加註時還是會加,並非註解一律省略!

    2010年4月27日 上午 02:31
  • 可能我是古人, 還是比較偏向英文命名. 因為一旦某個中文字可能對編譯結果造成影響這種問題會查到讓人抓狂, 中文字有好幾萬個, 除非我曾經去測過每個中文字當各種Type的變數都不會有問題, 不然實在缺乏信心.


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年4月27日 上午 03:22
    版主
  • 如果樓主自己已有定見,那大概旁人再怎麼說都沒意義了。
    唯一要煩惱的是哪天編譯器突然不支援中文變數命名,到時怎麼死的都不知道 ...
    因為,編譯器的廠商是阿度仔開的,不是華人 ...


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年4月27日 上午 03:27
    版主
  • to Bill Chung,

    感謝指教,有多人反應,擔心中文字可能對編譯結果造成影響,在此想請問:

    1. 若有影響,應在compile時就會出現錯誤吧? 很好除錯吧? 若發生多次,則可考慮不要用中文變數,但我公司用3年了,未發生,且vb6尚非全unicode環境呢!

    2. 若有影響,是否全中文變數才會出問題? 或者像:txt品號, sub算月利潤率,等,英文在前,中文在後的,也會有問題? 那豈非全部程式,除註解外,都不能用中文了?

    目前本公司舊系統,有用中文者,是:table欄名,變數(的後段),Form名

    2010年4月27日 上午 03:34
  • to symis :

    問大家支持何者。

    但只要跟你的想法不同的,就一力反駁。

    這樣的討論有意義嗎?


    學無止境
    2010年4月27日 上午 03:43
  • 用中文的話,可能會有不可預期的編碼問題(中文編碼方式有很多,而且遇到特殊的字還可能出錯)

    所以小喵支持用英文來設計

    至於可讀性,其實小喵覺得應該還好耶,小喵是這麼做的:

    1. 在開發設計時做好欄位說明,可以寫在欄位定義時的【描述】裡面
    2. 寫個小功能,可以隨時查詢甚至列印資料庫中的那些描述(請參考小喵這一篇:使用GridView顯示Sql資料庫的Table Layout Schema)

    看這資料的都是工程師,應該沒啥問題!!


    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2010年4月27日 上午 03:51
  • to Bill Chung,

    感謝指教,有多人反應,擔心中文字可能對編譯結果造成影響,在此想請問:

    1. 若有影響,應在compile時就會出現錯誤吧? 很好除錯吧? 若發生多次,則可考慮不要用中文變數,但我公司用3年了,未發生,且vb6尚非全unicode環境呢!

    2. 若有影響,是否全中文變數才會出問題? 或者像:txt品號, sub算月利潤率,等,英文在前,中文在後的,也會有問題? 那豈非全部程式,除註解外,都不能用中文了?

    目前本公司舊系統,有用中文者,是:table欄名,變數(的後段),Form名


    其實我擔心的就是編譯會過, 但執行會出問題. 變數名稱的存放和字串的存放在記憶體中是不同的方式, 不能一概而論. 如果你已經有立場, 只是想要找人支持你的想法, 那你可以把討論的標題和內容改一改 , 說實話, 我不確定現在的環境會不會出問題, 因為除非我曾經用過嚴謹的方式去測試過, 但在我的記憶中, 很久很久以前我在FoxPro3.0中被中文變數搞過一次, 從此我就再也不用中文變數名稱了 (包含資料庫欄位我也不用中文).
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年4月27日 上午 03:53
    版主
  • 若有影響,應在compile時就會出現錯誤吧?...

    那可不一定。古早之前用 VB6 就遇過奇妙的鬼打牆。不是變數含有中文,而是變數內容含有中文,compile 沒事,但是該執行檔就是不給跑。
    花了很長的時間抓錯誤,兇手就是中文內容,剛好含有某些編碼,造成奇怪的問題。

    資料庫欄位有中文還好搞,但是程式內容有中文就真的要特別留意。

    沒有發生問題,不代表沒事,只是沒有爆開而已@_@

    2010年4月27日 上午 04:01
  • 感謝各位指教,
    我想許多人都誤解我了,必須解釋一下,
    我雖是中派,也有定見,但不代表我不能接受英派的意見,否則po文是沒意義的!
    我非主管,最終決定我也不知,只是奉令蒐集大家的意見,再做評估。
    我的回貼,純粹只是就我的疑點,再發問而已,並非是反駁,或批評英派者,你們的意見是很寶貴的。
    為何我要花功夫po文? 因為我的經驗,英文變數後段加中文,如:txt品號,等,真的「一眼」即知其意,太好用了。
    若能解我所疑,或者英派提出關鍵論點,那我隨時可以放棄成見,帶槍投靠 ^_^
     
    to  topcat_小喵,
    您說的小功能,只針對欄位嗎? 那變數呢? 目前我公司討論的重點,在:中英文變數名,對程式的影響
     
    to 小賤健,
    很希望您能提供實際案例,如,是哪個中文字? 若我們測出有error,那我想也不用再討論了,中派全部投降輸一半 ^_^
    2010年4月27日 上午 04:28
  • 你有測過 "許功蓋" 問題嗎?


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年4月27日 上午 04:35
    版主
  • Hi,

    基本上,我不是您們公司的,不用Care你們公司的派系鬥爭

    也不想加入您們公司內部的戰局

    放不放棄成見,都不會對我造成任何的影響

    只是就您所提的問題給您點意見

     

    您一直提到「一眼」這個論點

    我倒是覺得在好的命名規則下

    使用英文也是「一眼」就可以看懂

    「一眼」這個詞實在太為主觀,不足以當為論點

    您的「一眼」,是否對別人來說也是「一眼」

    除了「一眼」這個論點外,是否還有其它有力的論點

     

    若不能「一眼」看懂英文命名,是否該反過來思考英文的能力是否不足

    還是命名規則上出了問題

    中文命名有的好處,英文命名都有,又比較保險,可避免不相容的問題

     

    使用中文命名畢竟不保險,就算以往的系統目前使用正常

    不代表以後要套用新的工具、新的技術還能正常使用

    Coding也會打到死


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年4月27日 上午 04:57
  • 變數的部分,小喵的作法是

    每段程式Function,Sub,Class,...最開始都是一段註解,會註解傳入傳出的參數,它的意義,以及整段程式的運作邏輯。

    小喵自己通常是先寫完註解,才開始依照註解複製一份放在註解下方,之後才開始在每個註解段落中,把程式加上去。

    所以基本上不會用中文的變數,但是相信接小喵系統的人應該可以很清楚沒一個部分在寫些什麼,以及他使用的變數名稱所代表的意義

    ^_^


    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2010年4月27日 上午 05:09
  • VB6 在 SP5 以前,當使用者在 Windows 的 user id 是 中文 時,可能會導致錯誤,這是一個 FAQ ,解決的方法是:

    1. 修改 Setup1.vbp 或是 2. 更新到 SP6

     

    VB.NET 支援將原始碼存成 Unicode / UTF8 (預設為 ANSI) ,但 VB6 並不支援,也就是說超過 Big5 編碼的範圍時,ANSI 檔本身就會存成亂碼。

    VB6 相容中文變數,但並沒有宣稱支援中文變數,也就是你的用法本身就不在編譯器預期的範圍內,發生非預期的結果就更難說了。

     

    從你的回應來看,你根本不想接受別人的看法,只願堅持你的命名法,你要用中文,說實在那是你家的事,你直接講清楚,大家也可以省的浪費時間。

     

    下面這段是摘自 VB6 線上手冊的說明,剪貼比較省時間,也無需廢話:

    常數和變數的命名規格

    <object id="hhobj_1" style="width: 60px; height: 20px; top: 82px; left: 10px;" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width="60" height="20" type="application/x-oleobject"> <param name="Width" value="1270" /> <param name="Height" value="423" /> <param name="Command" value="ALink" /> <param name="Item1" /> <param name="Item2" value="vbconConstantVariableNamingConventionsC" /> <param name="Button" value="請參閱" /> <param name="Font" value=",,,,underline" /> </object>

    除了物件之外,常數和變數最好也使用一致的命名規格方式,本節列出了一些 Visual Basic 常數和變數的建議命名規格,同時也將約略說明資料型態和有效範圍的問題。

    變數應該定義在儘可能小的有效範圍內。全域 (Global) 或公用 (Public) 變數可以導致極其複雜的狀態機構,並且使一個應用程式的邏輯非常難以理解。全域變數也使程式碼的再利用和維護更加困難。

    Visual Basic 中的變數,依有效範圍可區分為:

    有效範圍 宣告 使用於
    程序層次 在程序、Sub 或 Function 中以「Private」宣告 宣告的程序
    模組層次 在表單或程式模組 (.frm, .bas) 的宣告 (declarations) 區中以「Private」宣告 表單或程式模組中的所有程序
    全域 在程式模組 (.bas) 的宣告 (declarations) 區中以「Public」宣告 應用程式中所有地方

    在 Visual Basic 的應用程式中,最好不要輕易使用全域變數,除非沒有更好的方法時。若一定得使用全域變數的話,建議您將其都宣告在同一個模組中,並按功能分類。此外,再給這個模組取一個有意義的名稱,以指明它的作用,如 Public.bas。

    較好的程式撰寫方式是儘可能模組化。例如,如果應用程式要顯示一個對話方塊,就把要完成此動作所需的控制項和程式碼都放在同一個表單中,以便將應用程式中的程式碼組織成有用的元件,如此可在其他地方再重複利用。

    除了全域變數 (應該是不能傳遞的),程序和函數應該僅對傳遞給它們的物件作業。您應該在程序開始時標示出宣告區裡會使用到全域變數的程序。此外,將引數傳遞給 Sub 程序及 Function 程序時,最好使用 ByVal 的方式,除非您確實需要改變傳遞的引數值。

    變數的有效範圍字首

    隨著專案愈趨龐大,劃分變數範圍的工作也變得更加迫切。您可在變數名稱前面再加上一個字母,來代表變數的有效範圍,如此既可輕易識別變數的範圍,變數名稱的長度也不會增加太多。

    有效範圍 字首 範例
    全域 g gstrUserName
    模組層次 m mblnCalcInProgress
    區域 (程序層次) dblVelocity

    如果一個變數在一般模組或表單模組中,被宣告為 Public,那麼該變數就具有全域的有效範圍。如果一個變數在一般模組中被宣告為 Private,那麼該變數的有效範圍就是模組層次。

    注意 一致性是有效使用這種技術的關鍵;Visual Basic 中的語法檢查工具並不會挑出以「p」開頭的模組層次變數。

    常數

    常數名稱是可以大小寫混合的。儘管標準 Visual Basic 常數並不包含資料型態和有效範圍資訊,但是像 i、s、g 和 m 這樣的字首對於理解一個常數的值和有效範圍還是很有用的。常數名稱應遵循與變數相同的規範,例如:

    mintUserListMax   '使用者清單項目的最大值
             '(整數,用於區域到模組)
    gstrNewLine      '換行字元
             '(字串,在應用程式中均可使用)
    

    變數

    宣告所有變數可節省程式撰寫的時間,因為輸入造成的錯誤可因此減少 (例如,將 aUserNameTmp,誤寫成 sUserNameTmp 或 sUserNameTemp)。您可在「選項」對話方塊的「編輯器」頁籤中,選定「要求變數宣告」選項,Option Explicit 陳述式會要求 Visual Basic 程式中所有的變數都須經過宣告。

    應該給變數加字首來指明它們的資料型式。而且字首可以被延伸,用來指明變數的有效範圍,特別是對大型程式。

    變數資料型態

    您可使用下列字首來識別變數的資料型態:

    資料型態 字首 範例
    Boolean bln blnFound
    EanB byt bytRasterData
    NbyteCollection o col colWidgets
    Ection o cur curRevenue
    on objectCu dtm dtmStart
    EctCur dbl dblTolerance
    Curre err errOrderNum
    RencyDa int intQuantity
    Ydat lng lngDistance
    Object obj objCurrent
    EctSin sng sngAverage
    Single str strFName
    GleStringUser-def udt udtEmployee
    User-de vnt vntCheckSum

    描述變數和程序名稱

    變數或程序的名稱應使用大小寫混合,並需足以描述其作用。函數名稱應該以動詞起首,如 InitNameArray 或 CloseDialog。

    對於經常使用或太長的名稱,建議您使用標準縮寫,才不會使名稱太冗長。一般來說,超過 32 個字元的名稱,在 VGA 顯示器上就較不易於閱讀。

    當使用縮寫時,要確保它們在整個應用程式中的一致性。在一個專案中,如果一會兒使用 Cnt, 一會兒使用 Count,將導致不必要的混淆。

    使用者自訂型態

    在一個有許多使用者自訂型態的大專案中,最好在為此型態命名時,使用一組特定的字首。若是以「u」開頭,那麼要識別使用者自訂型態就較為容易了。例如,ucli 可以用來做為一個使用者自訂的用戶端型態變數的字首。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月27日 上午 11:50
  • 也許您用的中文,剛好都是 Big-5 字集裡面的,才沒出問題。

    請測試看看不在 Big-5 字集的延伸字體,例如簡體中文,甚至日文、韓文吧。

    如果都沒問題,那你就可以安心使用。

     

    經驗:

    敝公司的資料庫,char 格式內容,僅能容許正常英文字與 Big-5 字集。如果硬塞其他字元進去,會造成資料庫當機。厲害吧。


    Thanks for any information. Streit Huang @ Taiwan
    2010年4月28日 上午 03:28
  • 感謝各位指教,

    to 小朱, 我會找時間測,原則上是將欄名、變數名、元件名...等,均取名為「許功蓋」,但若沒問題,我也沒把握就一定ok.

     --------------

    to 蹂躪, 您所說的派系鬥爭或戰局,是言重了! 我之所以強調「一眼」,是因為在維護時,用中文實在是太方便了,

    舉例: Form上面的元件: txtMJ01 → 訂單單別 當我在程式中看到txtMJ01 時,我要多做幾個動作,才能得知其意: (前人均無註解)
    1. 將vb畫面切到「檢視物件」頁
    2. 在「屬性視窗」找txtMJ01 元件
    3. 在「Form視窗」查看其意 ...

    但,若我將元件名,改為:txt訂單單別, 則一目瞭然! 可省很多時間!
    至於您提的相容的問題,是目前我的一大考量點!

    ------------

    to topcat_小喵, 您的習慣真好,接您系統的人真有福了! 可能是我比較「幸運」,都沒讓我碰上!

     ------------

    to 心冷熱情熄, 您誤會我了,我並沒有「不想接受別人的看法」,詳見「2010年4月27日 上午 04:28」po文 感謝您提供寶貴的資料,我非vb6熟手,所以才要請教大家,我公司vb6是sp6

    --------------

    to Streit Huang, 您說的「Big-5 字集的延伸字體」,本公司沒用到,會造成資料庫當機,真的很嚴重,不知你們是用MS SQL 2000?

    2010年4月28日 上午 08:45
  • 命名成「txtMJ01」,是人的問題跟用中文英文命名沒有關係....

    如果命名「txt訂別」是用中文的,會比英文好懂?


    學無止境
    2010年4月28日 上午 09:00
  • 上面就有提到了是命名規則的問題

    您舉的例子根本就不客觀

    完全無法成為論點

    MJ是個人自己用的縮寫

    若連你們部門的人看不懂

    那就是代表他用的縮寫不能獲得大家的共識

    這時不要縮寫會來得好

    這並不能說是英文命名法的關係

    不論是英文命名還是中文命名

    公司都應該有一套大家能接受的Rule

    不然中文命名一樣也可能會看不懂(中文也可以打方言、台語)

     

    我是覺得如果公司現在要開始下來要求用中文命名

    那不如乾脆要求加註解、與規定一致的命名規則


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年4月28日 上午 09:41
  • 感謝兩位指教,

    若是要用中派命名法,就會儘量取得能一目瞭然,如:txt訂單單別,而不會取名為:txt訂別,不然就失去用中文的意義了。

    當然若用英派命名也可,如:訂單單別→ txtOrderType, 訂單單號→ txtOrderNo, 但是實在說,不論是在命名時或辨識時,畢竟還是中文較方便,若要將所有中文欄位或狀況,都對應到英文的命名規則,可能要先編一大套中英對照表,若不縮寫,則很長,若縮寫,則又怕難懂,真是為難。

    我猜國內大多數人都用英派編法,軟體公司也是吧!

    同事比較care閱讀性, 網友反應的,卻是相容性(現在ok,不代表未來ok)。

    我會把各種意見彙整,再向主管報告。

    2010年5月3日 上午 10:07
  • 我有做了一個vb的小程式如下:

    save.la/EZ1612876636

    不知如何測"許功蓋"的問題,請教大家,thanks!

    2010年5月4日 上午 06:47