※ 引述《LaPass (LaPass)》之銘言:
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: int brain = 1/0;
: 補充說明(Supplement):
: 自己學過Java、C#、PHP、javascript,學程式語言的速度算快
: 因為被公司要求寫iPhone App的關係,現在開始學objective c
: 稍微找了一下資料,知道objective c是建立在C的基礎上去擴充的
: 因此想先去把C給看一看,以及補一補,像是指標之類的,低階比較會用到的概念
: 於是我找了C Primer來看......
: 可是快速翻完後..... 發現少了非常多的東西。
: 例如.....
: 沒throw new exception之類的東西
: 沒class、interface、物件導向之類的
: 沒Overload.....
: 沒有委派、函數指標、反射、Lamba這種東西
: C Primer裡面看不到跟執行緒有關的章節.....
: 但是我想問,C寫複雜的東西時,到底該怎麼設計?
輪到我回答你這個問題,來報答你了.
程式語言的威力,有一些語言內容直接涵蓋平台的許多東西,而有一些語言則是只掌握
最核心的部份.
要說威力誰強誰弱: 或許你認為.net把目前各種應用都做了基本元件,使它的程式庫
能涵蓋所有的需求,算是威力強大. 但是缺點就是如果需要一種過去沒做過的基本應用,
就要由微軟改平台. 至於另外一些語言,當它們可以定義新的語法,使語言本身的內容
擴充,這是另外一些人所認為的威力強大.
C語言真的是如你所說的,要什麼沒什麼,因為是相對比較原始的語言.
關鍵詞才30幾個,當然是如果要做什麼東西就是多做一些工,或者沿用一些設計良好的
函式庫.
以 C 來說,也不必談像.net之前的DLL地獄及.net和Java的那些元件內容.
那些元件部份都是平台上的議題. 而 C 所攻的是更早年的議題是語言的精簡,
格式自由,以及語言的跨平台性.
而 Objective-C 雖然是從 C 延續出來的,但並不表示你需要從 C 這邊開始搭基礎.
二者的基礎應該不是一樣的.
-----< 分格線 >------------------------
來做一點類似比較語言學的研究嘛, C 語言:
1. 沒有 throws exception: C 仍是把bug狀態混雜在一起,也就是說,如果你發現
軟體有個例外情況使程式當掉,意思是程式執行走到某一個超限的狀態,解決辦法
是找到發生的位置然後在那個位置之前,找到涵蓋那些狀態的handles,調整到
不會讓程式狀態再跑超過那個限制範圍.
2. 沒有 class, interface: 沒錯. 因為風格就只是一般的程式語言. 不過,
搭建起各種抽象資料型態仍可以使用得不錯. 至於 interface 應該算是有基本的,
對於 *.h 標頭檔定義的介面,也有一份獨立的實作,只是不見得都可以改寫實作而已.
3. 以下刪除: (感謝uranusjr指正)
C 語言有 overloading: 二個函數,只有當名稱相同,參數數目相同,而且參數型態
依序皆相同,才算是二個函數名稱互相衝突. 所以,可以定義下列函數名字一樣
的幾個函數:
int a(char* b);
int a(int b);
int a(int b, int c);
這樣子應該也算是有機會做出多型的用法.
以下更正:
C 語言沒有 overloading: 所以要靠其他程式方式來實現overloading,見以下連結
http://stackoverflow.com/questions/479207/function-overloading-in-c
4. C 語言可以做函數指標: 所以,既然做得出函數指標,應該也可以做得出類似委派
的事情. (此句刪除) 但是lambda方面,基本做不到,因為 C 語言的執行方式是
strict, eager.
5. 行程和執行緒: C 語言可以引用函式庫做 fork, 就可以做多行程. 另外也有
thread方面的函式庫.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.224.243
→
04/28 10:02, , 1F
04/28 10:02, 1F
→
04/28 10:24, , 2F
04/28 10:24, 2F
→
04/28 10:26, , 3F
04/28 10:26, 3F
→
04/28 10:27, , 4F
04/28 10:27, 4F
→
04/28 10:27, , 5F
04/28 10:27, 5F
→
04/28 10:28, , 6F
04/28 10:28, 6F
※ 編輯: yauhh 來自: 59.112.224.243 (04/28 10:42)
推
04/28 12:57, , 7F
04/28 12:57, 7F
→
04/28 17:43, , 8F
04/28 17:43, 8F
→
04/29 04:21, , 9F
04/29 04:21, 9F
→
04/29 04:24, , 10F
04/29 04:24, 10F
推
05/03 02:54, , 11F
05/03 02:54, 11F
討論串 (同標題文章)