見出し画像

[野球で分かる]プログラム未経験から始めるB問題対策[2回目](引数と戻り値)

引数って分かりにくい!


上のプログラムの(int x ,int y)って書かれた部分

基本情報技術者試験を受けるで「引数」という概念が欠かせません。しかし、プログラミング未経験の人には、なかなか理解できない概念かもしれません。そこで野球で例えてみます。

投手は捕手のサインという引数をもらって、球を投げる(出力)


サインを出しているキャッチャーのイラスト

野球では、ピッチャーが球を投げる前に、キャッチャーから指を使って
「次カーブ投げろ」とか「ストレート投げろ」とか
の合図を出しています。

ピッチャーを球を投げるまでの流れを確認してみる

  • キャッチャーがサイン(指)で球種を指示する

  • ピッチャーがサインを見る

  • ピッチャーがサインの球種を投げる

大体こんな感じ。
で、ここにおける、球種っていうのが引数になります。

開始
 ↓
キャッチャーが球種を決める
 ↓
キャッチャーが球種を投手に伝える
 ↓
投手がその球種を投げる
 ↓
終了

それでは、上の流れをプログラムで再現してみます。
条件としては以下の感じです。
・ストレートを投げる。
・カーブを投げる。
・スライダーを投げる。
・ツーシームを投げる。
・カットボールを投げる。
・フォークボールを投げる。

を関数を用いて画面に出力する。

それを、引数を使わずに書くと以下のような感じになります。


#include <stdio.h>

// ストレートを投げる関数
void throw_straight() {
    printf("ストレートを投げる\n");
}

// カーブを投げる関数
void throw_curve() {
    printf("カーブを投げる\n");
}

// スライダーを投げる関数
void throw_slider() {
    printf("スライダーを投げる\n");
}

// ツーシームを投げる関数
void throw_two_seam() {
    printf("ツーシームを投げる\n");
}

// カットボールを投げる関数
void throw_cut_ball() {
    printf("カットボールを投げる\n");
}

// フォークボールを投げる関数
void throw_forkball() {
    printf("フォークボールを投げる\n");
}

int main() {
    throw_straight();
    throw_curve();
    throw_slider();
    throw_two_seam();
    throw_cut_ball();
    throw_forkball();
    
    return 0;
}

こんな感じで、とても長くなる上に「パーム」などの球種を追加したくなったら関数も追加しなくてはならずとても面倒です。

そこで、下のような引数を用いると

const char *pitch_type  /* 投げる球種 */

こんな感じのコードになります!

#include <stdio.h>

// 指定された球種を投げる関数
void throw_pitch(const char *pitch_type) {
    printf("%sを投げる\n", pitch_type);
}

int main() {
    // それぞれのピッチを投げる関数をテスト
    throw_pitch("ストレート");
    throw_pitch("カーブ");
    throw_pitch("スライダー");
    throw_pitch("ツーシーム");
    throw_pitch("カットボール");
    throw_pitch("フォークボール");
    
    return 0;
}

だいぶすっきりしました。
このプログラムでは、この引数には球種を文字列で指定し、関数内のprintfを用いてどの球種を投げるかを出力します。
例えば、throw_pitch("カーブ");と記述すると、画面には"カーブを投げる"と表示されます。このように引数を変更するだけで、同じ関数を使って異なる結果を出力することができるのです。

結論

引数とは、まとめたい処理のうち異なる部分を記載するもの

お疲れさまでした!


この記事が気に入ったらサポートをしてみませんか?