對初學者來說,objective-c存在了很多令人費解的寫法,實際上他們是非常優雅的。
程式員寫的最多的就是函數以及調用自己寫的或者別人寫的函數。本文就從函數的角度來看下objective-c的優雅之處。
C#和objective-c同屬於c系列語言。讓我們先看下C#的函數定義和調用,做個對比。
C#函數的定義:
public void doIt(string actorName, string movieName, int timesSeen)
{
Console.Write("{0} is my favorite actor in the movie {1}, I saw it {2} times.", actorName, movieName, timesSeen);
}
函數的調用:
Class1 objMovie = new Class1();
objMovie.doIt("萊昂納多·迪卡普裡奧", "盜夢空間", 120);
在讓.net程式員看下objective-c的定義:
- (void) doIt:(NSString *) actorName movieName: (NSString*) value timesSeen: (int)times {
NSLog(@"%@ is my favorite actor in the movie %@, I saw it %i times.",actorName, value, times);
}
如果你第一次看objective-c,肯定會琢磨不透上面的代碼,懷疑是不是寫錯了。
對於上面這個函數的定義:
1、'-'表示這個函數是執行個體函數(類似非靜態函數),'+'表示這個函數是類函數(類似靜態函數)
2、(void)表示這個函數沒有傳回值。
3、函數名是'doIt: movieName: timesSeen:',而不是'doIt'
4、參數用空格隔開
5、參數類型寫在括弧中
6、參數分內部參數和外部參數,如電影名稱,內部參數是:value,外部參數是:movieName
7、函數的一個參數沒有外部參數的名稱,有內部參數名。如:actorName。
調用:
從上面代碼可以看出除了第一個參數,其餘的參數都可以加上外部參數名稱用於區別。
從上面可以看出objective-c和C#區別很大,實在會令.net程式員費解。objective-c函數設計的優雅之處在於即有內部參數名又有外部參數名,可以不用在再內部定義變數來存放函數的參數。
總結:本文是對objective-c函數學習的一個簡單總結。