2012年4月22日日曜日

じゃがいもを渡す

Clip to Evernote
以前、本ブログの「スキャンじゃない方」とのエントリで、自炊(スキャンじゃない方)をし始めたことを書きました。


カレー


誰しもそうだと思いますが、料理がまだ得意でないときには、どうしても特定のメニューに偏らざるを得なくなってきます。

そのときに選択肢として挙がりやすいものに、カレーがあります。
もちろん断定はできないものの、味付けや火加減に失敗しにくいことが理由として考えられます。
このあたりも、多くの方に同意していただけるでしょう。


カレー作り


カレー作りの際は、それなりに多くの手順を踏んでいくことになります。

大雑把に表せば、
  • 切る
  • 炒める
  • 煮る
  • ルーを入れる
となります。
もしも、このカレー作りの作業が非常に大規模であり、普通に作っていてはとても夕食の時間に間に合わないことが、作り始める前からわかっていたとします。

この場合にとれる行動は、大きく分けて三つあります。
  • 夕食の時間を延ばしてもらう
  • カレー作りを行う人数を増やす
  • カレーの品質や量を小さくする
私が作るカレーを誰かが待っているとすれば、夕食の時間を延ばすことは現実的ではありません。お腹を空かせて待たせることになってしまいます。一人で食べる場合であっても、私がお腹を空かせることになり、良くありません。
カレーの品質に妥協するのも避けたいところです。「今日はカレー作りが間に合わないから、じゃがいもは入れないことにする」では、寂しいものがあります。

よって、カレー作りを誰かに手伝ってもらうことにします。


作業分担


先ほどカレー作りを手順で分割しましたので、それぞれを担当してくれる人を呼んでくることにします。そして私は「主料理人」として、各人に指示を出す仕事を担当します。
まとめると、
  • 主料理人
  • 切る料理人
  • 炒める料理人
  • 煮る料理人
  • ルーを入れる料理人
で力を合わせてカレーを作ります。


じゃがいもを渡す


主料理人は切る料理人に対して、始めにじゃがいもを切ることを頼むことにします。

俯瞰した状況としては、皮付きのじゃがいもを渡して、皮がむかれて食べやすい大きさに切られたじゃがいもが返されれば良いです。

ところが、ここでじゃがいもの渡し方が問題になります。
  1. じゃがいもを一つだけ渡すのか
  2. 使用するじゃがいもをまとめて渡すのが良いのか
  3. じゃがいもが置いてある場所を教えて、そこから取得してもらうのが良いのか
  4. じゃがいもとにんじんをまとめて渡す方が良いのか
  5. じゃがいもがたくさんある場合、先頭のじゃがいもが置いてある場所だけ教えて、あとはその後ろにあるから、勝手に持っていってもらうのが良いのか
まだまだありそうですが、ここまでにしておきます。
順に見ていきます。


方法1


じゃがいもを一つだけ渡す場合には、じゃがいもを全部でいくつ使うのかは主料理人の方で管理することになります。
そして、一つのじゃがいもを切り終わったころに、新たな皮付きのじゃがいもを渡します。
主料理人が他の作業でいっぱいになっていなければ、有効な方法です。

ちなみに、今回は「切られたじゃがいもが返って」くれば良いので、この方法の場合、渡したじゃがいもとは別の、切る料理人が自分で用意したじゃがいもが返される可能性もあります。
そこはとりあえず問題なしとします。


方法2


使用するじゃがいもをまとめて渡す場合には、あらかじめ使用する数がわかっている必要があります。
切っている様子を見ながら適当なところでやめる、というわけにはいきません。


方法3


じゃがいもが置いてある場所を教える場合には、切る料理人からも、切ったじゃがいもが置いてある場所が返されるのが普通です。

ここでは、方法1とは異なり、指定したじゃがいもと切られて返されるじゃがいもは同じものになります。
どうしても「この」じゃがいもを切ってほしい、との状況では、この方法を用いるのが良いです。

方法4


じゃがいもとにんじんをまとめて渡す場合は、この場合だけ見ると効率が良さそうです。
ですが今後、「にんじんはいらないけどじゃがいもだけ一つ切ってほしい」という場面がきっと来ます。

これを実現するためには、主料理人はじゃがいもと空の箱を渡すことになるため、切る料理人は、まず箱の中身が空かどうかを判定する、という余計な作業が必要になります。


方法5


たくさんあるじゃがいもの先頭の場所を教える場合には、主料理人は十分な数のじゃがいもをあらかじめ用意しておく必要があります。
そのため、じゃがいもに無駄が出やすい方法となります。

用意されたじゃがいもを気づかずに使い切ってしまった場合には、切る料理人は何だかわからないものを返してくることになります。
したがって、主料理人は返されたものが切られたじゃがいもかどうかを判定する必要が出てきます。


まとめ


言い忘れていましたが、本エントリの前半はソフトウェア工学の話で、後半はC言語の関数呼出しの話です。


終わりに


本エントリでは、行う作業に着目してカレーを分割しましたが、
  • じゃがいも
  • にんじん
  • たまねぎ
  • カレールー
と分割した場合は、オブジェクト指向になります。