php網(wǎng)站搭建環(huán)境搭建怎樣有效的做網(wǎng)上宣傳
為什么會有函數(shù)調(diào)用參數(shù)帶標簽的寫法?
ObjC函數(shù)參數(shù)形式與眾不同,實參前會加前綴,尤其參數(shù)很多的情況,可讀性很強。例如:
[person setAge: 29 setSex:1 setClass: 35]; 這種參數(shù)前面加前綴描述也被叫標簽(Label). 注意,要把標簽和函數(shù)簽名區(qū)分開,函數(shù)簽名是更大的名詞,包含函數(shù)名稱、參數(shù)的組合。當然,也可以對第二個之后的參數(shù)不加前綴,形如: [person setAge: 29 :1 : 35];
如果是C++代碼,參數(shù)很多,有時會記不清參數(shù)位置。
C#較新版本同樣引入了如上的類似ObjC的函數(shù)調(diào)用語法增強可讀性。
Swift函數(shù)調(diào)用的參數(shù)傳遞需要加前綴是否是冗余?
事實上,很少有編程語言函數(shù)調(diào)用傳參需要加參數(shù)前綴,ObjC和Swift遵循的規(guī)則是函數(shù)參數(shù)易讀原則,當一個函數(shù)有超過3個參數(shù)甚至更多,程序員可能不能直觀理解每個參數(shù)的意義,甚至參數(shù)位置用錯,加上前綴的調(diào)用方法反而更清晰可靠。
函數(shù)調(diào)用
函數(shù)調(diào)用的語法
大部分編程語言,在函數(shù)名后面加上括號(以及參數(shù))作為函數(shù)調(diào)用。
- C/ObjC/C++/Java/C#/Python 等均是如此。
不帶括號的函數(shù)名
- C/ObjC/C++ 語言單獨的函數(shù)名并不會調(diào)用函數(shù),例如 func; 只會計算函數(shù)地址,然后結(jié)束,沒有調(diào)用。
- Python 類似,不帶括號的函數(shù)名不會執(zhí)行函數(shù)。
函數(shù)參數(shù)
和普通變量聲明類似,函數(shù)參數(shù)類似于多個普通變量聲明。
參數(shù)形式
- 大部分編程語言的函數(shù)參數(shù)放在函數(shù)名緊隨的圓括號里,不同參數(shù)用逗號分隔。
C/ObjC/C++/Java/C#/Kotlin/Python 等均是此。
參數(shù)列表和逗號表達式
函數(shù)參數(shù)列表雖然以逗號分隔,但不是逗號表達式。即,函數(shù)參數(shù)里面的逗號一定不是逗號運算符,而是函數(shù)參數(shù)分隔。如果一定需要在函數(shù)參數(shù)用逗號表達式,用括號括起來。
聲明和調(diào)用類型不一致
- C語言函數(shù)有聲明和定義兩種形態(tài),在某些情況,可能出現(xiàn)函數(shù)聲明晚于函數(shù)調(diào)用,編譯器沒法知道真實的參數(shù)類型,會執(zhí)行默認的類型轉(zhuǎn)換。
- 例如先調(diào)用func(1.2),再定義void func(float f),編譯器會認為調(diào)用時傳入的是double類型變量1.2,但實際執(zhí)行參數(shù)是float,結(jié)果不如預期。
- Java/C#/Python不存在這種情況,編譯器或解釋器提前會獲取類型信息而不是延遲到調(diào)用時。
一些獨特的函數(shù)參數(shù)形式
- 經(jīng)典C語言將函數(shù)參數(shù)單獨聲明,類似 int f(a, b) float a, b; … 這種寫法已被摒棄。
- ObjC函數(shù)參數(shù)形式與眾不同,實參前會加前綴,尤其參數(shù)很多的情況,可讀性很強。例如:
[person setAge: 29 setSex:1 setClass: 35]; 如果是C++代碼,參數(shù)很多,有時會記不清參數(shù)位置。
當然,也可以對第二個之后的參數(shù)不加前綴,形如: [person setAge: 29 :1 : 35]; - C#新版本同樣引入了類似ObjC的語法增強可讀性。
- Kotlin 支持具名參數(shù),支持形如:形參1 = 實參1 這種形式。
show(name = "Alex", age = 29); - Python 提供的方式和Kotlin類似,被稱為關鍵字實參,例如:
函數(shù)原型:def show(name, age)
調(diào)用方式:show(age = 29, name = "Alex");
形參和實參
- 形式參數(shù)和實際參數(shù)不必要同名,C語言可以從匯編代碼看到,名字其實是地址或寄存器的代名詞,和代碼中的名字無任何關系。
- Parameter和Argument都是參數(shù),在很多場景二者沒區(qū)別。Wiki的說法是parameter表示形參,argument表示實參,這有點學院派了,仁者見仁智者見智。
隱式類型轉(zhuǎn)換
- 實參類型可以隱式轉(zhuǎn)換成形參,編譯器才不會報錯。
參數(shù)默認值
- C/ObjC 不支持默認參數(shù)。
- C++/Java/C#/Python/PHP 等均支持函數(shù)參數(shù)默認值,一般而言,默認值參數(shù)必須放在最后。
- Kotlin 默認參數(shù)不一定放在最后,它通過具名參數(shù)顯式指定參數(shù)。
若文章對您有幫助,歡迎關注 程序員小迷 。助您在編程路上越走越好!
微風不燥,陽光正好,你就像風一樣經(jīng)過這里,愿你停留的片刻溫暖舒心。
我是 程序員小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等編程技術的技巧經(jīng)驗分享),若作品對您有幫助,請關注、分享、點贊、收藏、在看、喜歡,您的支持是我們?yōu)槟峁椭淖畲髣恿Α?/p>