第12回|同じレシピなのに、味が変わる?|関数の引数をやさしく解説

当サイトでは、コンテンツの一部に広告を掲載しています。
第12回|同じレシピなのに、味が変わる?|関数の引数をやさしく解説

はじめての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 のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe 編集部

UNIX Cafe は、むずかしい言葉をできるだけ使わず、物語を読むような気持ちで気軽に学べる場所です。
プログラミングは、アイデアをコンピューターに伝えるための「ことば」。
簡単な単語と文法を覚えることで、誰でもターミナルから便利なコマンドを使えるようになります。
コーヒーを片手に立ち寄るような気持ちで、やさしいプログラミングの世界を、
そっとのぞいてみてください。

目次