🐥

C 言語で Null Object パターン

2021/09/01に公開

Null Object パターン とは

デザインパターンの 1 つです。 Null Object パターンの意味は以下 2 つあるようです

  • NULL のこと。何も刺していないオブジェクトのこと。
  • 何もしないオブジェクトのこと

ググると後者の実装のことを言ってることが多いようです。前者は C 言語においてはまさに NULL のことですが、前者の意味で Null Object パターンを実装している事例は見かけませんでした。

実装

ここでは後者の意味の Null Object パターンを C 言語で実装してみました。

#include <stdio.h>

typedef void (*message)(void);

void hello_message(void){ puts("hello"); }
void null_message(void){ ; }

message get_message(int n)
{
  if(n){ return hello_message; }
  else { return null_message; }
}

int main(int ac, char** av)
{
  get_message(1)();
  get_message(0)();
  return 0;
}

C 言語には継承は無いので何もしない処理を実装しただけです。関数ポインタとして実装してしまえばインターフェースを統一するだけで汎用的に使えます。 C 言語で実装する意味はあるのかというとよく分かりませんが。

コンパイルして

% gcc nullobject.c

実行します。

% ./a.exe
hello

Discussion