10 Matlab 函數(shù)與代碼風(fēng)格

函數(shù)

函數(shù)亚享,本質(zhì)上是一種可復(fù)用的代碼〔t稼,F(xiàn)實(shí)生活中忽洛,有大量的工作都是重復(fù)的,變化的只是其中一小部分弛姜。

舉個例子脐瑰,假如要你計算 “ 1+2+3+4+5+6+7+8+9+10 ”妖枚,最簡單的方法當(dāng)然是直接在Matlab命令行中敲出這個式子廷臼。
這樣的方法沒有復(fù)用性,下次計算還需要重新輸入一遍這個式子绝页。如果荠商,需要計算100個,1000個或更多的數(shù)字之和续誉,就沒有辦法這樣輸入了莱没。

顯然,這是一個重復(fù)的工作酷鸦,變化的只是終點(diǎn)(如累加到100)饰躲。一個可以復(fù)用的程序代碼是只要告訴計算機(jī)終點(diǎn),它就自動完成這樣的累加運(yùn)算臼隔。函數(shù)就能實(shí)現(xiàn)這樣的一個功能嘹裂。

還用剛才的例子:用術(shù)語 “ 參數(shù) ” 來指代 “ 終點(diǎn) ”,術(shù)語 “ 返回值 ” 指代最終的結(jié)果摔握。生活經(jīng)驗(yàn)告訴我們寄狼,參數(shù)與返回值都可以有多個。

現(xiàn)在氨淌,我們看看在Matlab中怎樣實(shí)現(xiàn)函數(shù)(也叫聲明一個函數(shù))泊愧。還用這個例子伊磺,先把這個函數(shù)的代碼寫出來,然后逐條解釋删咱。

1 function result = sum ( n )
2 result = 0;
3 for i = 1:n 
4     result = result + i;
5 end
6 return;

第一行中屑埋,有一個關(guān)鍵字 function, 它的作用是聲明這之后一直到 return 這部分的代碼都是屬于這個函數(shù)的代碼塊。

result 是這個函數(shù)要返回的值腋腮,這個函數(shù)里面雀彼,累加所得到的結(jié)果由 result 這個變量保存。

sum 是這個函數(shù)的名字即寡,n 是函數(shù)的參數(shù)徊哑。參數(shù)的細(xì)解釋起來也比較復(fù)雜,我們實(shí)用至上聪富,把它理解成一個可復(fù)用的代碼中需要變化的內(nèi)容就可以了莺丑。

例如,每次都要求從1到某個數(shù)的累加和墩蔓,變化的就是這個數(shù)梢莽,每次只需要告訴程序從1累加到幾就可以了。這個值通過參數(shù)傳遞給函數(shù)奸披。

在調(diào)用函數(shù)的時候昏名,只需要在命令行中原樣輸入函數(shù)名和參數(shù)就可以(需要函數(shù)腳本在 Matlab 的工作目錄下)。

當(dāng)然阵面,一個函數(shù)的返回值可以有多個轻局,參數(shù)也可以有多個。如果一個函數(shù)的返回值有多個样刷,則需要用中括號將返回值括起來仑扑。多個不同參數(shù),用逗號隔開即可置鼻。

例如镇饮,將上面的函數(shù)改個功能,既能得到累加的值箕母,也能得到累乘的結(jié)果储藐,還可以設(shè)定從 1 到 n 的步長。顯然嘶是,這里函數(shù)返回兩個值钙勃,分別為累加值和累乘積。參數(shù)也有兩個俊啼,分別為 n 和步長肺缕。因此,第一行就可以改寫成:

function [ result_sum, result_multi ] = sum_multi ( n,step )

請注意同木,調(diào)用函數(shù)的時候需要原樣調(diào)用浮梢。顧名思義,這是要求在調(diào)用函數(shù)的時候要按函數(shù)定義的形式調(diào)用彤路。雖然是原樣調(diào)用秕硝,但是返回值變量,我們可以自己定義洲尊。例如調(diào)用 sum_multi 函數(shù)應(yīng)該在命令行中輸入:

[ result1, result2 ] = sum_multi ( 10, 2 )

上一條命令的意思是远豺,調(diào)用sum_multi函數(shù),其中坞嘀,n = 10, step = 2. 意思就是從1到10躯护,每隔兩個數(shù)字取值。得到的累加結(jié)果保存到變量 result1中丽涩,而累乘得到的結(jié)果保存到 result2 中棺滞。

