そこの明確な、実用的な用途はあるNULL
(またはnil
、またはNil
、またはnull
、またはNothing
ポインタがまたはそれが希望する言語で呼ばれているものは何でも)。
例外システムを持たない言語(Cなど)では、ポインターを返す必要がある場合、エラーのマークとしてNULLポインターを使用できます。例えば:
char *buf = malloc(20);
if (!buf)
{
perror("memory allocation failed");
exit(1);
}
ここでNULL
は、からの戻り値malloc(3)
が失敗のマーカーとして使用されます。
メソッド/関数の引数で使用する場合、引数のデフォルトの使用を示すか、出力引数を無視できます。以下の例。
例外メカニズムを備えた言語であっても、特に例外処理が高価な場合(Objective-Cなど)には、ソフトエラー(つまり、回復可能なエラー)の表示としてNULLポインターを使用できます。
NSError *err = nil;
NSString *content = [NSString stringWithContentsOfURL:sourceFile
usedEncoding:NULL // This output is ignored
error:&err];
if (!content) // If the object is null, we have a soft error to recover from
{
fprintf(stderr, "error: %s\n", [[err localizedDescription] UTF8String]);
if (!error) // Check if the parent method ignored the error argument
*error = err;
return nil; // Go back to parent layer, with another soft error.
}
ここで、ソフトエラーは、プログラムがキャッチされない場合でもクラッシュすることはありません。これにより、Javaのようなクレイジーなtry-catchがなくなり、ソフトエラーが中断されないため、プログラムフローをより適切に制御できます(そして、残りのいくつかのハード例外は通常、回復できず、キャッチされません)