プログラミングの始め方 その2

関数とは何かを知ろう

説明

前回は変数の概念について学びました。
変数というのは任意のデータを保存しておいて、プログラムの中で、その保存した値を利用するために
使うものでしたよね。

それでは前回のように、kansuu.shをVSCode開いてください。


ここまで準備出来たでしょうか?

ターミナルで以下のようにkansuu.shを実行してください。

bash kansuu.sh
ターミナル

2
kansuu.sh: line 11: herasu: command not found
ターミナル

こういう結果になりました。
11行目で「herasu」というコマンドが見つからないと言って怒られていますね。(herasu : command not found
まず、プログラムの流れを説明します。

  • 6行目で変数「x」に1を保存しています
  • 8行目で1行目の「fuyasu」という名前がもう一度出てきます
  • 11行目で「herasu」という名前が出てきますが、ここでコマンドが見つからないと怒られています

課題

さて、先ほど実行した時、「herasu」というコマンドが見つからないって怒られましたよね?
プログラムをよく読んでみると、

function fuyasu()
{
  return $(( $1 + 1 ))
}
bash

1行目に「fuyasu」はあります。
きっと「fuyasu」みたいな何かがあれば、このプログラムはエラーなく実行できるのでしょう。

それでは「fuyasu」の内容をコピーして、「herasu」を作ってみましょうか。

function fuyasu()
{
  return $(( $1 + 1 ))
}

# ここから下がコピー&ペーストした内容
function fuyasu()
{
  return $(( $1 + 1 ))
}
bash

2つ目の「fuyasu」はコピーした内容をペーストしたものです。
「fuyasu」という名前を「herasu」に変更してください。

function fuyasu()
{
  return $(( $1 + 1 ))
}

function herasu() # ここをfuyasuからherasuに変更
{
  return $(( $1 + 1 ))
}
bash

それでは、kansuu.shをもう一度実行してください。

2
2
ターミナル

このように表示されたでしょうか?
herasu : command not foundは出なくなりましたよね)

先ほどコピー&ペーストした「herasu」の”{“から”}”までは「fuyasu」と同じものになっています。
足し算のままになっていますよね。
それでは「herasu」の計算式が引き算になるようにプログラムを修正してください。


正しく減らして、もう一度実行すると、以下のように表示されます。


2
1

ところで、新しく追加した「herasu」や元からあった「fuyasu」は、一体何でしょうか?

これらは関数と言います。
プログラミングをする時に、変数と並んで重要な考え方です。

関数は主に次のような特徴を持ちます。以下の絵を見ながら読んでみてください。

関数の概念図

上の絵では、呼び出し元は”ぼく”で、”ねこちょうだい”という関数を呼び出しています。
関数を呼び出す時の引数は、呼び出し元である”ぼく”が持っていたお金のうち5000万ドルですね。
”ねこちょうだい”という関数は、引数で5000万ドルもらったので”ねこ”を戻り値として返します。
呼び出し元である”ぼく”の手元には5000万ドルが残っていて、戻り値としてもらった”ねこ”を飼うことができます。

さて、kansuu.shに話を戻しましょう。
引数とは、以下のように「fuyasu」も「herasu」もkansuu.shの中では「$1」という特別な名前の変数です。
1を足したり引いたりする元になっている数値ですね。
もともとは呼び出し元にあった「x」という変数です。

function fuyasu()
{
  return $(( $1 + 1 ))
}
bash

続いて関数の呼び出し元に関して説明します。

「fuyasu」の呼び出し元は、以下の箇所です。

fuyasu $x
bash

$xという変数を引数にして「fuyasu」という関数を呼び出しています。

また、「herasu」の呼び出し元は、以下の箇所です。

herasu $x
bash

「fuyasu」も「herasu」も、このプログラムの中では$xという変数を引数にして、同じように呼び出していることが理解出来たでしょうか?

なお、bashの場合、関数の戻り値は「$?」という特別な変数に保存されています。

echo $?
bash

上記のように書くことで、関数の戻り値を表示しています。

今回は授業は「関数」の考え方について学びました。
「変数」と「関数」の基本的な考え方は、どのプログラム言語にも通じるものです。
そして、今後もこの2つの単語は授業の中で使いますので、しっかりと頭に入れておいてください。

答え合わせ

授業の中で幾つかプログラムを変更してもらいましたが、こちらのリンクから正しく修正したプログラムを見ることが出来ます。
以上で第二回の授業は終わりです。
お疲れ様でした。