在 C 的年代,問這種問題應該會被恥笑到抬不起頭,
沒有人去挑戰,因為 Compiler 就告訴你這樣不行(其實是因為 Compiler 這樣比較好做),
而現在, C 的輝皇年代過去了,後繼的程式語言取消了這個限制,
於是我們再來討論一下這個問題:變數宣告是不是一定要在函數的開頭?
就我認為,沒這個必要,因為他一點好處都沒有,
反而會帶來不必要的困擾,常常會看到那種宣告完了,
就再也不用他的變數,因為你並不是為了用他而宣告他,
而是覺得等一下會用,但寫了幾行程式碼之後,就把他忘得一乾二淨了,
但這並不是最惹人厭煩的,
試從以下這種角度思考:
假設函數有 20 行程式碼,我在第一行便宣告了一個變數,
這代表接下來的 19 行程式碼都看得見他,
即使他們一點關系都沒有,如果這中間又做了什麼處理,
要知道這個變數最終的結果,或者這變數會影響什麼,
你都無法忽略這 19 行程式碼,
那如果是在第 10 行宣告呢?
這表示前 10 行程式和這變數一點關系都沒有,
你只要關心剩下來的 10 行程式,多開心ㄚ。
也許你會說,那全域變數怎麼辦,但,別忘了,我這裡說的是函數中的區域變數,
既然談到了全域變數,那就來探討一下全域變數,
就我的觀點,是能不用就不用,從上面的角度思考,
假設程式有 1000 行,我在第一行便宣告了一個變數,
這表示接下來的 999 行程式碼都可以看到他,
方便是方便,但這也表示如果這個變數有問題,
你得看完這 999 行程式碼,也許你又會說,
可我只有在一兩個地方用到他,所以其實我只要看那一兩個地方,
除非你的程式很小,一般情況,你會很快的忘了你只有在一兩個地方用過他,
更甚者在多人開發的情況下,沒人會知道只在一兩個地方用他,
甚至有人還會參一腳,把他拿去用,而這些情況都會讓你的程式耦合度變高,
所以,我主張,變數的能見範圍,最好是夠用就好,
像 Code Complete 書上說的,在最接近第一次使用他的地方宣告他即可,
別再偏執的把區域變數都集中在一塊宣告了。
PS. 全域變數,如果真的要用,那還是集中在一起比較好,
因為你可能會想知道他們各自的初始值是什麼,
但,聽我個忠告,能不用就別再用他會對你比較好。
沒有留言 :
張貼留言