iT邦幫忙

DAY 4
2

軟體路上不孤單,給我SSD,學習之路狂飆系列 第 4

軟體路上不孤單Day04-觀念真的很重要PartI

我相信寫C#的人,應該還是有很多人對於C#的觀念不是很熟悉,就是會用而已!因為,C#實在是太方便了,很容易就可以上手。以我來說,我本來是寫Java的,後來因為工作關係,改寫C#,但也是到了最近我才明白一些觀念。但是,這些觀念真的很重要。因為,觀念若正確會少走很多冤枉路,也會較容易google到所需要的資料。若沒有正確的觀念,可能問題出現了,找也找不出來。
現在很多軟體開發的人員用的程式語言不是JAVA就是C#或C++,當然還有別的!但這三種我覺得應該是最多的吧!!

舉例來說,我相信寫C#的人,應該還是有很多人對於C#的觀念不是很熟悉,就是會用而已!因為,C#實在是太方便了,很容易就可以上手。以我來說,我本來是寫Java的,後來因為工作關係,改寫C#,但也是到了最近我才明白一些觀念。但是,這些觀念真的很重要。因為,觀念若正確會少走很多冤枉路,也會較容易google到所需要的資料。若沒有正確的觀念,可能問題出現了,找也找不出來。

例如:在.Net中有Value Type(數值型別)變數,也有Reference Type(參考型別)變數。但是,有多少人會知道這兩者差在那邊呢?我相信應該不多,因為,不知道差別照樣可以把程式寫好,照樣可以完成工作達到目的。那應該會有人會問說,既然如此,我為何需要知道。那是因為,現在的電腦普遍效能都很好,所以才會沒感覺。但是,如果哪天遇到效能的問題,不知道這兩者的區別,可能這個問題恐怕就要石沈大海了。

舉例來說 Value type 與 Reference type根據MSDN上的解釋:
Value type : 存的是自己的資料。
Reference type: 存的是參考,而這個參考是指向真實的資料位置。

而這兩種會透過boxing(裝箱)和unboxing(拆箱)操作來做互相轉換。然而在boxing與unboxing之間就會多耗掉一些效能,如果可以避免,必然會提高許多效能的。因為,Value type 是儲存在 stack、而Reference type 則是儲存在heap上。(Stack的速度較快,但容量較少;heap速度較慢,但容量較大)

又例如:String 與 StringBuilder,以下面兩個Function來說:

String CombineString1(String s1, String s2, String s3) { 
    String result = s1;
    result += s2;
    result =+ s3;
    return result;
}
String CombineString2(String s1, String s2, String s3){
    StringBuilder result = new StringBuilder();
    result.Append(s1);
    result.Append(s2);
    result.Append(s3);
    return result.ToString();
}

CombineString1 與 CombineString2 做的事情是一樣的,但是其效能就是完全不一樣。如果要結合的字串少,那還感覺不太出來,但是這個Function - CombineString1被使用的次數如果越多,那整體效能就會越差。因為字串在.NET中具有不可修改的特性,也就是說一旦初始化後就不能在被修改,所以每次更改都會強制建立一個新的字串物件。不過StringBuilder就不一樣了,它在內部有一個private的String 成員,並且只有在ToString()這個方法被呼叫時,才會將字串塞給這個 private 的 string成員。因此整個效能就大大的提升。

所以,雖然條條大路通羅馬,各種方式都可以達到我們所想要的功能,但是,如果在學習一個(程式)語言的時候,除了基本必的(常用的API)之外,其他的單字(也就是API)可以需要的時候在去查即可。但是,這個語言的基本特性,還有一些重要的觀念一定要先知道,否則真的會遇到很多很奇怪的問題,然後自己也搞不懂為什麼。

文章導覽
全系列
上一篇
下一篇


上一篇
軟體路上不孤單Day03-每天都要蹲馬步
下一篇
軟體路上不孤單Day05-插曲
系列文
軟體路上不孤單,給我SSD,學習之路狂飆31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言