Effective C# -01偏好隱含型別的區域變數

Cloud's Cloud
3 min readDec 16, 2017

--

Effective C# -01偏好隱含型別的區域變數

1. 效率問題

相信很多人都會類似的質疑,使用var來進行宣告的話,是一種「動態」的方式來對變數進行宣告,會增加電腦的計算運行,影響效能等等。若將型別宣告好應該可以加快效能的運行。

那麼就讓我們來實驗一下吧!

分別以int 與 var 宣告1000的變數,來看看執行時間的差距。

(https://goo.gl/3N7j38)
以1000個變數的宣告時間上來說,反倒是使用var方式速度較為快點,但考慮到電腦處理速度日新月異,比較這時間差異似乎意義不大,但這也證明了使用var並不會有效率上的問題。

重點來了,var 不是幫我們動態定義變數,

而是幫我們找出初始化陳述右邊的變數型態,由編譯器幫你宣告型別。

2. 可讀性

或許很多人會覺得使用var來宣告程式,會不清楚究竟宣告了甚麼樣型態的變數。

這部分來舉個三個例子。

一、簡單宣告變數

上述兩個簡單的範例,均可以簡單知道變數所代表的型態是什麼樣的類別,因此有無詳細定義出變數型態並不會過於影響可讀性。

二、宣告特定的類別

雖然無法得知變數內容,但可以從初始化陳述右邊的物件名稱得知型態。因此對於可讀性來說,影響也不大。

三、無法直接看出類別

上次兩個例子中,我們可以看到在Factory中,大致上可以清楚知道所生成的物件型態。

但後者exampleResult,雖然var很方便的幫我們定義好變數的型態,但確實的型態卻無從得知,那如果是在極端一點的例子呢?

對此來說,的確使用var會讓我們對於result不佳,那如果我們嘗試將變數result修改一下呢?

修改變數之後,大約可以猜想,應該是一個數字型態的參數,但實際的型別還是依據DoSomeWork的回傳型別而定。

對於此【Effective C#】所給出的建議

「更好的變數名稱可以給開發者更好的提示,但還是希望程式的命名可以將回傳什麼東西表達更好」

對於var的可讀性,雖然我們能從一些變數名稱與型態等等,大約猜想出所屬的類別型態為何,還若命名不好或過於複雜的情況,都會讓人有混淆的情況,因為實際產生型別的為編譯器,而所產生的類別不一定與我們這些開發者所想的一樣。因此會有開發者與編譯器對於型別產生不同的認知。

--

--

Cloud's Cloud

菜鳥工程師,把所學分享於此,願原力與你同在