ユーザ定義関数
ユーザ定義関数に関して、
独自の関数を定義することが可能なのですが、
これもCと同じ感じで記述して行きます。
ユーザ定義関数を作るには、事前にプロトタイプ宣言をする必要があります。
#import <Foundation/Foundation.h> void messagePrint(NSString *message); ← プロトタイプ宣言 int main(int argc, const char * argv[]) { messagePrint(@"HelloWorld"); ← 関数の呼び出し return 0; } ユーザ定義関数 ↓ void messagePrint(NSString *message) { NSLog(@"%@", message); }
プロトタイプ宣言は、戻り値の型と関数名と引数で宣言します。
これを記述しないとコンパイルエラーになります。
それと、変数のスコープについても書いておきます。
関数内で、定義した変数は、関数内でしか使用できません。
関数の外部で、定義した変数を関数内で使用できるスコープもあります。
関数の外部で、定義した変数は、グローバルスコープになります。
#importvoid messagePrint(); NSString *message = @"HelloWorld"; ← グローバル変数 int main(int argc, const char * argv[]) { messagePrint(); return 0; } void messagePrint() { NSLog(@"%@", message); }
ちなみに、スコープは、これ以外にもあって、
Objective-Cは、関数内に入れ子に何らかの処理を記述することができます(表現が正しいか不明)。
ブロックと呼ばれます。
ブロックは、関数内に{}で囲んだ部分の処理のことを言います。
ブロックを入れ子にすることもできます。
#importvoid messagePrint(NSString *message); int main(int argc, const char * argv[]) { NSString *msg = @"AAA"; { NSString *msg = @"BBB"; messagePrint(msg); { NSString *msg = @"CCC"; messagePrint(msg); } } messagePrint(msg); return 0; } void messagePrint(NSString *message) { NSLog(@"%@", message); }
基本的に、ブロック内で、宣言した変数は、ブロック内でしか扱えないです。
ただし、関数内で、定義した変数(ブロックが記述さている箇所より前で宣言されているもの)
などは扱えます。
それと、ブロックを入れ子にした場合は、上位のブロック内で、宣言されている変数に関しても
扱えます。