| 9 | === 構造化言語 === |
| 10 | |
| 11 | C 言語は構造化言語です。これはどういう意味かというと、「○○しなさい」という命令について、その「○○」の処理内容を別の場所で具体的に記述し、その中に書かれている「××しなさい」という命令についても、「××」の処理内容がさらに別の場所で具体的に記述される、ということを繰り返すことで、処理内容をツリー構造として表現できる、ということです。 |
| 12 | |
| 13 | このスタイルの利点は、処理内容のおおざっぱなシナリオをそのままプログラムとして書き表すことができることです。例えば、お店の POS レジでお会計を済ませた後の、レジ端末おける処理について考えてみましょう。必要な処理として考えられるのは、以下のようなシナリオです。 |
| 14 | |
| 15 | 1. 今回の会計で得た売り上げを、会計システムに通知し、お店の売り上げとして計上する。 |
| 16 | 1. 今回販売した商品の品番と個数を、在庫管理システムに通知し、在庫情報を更新する。 |
| 17 | 1. 今回の会計の担当者と販売した商品の情報を、従業員管理システムに通知し、従業員の販売成績として記録する。 |
| 18 | |
| 19 | この処理全体を行う関数を onSelled() とし、 1 の処理を行う関数を notifyProceeds() 、 2 の処理を行う関数を notifyStockConsumption() 、 3 の処理を行う関数を notifyEmployeesSale() とすると、 onSelled() 関数は以下のように書くことができます。 |
| 20 | |
| 21 | {{{ |
| 22 | /** |
| 23 | @brief レジでの販売会計後に呼ばれる関数 |
| 24 | @param commodity_info 商品の情報データへのポインタ |
| 25 | @param sum 売上金額 |
| 26 | @param uid 担当者の従業員 ID |
| 27 | */ |
| 28 | void onSelled(const item_info_t *commodity_info, long sum, uid_t uid) |
| 29 | { |
| 30 | notifyProceeds(sum); |
| 31 | notifyStockConsumption(commodity_info); |
| 32 | notifyEmployeesSale(uid, commodity_info); |
| 33 | } |
| 34 | }}} |
| 35 | |
| 36 | notifyProceeds() などの関数が実際にどんな処理を行うかは、それぞれの関数における定義の中でさらに詳細に記述されることになります。 |