関数とは?プログラミングで使うときの意味って何?
プログラミングを学び始めたけど、
- いまいち関数の使い方が分からない
- どのようなときに使ったらいいか分からない
- そもそも関数の意味や使うメリットが分からない
こんな方多いと思います。
私もプログラミングを学び始めた初心者の頃は正直よくわからなかったです。
なのでプログラミング初心者の方にもわかるように、
- 関数の意味
- 関数のメリット
- 関数の作り方(少々)
についてわかりやすく解説していこうと思います!
関数とは?意味って何?
関数とはプログラミングにおいてどのようなものなのかというと、
あるきまった処理を記憶しておく機能
という意味になります。
普段私たちが生活している中でもあるきまった一連の動作があります。
- 朝起きて
- 歯を磨いて
- シャワーを浴びて
- 朝ご飯を食べて
- 学校に行く
などの日課です。
プログラミングでもこのような一連の処理があるのです。
そういうあるきまった処理をまとめて記憶しておくのが関数の役目です。
この機能があるおかげでいろんないいことがあるのですが、その紹介は少し下のメリットで解説します!
プログラミングでの関数のメリットがわからない?
プログラミングで関数があることのメリットはたくさんありますがその中でも大きな二つ、
- コードの再利用性
- プログラマが処理を意識しなくてよい
こちらの二つについて解説します!
コードの再利用性
まず関数を使うことのメリットの一つがコードの再利用性です。
つまりは、同じコードを2度以上書かなくて済むということです。
こう聞くとすごく便利な機能だなって感じますね。
何回もおんなじことを書くの疲れますからね。
「ならコピー&ペーストでよくない?」
って話になりますが、行数が多いコードを何回もコピペしていたらどうなるかというと、
main(){
一昨日も;
朝起きて;
歯を磨いて;
シャワーを浴びて;
朝ご飯を食べて;
学校に行く;
昨日も;
朝起きて;
歯を磨いて;
シャワーを浴びて;
朝ご飯を食べて;
学校に行く;
今日も;
朝起きて;
歯を磨いて;
シャワーを浴びて;
朝ご飯を食べて;
学校に行く;
明日は日曜だからずっと寝る;
明後日はまた;
朝起きて;
歯を磨いて;
シャワーを浴びて;
朝ご飯を食べて;
学校に行く;
}
こんな感じ(イメージ)のプログラムになっていくということになります。
何回も同じコードが見て取れちょっと嫌ですね。
ちゃんときれいなプログラムを書くには関数は欠かせません。
関数を使ったらこんなイメージ↓
朝の日課(){
朝起きて;
歯を磨いて;
シャワーを浴びて;
朝ご飯を食べて;
学校に行く;
}
main(){
一昨日も;
朝の日課();
昨日も;
朝の日課();
今日も;
朝の日課();
明日は日曜だからずっと寝る;
明後日はまた;
朝の日課();
}
このように書けるとわかりやすいですね。
プログラム中で何回も出てくる処理は、関数にまとめてしまったほうが見やすくてそして楽にコードを書けるようになります。
プログラマが処理を意識しなくてよい
皆さんは車を運転したことががあるでしょうか?
ある方もいればない方もいると思います。
車を運転したことがない方に向けて少し車の仕組みを解説しますね。
まず車にはアクセルペダルとブレーキペダルがあります。(AT車の場合)
- アクセルペダルを踏めば加速します。
- ブレーキペダルを踏めば減速します。
当たり前ですよね。
ではアクセルペダルを踏むと車の内部ではどのようなことが起こってタイヤが回転するか知っていますか?
知らない方もたくさんいると思います。
大雑把に言えば、ガソリンの排出量が増えてエンジンの回転数が上がります。
それによってタイヤをより速く回すわけです。
ブレーキペダルにおいてはこんな記述を見つけました。
① 運転手がブレーキペダルを踏む
② ブレーキキャリパのキャリパピストンが出る
③ キャリパピストンに押されてブレーキパッドが動く
④ 強制的にブレーキディスクを挟み込む事になる
⑤ 摩擦力によってブレーキディスクの回転力が落ちる
⑥ ブレーキディスクとつながっているハブの回転力が落ちる
⑦ ハブとつながっているタイヤの回転力が落ちる
こんなこと知っていなくても運転ってできるんです。
ではなぜできるか?
アクセルペダルを踏めば加速、ブレーキペダルを踏めば減速と教習所で教えられてきたからです。
車の内部がどうなっているかなんて知らなくても運転はできるんです。
- アクセルペダルを踏む ← 使い方を知っている
- 車の内部で何かが起きる ← よくわからないが関係ない
- 加速する ← どうなるかを知っている
ここでプログラミングに話を戻します。
プログラミングでいうと関数はアクセルペダルやブレーキペダルに当たります。
アクセルという関数は、
- ガソリンの排出量をあげる処理
- エンジンの回転数を上げる処理
- タイヤにエンジンの動力を伝える処理
からできているかもしれません。
でもプログラマは、アクセルという関数が用意されていたら中身は知らずとも使うことができるんです。
だって、アクセルペダルを踏めば加速することを知っているからですよね。
そうするとこんなことが言えます。
もしあなたが知らないような処理が使われている関数があったとしても、
用途と使い方さえ知っていれば、その関数を使うことができます。
どういうことかというと、関数の中でどのような処理が起こってようとその関数を使おうとしているプログラマには関係ないという話です。
例えば、出力(表示)機能がどんな処理をされてるかなんてわからないですよね。
でも、みんな表示する機能を知っていてちゃんと使えてるはずです。
そのようなイメージです。
- 関数の型がわかる ← 使い方がわかる
- 関数の内部の処理難しい ← ようわからんけど関係ない
- どんな機能か知っている ← 何のために使うかわかる
スピードを上げるためにアクセルペダルを踏むのであり、
中でどんなことが起こっているかは考えなくてもいいのです。
プログラミングしていく中で、大きなプログラムを作る時は、
複数人で協力して開発を行うことが多いです。
その時に用途と使い方がわかれば使える関数はとても魅力的な機能です。
そうすることで役割分担ができるようになります。
このように関数とは細かい処理をプログラマが意識しなくても使えるという点を持ち合わせています。
プログラミングでの関数の作り方
プログラミング言語によって関数の定義の仕方が変わるのですが、代表例をもとに解説していきます。
ちなみに全部値二つの足し算の結果を返すだけの関数です。
PHPの関数の書き方
function 関数名(引数){
処理を書く;
}
function add($x, $y){
return $x + $y;
}
Pythonの関数の書き方
def 関数名(引数):
処理
def add(x, y):
print x + y
C言語/C++の関数の書き方
戻り値型 関数名(引数){
処理;
}
int add(int x, int y){
return x + y;
}
Javaの関数の書き方
修飾子 戻り値型 関数名(引数){
処理;
}
public int add(int x, int y){
return x + y;
}
ほかにも言語によっていろいろな書き方がありますね。
さいごに
関数はとても魅力的な機能です。
しかし、最初のほうはこの魅力に気付かず避けることもあるかと思います。
何度もコードを書いて慣れることでいろいろな使い方やメリットがわかってくるはずです。
最後までご覧いただきありがとうございます。