作者MOONRAKER (㊣我不願站在八卦的前線.)
看板C_and_CPP
標題我的變數命名怪談
時間Mon Apr 27 21:10:21 2009
關於一開始寫程式的時候有沒有依照規範取人看得懂的變數名,我也不記得有沒有
不過我做了一個夢
夢到我以前在一種用某M牌CPU並且用某種水果取名字的電腦上學寫BASIC程式
那時候並沒有依照現在可以接受的規範給變數取名
因為我夢到該種水果電腦只承認變數名稱的前面兩個字
變數名字可以很長;但是前兩個字重覆就不算
例如MARY和MARK其實是同一個變數
不過其實當時用MARY或MARK的下場都一樣,會發生錯誤
因為我夢到我不是用原版的那某水果電腦
是用某A開頭R結尾的台灣公司當年賣的水果仿造品
他裡面有一個不明用途的MA指令(到現在我還是沒夢到他是幹嘛的)
所以MARK或MARY都一樣,觸犯用關鍵字當變數名的禁忌
因為給這種兩個字的變數命名整了不少時間
所以後來當換到某I牌8開頭8結尾CPU的機器上的時候
就夢到說,該牌機器上的某M牌BASIC不但可以用很長很長的變數名
而且承認前32個字,或40個字,沒夢到那麼清楚
所以我那時夢到就立刻把所有的變數名都取成SWAPPING.SOURCE.ADDRESS這麼長
那一個swap就可以寫成這樣
SWAPPING.TEMP = ARR(SWAPPING.SOURCE.ADDRESS)
ARR(SWAPPING.SOURCE.ADDRESS) = ARR(SWAPPING.DESTINATION.ADDRESS)
ARR(SWAPPING.DESTINATION.ADDRESS) = SWAPPING.TEMP
喔對了,這個某M牌BASIC接受在變數名中使用 . 不是 _ 喔
這點實在滿笨的,所以後來他們就改了
以上都是夢到的,和本板主題無關
但是接下來夢到的,就跟本板有關了
因為有夢到以上變數命名的經驗
所以我後來就不贊成在小program unit中茲事體大地取很複雜的變數名字
基本上一個program unit如果短到只在做一件事
而且可以用簡單的口語解釋清楚,那就不需要在意變數命名
比如以下的片段,考慮一下你會怎麼跟別人解釋這個program unit在幹嘛
void swap(int *x, int *y) /* 要掉換的兩個數,x 和 y,以指標傳入 */
{
int temp; /* 宣告一個暫存位置 temp */
temp = *x; /* 取出 x 的值放入暫存變數中 */
*x = *y; /* 取出 y 的值放入 x 中 */
*y = temp; /* 令 y 的值 = temp */
}
以我來說,如果用 x , y 會比 int1, int2 更簡單,那麼用 x , y 命名即可
因為 x , y 在這個程式單元中「自洽」,便不需要考慮是否跟其他部份混淆。
但是即使這樣我也絕不同意用 ttt , tttt 這種變數名稱
這根本就在整人,增加閱讀難度
改寫一下上面那段
void SWAP(int *___t, int *____t)
{
int _____t;
_____t = *___t;
*___t = *____t;
*____t = _____t;
}
不要認為這只是故意找麻煩,
沒有準備的時候,ttt或tttt看起來其實跟上面差不多。
而 ll, mm, tt 等一堆,和 __1, __2, __3 又有何不同?
不過還真的有人用這種風格的全域變數。
最近我夢到(又是夢到)改到某個套件的模組,這個套件有很多新鮮事
其中一個是這套件的歐洲用戶很多,所以你會看到德文或西班牙文的註解
另外一個是,某個叫做productbook的模組,這模組也很鮮,像是俄國人改寫的
不知道這個俄國人在想什麼,總之他的語言檔裡面就是這樣:
PRODUCTBK_0031 = "cash";
PRODUCTBK_0032 = "You arn't privileged enough to modify this item.";
PRODUCTBK_0033 = "Credit Card";
...
這樣一直下去到 _0183 還是多少的
這種跟密碼一樣的命名風格衝擊到好幾個層面
第一個是程式修改,第二個是訊息翻譯,其他的就留給大家想了
當然最好是永遠也不要碰到這種風格的東東…
---
不過我要重申一次,以上都是我夢到的
如有雷同,那也沒有辦法~
請板主隨便發落 :︴
--
Google 關鍵字 : MPFC-TCP / 殺人笑話 / 包租婆也有過當羅莉的時候
Youtube關鍵字 : 脫衫脫褲 / 傻蛋奧運 / 宗教審訊 / 買張床 / 單車超人 / 謳歌金錢
*美髮師登山隊 http://tinyurl.com/dm6lh3 *Ypres 1914 http://tinyurl.com/b432jb
[蒙帝派松正體中文計畫] http://www.youtube.com/user/JamesBondXD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.105.197
推 evernever:夢真多... 04/27 21:15
推 yauhh:妖妖夢 04/27 21:20
→ vocaloid: 永夜抄 04/27 21:24
推 awashharp: 夢時空 04/27 21:25
推 satokuzao: 星蓮船 04/27 21:27
推 chrisdar: 地靈殿 04/27 21:41
推 COLDTURNIP: 文花帖 04/27 21:54
推 netsphere: 都是阿扁的錯 04/27 21:56
→ MOONRAKER: 台灣加油 04/27 22:25
推 VictorTom:到底為什麼會流行用"我夢到"的來發文勒XDDD 04/27 23:21
推 ledia:因為某卦板怕講到太關鍵的事會有官司麻煩, 夢到的總沒罪吧 04/27 23:44
推 VictorTom:那我可以說我是夢遊起來打的嗎XDDD 04/27 23:51
→ MOONRAKER:其實我有一點意見說…上面居然連續推東方系列,推了那麼 04/28 01:09
→ MOONRAKER:多代,正當我覺得非常榮幸的時候突然轉到阿扁… 04/28 01:10
→ MOONRAKER:害我接不下去,只好推個台灣加油… XD 04/28 01:11
→ MOONRAKER:總之謝謝大家 XD 04/28 01:12
→ VictorTom:那~~把小弟的推文修掉吧XD 話說, 我只聽過前兩個Orz 04/28 01:38
推 sunneo:其實我先前在某版那樣子講的時候就被那樣子回了 .. 04/28 01:41
→ sunneo:後來想想 照那樣的觀念下去 大概是希望沒人去回應他吧 04/28 01:42
→ sunneo:所以既然某夢中人不想原po得到回應 那我就順他的意... 04/28 01:42
→ sunneo:畢竟沒有人想維護的程式碼 要有人回應也是頗難的 04/28 01:43