ジョーシキなんですかねぇ。
ライブラリのインタフェースを考えるとき、オンデマンド方式が好きです。
なんかの通信ライブラリを例にします。
オンデマンドでない場合:
1.初期化を呼ぶ
2.通信開始を呼ぶ
3.送信を呼ぶ
4.受信を呼ぶ
5.通信終了を呼ぶ
6.後始末を呼ぶ
オンデマンドの場合:
1.送信を呼ぶ(→通信未開始なら通信開始を内部で呼ぶ→未初期化なら初期化を内部で呼ぶ)
2.受信を呼ぶ
なんども非同期に処理を呼び出す場合、毎度毎度後始末までやる必要は無いわけでして。もしメモリを解放したいのであれば、
3.後始末を呼ぶ(→通信未終了なら通信終了を呼ぶ)
でいいじゃんか。というわけです。
このつくりになっておれば、後になってプロトコルが変更され、送信受信を1回ではなくて複数回繰り返すように変更しても、なんということはありません。
# 内部で通信用エンドポイントが保持されていると想像してください
# それを使いまわせない作りの罪深さ
1回ずつ後始末するのを自分で呼ぶ場合、そりゃもう大騒ぎなんですね。
それぞれの段階でエラーチェックがあり、エラーリターンがある。つまり多数の分岐があるわけです。
それを2回3回とコピペして作りこんでいったら、とんでもないことになります。
昔ダイヤルアップが当たり前だった頃、オートパイロットプログラムは、
・通信中で無ければダイヤル
という風に動作しました。もちろん、ダイヤルして通信状態にしてからオートパイロットを開始しても構わないのでしょうが、
それってどこがオートなの?
と誰もが思うはずです。
ライブラリのつくりもほとんどのばあい、オンデマンドで良い気がします。分かりやすい例外は、あらかじめ準備しておかないと処理に時間がかかってしまうものです。
大きなデータをあらかじめ読み込んでおく
しかし非オンデマンドのつくりの場合でも、一連の処理の呼び出しをひとつの関数にまとめてラッパに押し込んでしまったりしていれば、同じことです。
私の頭がおかしいんでしょうかね。