第34章 老君煉丹記(下)
- 程序媛養成計劃
- 任煦之秋
- 2079字
- 2020-05-07 22:01:22
「函數?」
我和小弦子兩臉懵逼,對這個從來沒有聽說過的詞匯充滿了疑問。
「也別想太復雜,函數其實就是實現了某個功能的代碼段。當我們要使用這個功能的時候,只需要調用函數就行了,而不是再寫一段相似的代碼。就好比說故事中的煉丹爐,太上老君在煉丹之前只需要把煉丹相關的程序設定好就行了,而不是每次都自己動手,去進行繁瑣復雜的事情。
再舉個簡單的例子,奶奶使用電飯煲煮飯你看到過吧?現在煮飯只需要三個步驟:淘米摻水、上電、按煮飯按鈕。在老爹小時候,煮飯可不是一件容易的事情,你得自己先燒一鍋水,等水開了之后淘米,倒進鍋里,然后一邊燒火保持鍋內的水沸騰,一邊還要頻繁攪拌,不讓米粒沉降在鍋底。
等到米粒五六分熟的時候,還要用筲箕將它們瀝干,最后再用甑子把半生夾熟的米粒蒸熟。
而現在煮飯這個功能已經電飯煲實現了,所以我們現在煮飯只需要調用電飯煲的煮飯功能就行了,快捷又方便。
函數的本質作用就和煉丹爐、電飯煲一樣,是實現了某種功能代碼段,至于要實現什么功能,這就要靠我們程序員來定義了。」
有兩個例子做分析論證,我慢慢理解了為什么要使用函數,以及函數是什么。既然我都明白了,小弦子肯定也早就悟得其真諦。
「既然已經知道why和what了,那么接下來就應該學習how,如何使用?其實不管是學習編程也好,還是學習其他的東西,你只要按照這個套路來,基本上不會出岔子。
在學習如何使用的過程中,我們依然用煉丹爐和電飯煲這兩個例子來說明。
要使用函數,那咱們得先定義函數。你要煉丹,沒有煉丹爐怎么煉?煮飯沒有電飯煲怎么煮。所以我們如果要使用某個函數,必須得先定義。
當然了,不是所有函數都需要自己的定義,有可能別人已經給你定義好了,就像是printf()函數,這個是C語言函數庫,也就是開發C語言的那些科學家已經定義好了的,咱們直接拿來使用就行了。
你們想啊,咱們沒有電飯煲的時候總不能自己造一個吧,可以去商店里面買一個,因為別人已經造好了。
好了,閑話休提,言歸正傳。
要定義個函數,實現一個功能,你總得給它起個名字吧?雖然這個名字只要符合之前講過的其名法則即可,但是我們還是盡量讓它貼近功能。你看煉丹爐、電飯煲這兩個名字,人一聽就知道是用來干什么的。
起名可是頭等大事,不能含糊,名字起好了問題就解決一半了!當然這是不可能的,哪有那么便宜的事情。
接下來就是要完成這個功能,需要一些什么條件因素了。如果要煉丹,你總得準備草藥啊什么的吧?要煮飯總得要米、水這些東西吧。
當然了,也不絕對。你們看,按照理論上來說煉丹爐和電飯煲都還有一些不需要任何東西的功能,比如說給孫悟空煉火眼金睛的時候,不就什么都沒有放么?
然后就是這個功能要得到什么東西,你看,煉丹煉丹,最后得到的是仙丹,煮飯煮飯,最后得到的時候米飯。
所以我們的函數也可以得到一些東西,當然了也不是絕對的。如果煉丹爐就那么燒著玩兒,也不會得到仙丹是吧?
最后一步,就是具體功能的實現過程了,這個需要我們來做。
以上在C語言中都有它們專業的叫法,起的名字叫做函數名,需要的元素叫做參數,得到的結果叫做返回值。
上面的內容總結起來,一個函數的聲明格式如下:
返回值函數名稱(參數列表)
{
實現功能的代碼;
return 返回值;
}
其中有幾個地方需要注意返回值可以是某種具體數據類型,如byte、short、int、long、float、double、char這樣的基本數據類型,也可以是我們以后要學的結構體、枚舉等類型。如果一個函數沒有返回值,就需要聲明為void,這個單詞是『空』的意思。
同樣的,參數列表也可以是這些數據類型,如果有多個參數,則需要用英文狀態下的逗號隔開。若是沒有輸入參數,則也聲明為void。
最后說一下那個return,這個關鍵字會結束一個函數,如果在聲明函數的時候返回值不為void的話,這個時候return后面就必須跟聲明的返回值類型。」
聽著老爹講了一通,我完全不明所以。就連一向聰明絕頂的小弦子也是一頭霧水。
「我知道,這些概念聽來有些難以理解,那么我們用實際的代碼來說明一個函數的定義。」
老爹微微一笑,似乎我和小弦子的反應完全在他的意料范圍之內。
「嗯,首先我們來一個對兩個int型數值做加法的函數,假設函數名字叫做add,也就是加法的意思,表名我們這個函數是要做加法。
然后呢,我們這個加法函數需要兩個int型參數,分別是a和b,代表兩個加數。
最后咱們還要計算得到的結果返回出來。
那么,要實現這個函數,其代碼如下:
int add(int a,int b)
{
int sum = a + b;
return sum;
}
這樣我們就定義好了一個做加法的函數了。既然函數一定定義好了,接下來就是如何使用的問題了。
比如說我們要計算10+20的結果,那么就可以這樣:
int sum = add(10,20);
這樣add函數的返回值就會賦值給變量sum,這個時候sum里面的值就是30。」
「任叔叔,玥玥給我的教學文檔上說過,C語言里面給變量起名字的時候不能出現一樣的,現在add函數里面和外面都有一個名字叫sum的變量,這不是和你之前的說法互相矛盾么?」
小弦子不解地問道。
竟他這么一提問,我也意識到了這個問題。
「不錯不錯,看來你們果然對之前的知識掌握得不錯。我之所以會這樣寫,就是為了引出這個問題,如果你們沒有發現我也會主動拋出這個問題。
不管怎么樣,你們先在嘗試寫我剛才定義的函數,然后運行一下看看會不會報錯再說。」
老爹笑瞇瞇地說道。