
はじめてのC言語 | 第12回
はじめに|同じレシピなのに、味が変わる?
カフェでミックスジュースを作っていると、
こんな注文が入ることがあります。
- 「バナナ多めで」
- 「砂糖は入れないでください」
- 「りんごを多めにしてください」
使っているレシピカードは、いつも同じです。
材料の種類も、変わっていません。
それでも、
入れる量やバランスを少し変えるだけで、味は大きく変わります。
今回は、
この「バランスを渡す」という考え方を、
プログラムで見てみます。
レシピカードを、そのまま使う場合の限界
前回のおさらいです。
レシピカードがあると、
- 何度でも同じ作り方が使える
- 書き直さなくていい
- 失敗しにくい
という、いいことがありました。
でも、ひとつだけ困ることがあります。
材料が決まっているレシピだと、
- バナナ多めのレシピ
- りんご多めのレシピ
- 砂糖あり用
- 砂糖なし用
……と、
カスタマイズ用のレシピカードが増えてしまう のです。
これは、ちょっと大変です。
材料を渡す、という発想
そこで、少し考えてみます。
ミックスジュースの材料は、もう決まっています。
バナナも、りんごも、砂糖も、いつもの定番です。
でも、レシピカードに
こんな調整欄があったらどうでしょう。
- バナナ:___
- りんご:___
- 砂糖:___
作り始める前に、
それぞれの量だけを決めてから 調理する。
レシピカードそのものは変えません。
変わるのは、材料のバランス だけです。
すると、
- 同じレシピ
- 同じ手順
- でも、味は変えられる
という状態になります。
この「量を決める」という部分が、
プログラムの世界では、外から値を渡す という考え方になります。
ミックスジュースの材料のバランスを調整する
ミックスジュースに入れる材料は決まっています。
- バナナ
- みかんの缶詰
- 桃の缶詰
- ミルク
カスタマイズできるのは、量だけです。
そこで、
「量を調節して作るレシピカード」を考えてみます。
レシピカード(関数)|味のバランスを変更する
#include <stdio.h>
void make_mix_juice(int banana, int orange, int peach, int milk) {
printf("ミックスジュースを作ります\n");
printf("バナナ:%d\n", banana);
printf("みかんの缶詰:%d\n", orange);
printf("桃の缶詰:%d\n", peach);
printf("ミルク:%d\n", milk);
printf("\n");
}このレシピカードでは、
- 材料の種類は固定
- それぞれの 量(バランス) を受け取る
ようになっています。
注文ごとに、バランスを変えて呼び出す
次に、このレシピカードを使ってみます。
int main(void) {
/* バナナ多め */
make_mix_juice(3, 1, 1, 1);
/* みかんの缶詰多め */
make_mix_juice(1, 3, 1, 1);
/* 桃の缶詰多め */
make_mix_juice(1, 1, 3, 1);
/* ミルク普通 */
make_mix_juice(1, 1, 1, 1);
return 0;
}ここでは、
- レシピは同じ
- 渡している数字だけが違う
という状態になっています。
完成した「ミックスジュース」のコード
#include <stdio.h>
void make_mix_juice(int banana, int orange, int peach, int milk) {
printf("ミックスジュースを作ります\n");
printf("バナナ:%d\n", banana);
printf("みかんの缶詰:%d\n", orange);
printf("桃の缶詰:%d\n", peach);
printf("ミルク:%d\n", milk);
printf("\n");
}
int main(void) {
/* バナナ多め */
make_mix_juice(3, 1, 1, 1);
/* みかんの缶詰多め */
make_mix_juice(1, 3, 1, 1);
/* 桃の缶詰多め */
make_mix_juice(1, 1, 3, 1);
/* ミルク普通 */
make_mix_juice(1, 1, 1, 1);
return 0;
}
実行すると、こうなります
ミックスジュースを作ります
バナナ:3
みかんの缶詰:1
桃の缶詰:1
ミルク:1
ミックスジュースを作ります
バナナ:1
みかんの缶詰:3
桃の缶詰:1
ミルク:1
ミックスジュースを作ります
バナナ:1
みかんの缶詰:1
桃の缶詰:3
ミルク:1
ミックスジュースを作ります
バナナ:1
みかんの缶詰:1
桃の缶詰:1
ミルク:1「同じレシピなのに、味が変わる」
それは、素材のバランスを少し変えただけなのです。
このコードで大切なポイント
ここで覚えておきたいのは、3つだけです。
- レシピカード(関数)は、作り方を書いたもの
- 材料(バランス)は、外から渡している
- 中では、その材料を使って動いている
難しい言葉を知らなくても、
「材料を受け取って使う」
という感覚があれば大丈夫です。
ミナちゃんの気づき
ミナちゃんが、ふと手を止めました。
ミナちゃん
「あれ……レシピを書き直さなくてもいいんですね」
ユニ先生が、にこっと笑います。
ユニ先生
「そうだよ。作り方はそのまま」
「必要なのは、材料を受け取ることだけなんだ」
ミナちゃんは、少し安心した顔になりました。
プログラムの世界では、どうなるの?
プログラムの世界でも、考え方は同じです。
- レシピカード → まとまった処理
- 材料 → 外から渡される情報
レシピは、
材料を受け取ってから動き始めます。
中身のやり方は変えなくていい。
必要な情報だけを、最初に渡す。
それだけで、
同じ仕組みを何度も使えるようになります。
同じレシピで、いろいろ作れる安心感
材料を渡せるようになると、
- レシピが増えすぎない
- 変更が楽になる
- 間違いが起きにくくなる
という安心感が生まれます。
- 「ちょっと変えたい」
- 「条件が違うだけ」
そんなときでも、
落ち着いて対応できるようになります。
まとめ|同じレシピで、いくつも作れる
この小さなコードは、
- レシピを書き直さなくていい
- 材料を変えるだけで対応できる
- くり返し使える
という、
これから先ずっと使う考え方を含んでいます。
外から渡されたものを使って、
中で静かに仕事をする。
それができるようになると、
書いたコードが、ぐっと頼もしくなります。
次は、
作ったドリンクを「受け取る」話をします。
レシピの仕事が終わったあと、
何が戻ってくるのか。
その続きを、見ていきましょう ☕
さらに学びたいあなたへ
📘 用途ごとに選ぶ Linux のおすすめ本