那如果調(diào)用這個函數(shù),但是不想要累加的結(jié)果矢渊,我只想要這個函數(shù)返回的累乘結(jié)果继准。應(yīng)該怎么辦?可以用~代替你不想要的返回值矮男。這樣調(diào)用方式就變成了:

[ ~, result ] = sum_multi ( 10, 2 )

可以把最后一行的 return 理解成一個標(biāo)記符移必,它標(biāo)志著函數(shù)的代碼塊結(jié)束。它也定義了一些變量的作用范圍(也稱作用域)毡鉴。

在這里順便提一下變量的作用域崔泵。

一般說來,在一個程序的腳本文件中眨补,不允許有重復(fù)的變量名管削。但如果一個變量的作用范圍是有限的倒脓,那么在超出這個限制的范圍內(nèi)撑螺,變量名就可以重復(fù)了。

這個變量的作用范圍就是一個變量的作用域崎弃。它的規(guī)則也有比較復(fù)雜的情形甘晤。仍然實(shí)用至上,到目前為止饲做,我們只需要知道线婚,在函數(shù)中,變量的作用范圍是從 function 到 return 中間盆均。

大家可以自己嘗試著將函數(shù) sum_multi 寫出來并試著用不同的方式調(diào)用它塞弊。

代碼風(fēng)格

有時候,自己寫了一段代碼,回過頭再來看游沿,發(fā)現(xiàn)居然看不懂了饰抒。為了交流方便,也為了方便代碼維護(hù)诀黍,就要求大家遵循一定的規(guī)范袋坑,使得大家都能讀懂代碼。這些規(guī)則眯勾,有很多版本枣宫。這里只介紹幾條核心要求:

  • 勤用注釋
    注釋包括程序功能、函數(shù)功能吃环、用法的說明也颤,也包括對變量名、關(guān)鍵代碼行的注釋郁轻。
    基本的原則是為了維護(hù)方便歇拆,也為了讓別人能看明白你寫的代碼。
    使用 % 符號在代碼中添加注釋范咨,可以在程序的任何位置中出現(xiàn)注釋故觅。
% 求矩陣元素中的和
function y = sum ( x ) % y是函數(shù)的返回值,返回一個整數(shù)

上例中渠啊,第一個注釋是解釋這個函數(shù)是干什么的输吏。第二行里面的注釋是簡單說明了返回值 y 的數(shù)據(jù)類型。

  • 盡可能地將程序?qū)懙渺`活替蛉,方便改動贯溅。
    這意味著寫一個程序要盡可能地考慮到不同的應(yīng)用場景,或者是不同的設(shè)備環(huán)境躲查。當(dāng)然它浅,這個要求相對較高,可以在慢慢熟練以后逐漸熟悉镣煮。

  • 縮進(jìn)
    雖然 matlab 沒有像 python 一樣強(qiáng)制要求縮進(jìn)姐霍。但是為了讀起來方便,要善用縮進(jìn)讓代碼可讀性更強(qiáng)典唇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镊折,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子介衔,更是在濱河造成了極大的恐慌恨胚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炎咖,死亡現(xiàn)場離奇詭異赃泡,居然都是意外死亡寒波,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門升熊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來影所,“玉大人,你說我怎么就攤上這事僚碎『锩洌” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵勺阐,是天一觀的道長卷中。 經(jīng)常有香客問我,道長渊抽,這世上最難降的妖魔是什么蟆豫? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮懒闷,結(jié)果婚禮上十减,老公的妹妹穿的比我還像新娘。我一直安慰自己愤估,他們只是感情好帮辟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玩焰,像睡著了一般由驹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昔园,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天蔓榄,我揣著相機(jī)與錄音,去河邊找鬼默刚。 笑死甥郑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荤西。 我是一名探鬼主播澜搅,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼皂冰!你這毒婦竟也來了店展?” 一聲冷哼從身側(cè)響起养篓,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤秃流,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柳弄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舶胀,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡概说,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嚣伐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糖赔。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轩端,靈堂內(nèi)的尸體忽然破棺而出放典,到底是詐尸還是另有隱情,我是刑警寧澤基茵,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布奋构,位于F島的核電站,受9級特大地震影響拱层,放射性物質(zhì)發(fā)生泄漏弥臼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一根灯、第九天 我趴在偏房一處隱蔽的房頂上張望径缅。 院中可真熱鬧,春花似錦烙肺、人聲如沸纳猪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兆旬。三九已至,卻和暖如春怎栽,著一層夾襖步出監(jiān)牢的瞬間丽猬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工熏瞄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脚祟,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓强饮,卻偏偏與公主長得像由桌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邮丰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354