2.3 函數(shù)的本地參數(shù)與外部參數(shù)

如果我們有其他語(yǔ)言的編程經(jīng)驗(yàn)说莫,但是沒有使用過外部參數(shù),看到swift的用法應(yīng)該會(huì)感覺有些奇特的膝蜈,我們首先看看什么是本地參數(shù),什么是外部參數(shù)熔掺。

1饱搏、什么是本地參數(shù)

func calArea(radius: Double,pi: Double) -> Double {
   let area = radius * radius * pi
   return area      
}

當(dāng)我們?cè)诙x函數(shù)calArea的時(shí)候,我們?cè)趨?shù)列表里面定義了參數(shù) radius與pi置逻,然后我們便可以在方法體內(nèi)部使用這兩參數(shù)了推沸,這個(gè)時(shí)候,radius券坞,pi就是本地參數(shù)(在本地使用的意思)鬓催。

2、什么是外部參數(shù)

var area = calArea(3.14,pi: 3.14)

當(dāng)我們調(diào)用函數(shù)calArea的時(shí)候恨锚,我們給第二個(gè)參數(shù)指定了參數(shù)名稱pi宇驾,這個(gè)時(shí)候pi就是外部參數(shù)(當(dāng)外部調(diào)用的時(shí)候使用的名字)

是不是更疑惑了?pi到底是內(nèi)部參數(shù)還是外部參數(shù)猴伶?其實(shí)這個(gè)時(shí)候內(nèi)部參數(shù)和外部參數(shù)恰巧同名了课舍,如果我們?cè)诙x函數(shù)的時(shí)候沒有同時(shí)明確的指出外部參數(shù)和內(nèi)部參數(shù),那么swift會(huì)認(rèn)為他挎,內(nèi)部參數(shù)與外部參數(shù)同名筝尾,此時(shí)swift是這樣看待函數(shù)calArea的。

func calArea(radius: Double,pi pi: Double) -> Double {
   let area = radius * radius * pi
   return area      
}

這一次calArea的pi參數(shù)被指定了兩次办桨,第一次指定的是外部參數(shù)筹淫,第二次指定的是內(nèi)部參數(shù),如果我們沒有指定外部參數(shù)崔挖,那么swift會(huì)自動(dòng)認(rèn)為外部參數(shù)與內(nèi)部參數(shù)同名贸街。當(dāng)然我們可以為它們分別指定名稱。

func calArea(radius: Double,external_pi pi: Double) -> Double {
   let area = radius * radius * pi
   return area      
}

這次我們把第二個(gè)參數(shù)的外部名稱定義為external_pi狸相,那么我們調(diào)用calArea的時(shí)候薛匪,就應(yīng)該這樣了

var area = calArea(3.14,external_pi: 3.14)

3、為什么需要外部參數(shù)

如果沒有外部參數(shù)的幫助,如果我們讀到這樣的代碼,

var area = calArea(3.14,3.14)

甚至是這樣的

var rect = CGRect(10,10,10,10)

我們會(huì)不會(huì)很困惑脓鹃?在外部參數(shù)的幫助下逸尖,代碼的可讀性會(huì)有效的地提高。

var area = calArea(3.14,external_pi: 3.14)
var rect = CGRect(x:10,y:10,width:10,heigth:10)

我們加入外部參數(shù)之后,函數(shù)調(diào)用的參數(shù)意義就非常直觀的體現(xiàn)出來了娇跟,代碼的可讀性直接影響著代碼的可維護(hù)性岩齿,所以我們應(yīng)該使用外部參數(shù)來提高代碼的可讀性。

如果我們確實(shí)不需要外部參數(shù)苞俘,那么我們可以這樣定義函數(shù)盹沈,讓編譯器來忽略掉外部參數(shù)。

func calArea(radius: Double,_ pi: Double) -> Double {
   let area = radius * radius * pi
   return area      
}

我們可以在外部參數(shù)的位置上 加一條下劃線_,下劃線我們?cè)谡f模式匹配的時(shí)候就見過它了吃谣,它表示:忽略它乞封。這時(shí)候我們調(diào)用calArea的時(shí)候就不需要為第二個(gè)參數(shù)指定外部參數(shù)了。

var area = calArea(3.14,3.14)

當(dāng)然岗憋,除非你有非常充分的理由不使用外部參數(shù)肃晚,不然最好還是帶上它吧。

4仔戈、第一個(gè)參數(shù)為啥在調(diào)用的時(shí)候沒有指定外部參數(shù)关串?

在我們沒有顯示的用下劃線忽略外部參數(shù)的情況下,swift要求监徘,在函數(shù)調(diào)用時(shí)晋修,從第二個(gè)參數(shù)開始,必須要使用外部參數(shù)凰盔。swift默認(rèn)是忽略掉第一個(gè)參數(shù)的外部參數(shù)的飞蚓。

注 從swift3開始,第一個(gè)參數(shù)的特殊待遇就會(huì)被取消了廊蜒,就是說swift3以后函數(shù)調(diào)用時(shí),每個(gè)參數(shù)都需要外部參數(shù)溅漾。

swift特殊對(duì)待了第一個(gè)參數(shù)山叮,很重要的原因是兼容oc,oc推薦函數(shù)應(yīng)該像這樣命名

var person = findByName("xiaoming")

findByName這樣的命名方式添履,已經(jīng)把第一個(gè)參數(shù)的意義囊括進(jìn)來了屁倔,如果我們?cè)谡{(diào)用的時(shí)候,再次指明外部參數(shù)的話暮胧,就顯得啰嗦了锐借。

var person = findByName(name: "xiaoming")

因?yàn)閛c推薦我們使用這樣的命名方式,所以它默認(rèn)的忽略了第一個(gè)參數(shù)的外部參數(shù)往衷。當(dāng)然钞翔,從swift開始,這一切都將過去了席舍。以后所有的參數(shù)都將受到平等的對(duì)待了布轿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汰扭,更是在濱河造成了極大的恐慌稠肘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝毛,死亡現(xiàn)場(chǎng)離奇詭異项阴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笆包,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門环揽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人色查,你說我怎么就攤上這事薯演。” “怎么了秧了?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵跨扮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我验毡,道長(zhǎng)衡创,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任晶通,我火速辦了婚禮璃氢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狮辽。我一直安慰自己一也,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布喉脖。 她就那樣靜靜地躺著椰苟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪树叽。 梳的紋絲不亂的頭發(fā)上舆蝴,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音题诵,去河邊找鬼洁仗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛性锭,可吹牛的內(nèi)容都是我干的赠潦。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼草冈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼祭椰!你這毒婦竟也來了臭家?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤方淤,失蹤者是張志新(化名)和其女友劉穎钉赁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體携茂,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡你踩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讳苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带膜。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸳谜,靈堂內(nèi)的尸體忽然破棺而出膝藕,到底是詐尸還是另有隱情,我是刑警寧澤咐扭,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布芭挽,位于F島的核電站,受9級(jí)特大地震影響蝗肪,放射性物質(zhì)發(fā)生泄漏袜爪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一薛闪、第九天 我趴在偏房一處隱蔽的房頂上張望辛馆。 院中可真熱鬧,春花似錦豁延、人聲如沸昙篙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓢对。三九已至,卻和暖如春胰苏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醇疼。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工硕并, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秧荆。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓倔毙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乙濒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陕赃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容