プログラミングの関数とは?わかりやすく解説します
目次
プログラミングの関数とは?わかりやすく解説します
プログラミングでよく見かける「関数(かんすう)」とは一体何なのでしょうか?
関数とは「複数の処理をまとめたもの」です。
プログラミングでは関数は必須の存在と言えます。
関数なしのプログラミングはしんどいです。
この記事ではプログラミングの関数についてわかりやすく解説します。
関連記事
関数とは何か?
プログラミングの関数とは複数の「処理」をまとめたものを言います。
関数と言うと数学を思い浮かべる人も多いかと思いますが、その認識でもおおむね間違いはありません。
関数は入力を受け取って出力を返します。
このとき入力のことを「引数(ひきすう)」と言い、出力のことを「返り値(戻り値)」と言います。
関数の入力 ... 関数の引数
関数の出力 ... 関数の返り値
関数はメジャーな言語ではほとんど実装されている非常に人気の機能です。
処理をまとめたものを関数と言う
複数の処理をまとめたものが関数です。
複数の処理をまとめてそれに関数として名前を付けます。
その名前は「関数名(かんすうめい)」と言います。
関数の名前 ... 関数名
じっさいのプログラミングではコードの好きなところに関数名を書いて関数を呼び出します。
そうすることで関数内にまとめた複数の処理を実行することができます。
この実行することを「関数を呼び出す」と言ったりもします。
処理とは何か?
それで「処理」とは何なのでしょうか?
処理とはより厳密には「計算処理」のことを言います。
計算処理と言うとむずかしく感じますがたとえば「足し算」なんかも計算処理です。
1 + 1
それから変数に値を代入したりするのも計算処理です。
var = 123
こういった計算処理が複数あってそれをまとめたものが関数です。
つまり疑似コードで書くと↓こういうことです。
関数 { 1 + 1 var = 123 }
関数は何のために使うのか?
関数は何のために使うのでしょうか?
この目的は大きく分けて2つあります。
それは↓です。
複雑なコードをシンプルにするため
同じような処理を共通化するため
関数は複雑なコードをシンプルにし、そして同じような処理を共通化することができます。
「共通化」とは同じ処理をまとめてどこからでも使えるようにすることを言います。
複雑なコードをシンプルにするため
プログラミングではコードを書いているとコードが複雑になることがよくあります。
そういう時はコードを整理してまとめられそうな処理を関数にすることで見通しがよくなります。
書いているコードが複雑になるというのはプログラミングでは常につきまとう問題です。
そのためコードを書く人はコードが複雑にならないように工夫をします。
コードが複雑にならないように関数を使う
なぜ複雑なのがだめなのか?
それはメンテナンスが難しくなるからです。
特に複数人で開発する場合は複雑なコードを書いてしまうと、それをメンテナンスできる人がいなくなってしまいます。
そのためコードを関数にまとめてシンプルにして問題を単純にします。
関数は問題を単純にする
そうすることで他の人や未来の自分から見てもコードがわかりやすくなりメンテナンス性(保守性)が上がります。
同じような処理を共通化するため
また関数は同じような処理を共通化(きょうつうか)するためにも使われます。
プログラミングでコードを書いていると似たようなコードを書くことが多くなります。
似たようなコードは似ているわけなのでいちいち書くのも面倒です。
コピペで済ましてもいいですが、そういうコードがあった場合は関数を使って似ているコードを共通化します。
共通化とは似ているコードを関数にしてどこからでも使えるようにすることを言います。
たとえば↓の疑似コードを見てください。
家から出る。 自販機にお金を入れる。 自販機からジュースを取り出す。 隣町に行く。 自販機にお金を入れる。 自販機からジュースを取り出す。
↑の疑似コードでは2回自販機でジュースを買っています。
自販機にお金を入れてジュースを買っているわけですが、まったく同じ処理が続いています。
こういった似たような処理は関数にしてしまいます。
たとえば↓のようにです。
関数 自販機でジュースを買う { 自販機にお金を入れる。 自販機からジュースを取り出す。 } 家から出る。 自販機でジュースを買う。 隣町に行く。 自販機でジュースを買う。
似たような処理が関数の「自販機でジュースを買う」にまとめられてコードがシンプルになりましたね。
このように関数を使って処理を共通化することでコードをシンプルにすることができます。
複雑な関数をどのように関数にするかはプログラマーやエンジニアの腕の見せ所です。
腕のいい人ほどわかりやすく使いやすい関数を作ります。
関数の目的
関数の目的は先ほども書いたように↓の2つです。
複雑なコードをシンプルにするため
同じような処理を共通化するため
そしてこの他には関数の根本的な目的があります。
それは「入力を処理して出力をおこなう」ことです。
入力を処理して出力をおこなう
関数の目的を突き詰めると究極的にはこれになります。
入力を処理して出力するのが目的
入力とは「外から中に入れること」を言います。
いっぽう出力とは「中から外に出すこと」を言います。
この場合の「中」とは「関数の中」のことです。
関数の中に外からデータを入れて、関数内でそのデータを処理して、そして関数の外に処理したデータを出す。
これが関数の究極的で原始的な姿です。
外から関数の中にデータを入れる
関数の中でデータを処理する
関数の中から外にデータを出す
本来の必要とされている関数の姿でありもっともシンプルな関数の形です。
入力を引数、出力を返り値(戻り値)と言う
関数への入力のことを「関数の引数」と言います。
また関数からの出力のことを「関数の返り値(戻り値)」と言います。
関数の引数は関数名のとなりにカッコで並べられることが多いです。
関数 私の関数(引数1, 引数2) { 処理 }
また関数の返り値はreturn
文などで関数内から返すことが多いです。
関数 私の関数() { return 返り値 }
関数定義と関数呼び出し
関数を作ることを難しい言葉で「関数定義(かんすうていぎ)」と言います。
「定義」とは「カタチを定める、形作る」などの意味を持っている言葉です。
ようは「関数作るぞ!」という気合によって関数を作ることを関数定義というわけですね。
この定義した関数を呼び出すことを「関数呼び出し(かんすうよびだし)」と言います。
関数をコール(呼ぶ)するとも言います。
作った関数は作っただけでは機能しません。
作った関数を呼び出すことで関数内に書かれた処理が実行されます。
疑似コードで言うと↓が関数定義。
関数 私の関数() { 処理1 処理2 }
↓が関数呼び出しです。
私の関数()
関数呼び出しでは関数名にカッコをつけて呼び出すのが一般的です。
↑の「私の関数」を呼び出すと呼び出した段階で「処理1」や「処理2」が実行されます。
関数の引数と返り値
では関数の引数と返り値についてくわしく見てみましょう。
ここで取り上げるのは引数と返り値の役割です。
関数にとって引数と返り値はなくてもいい存在です。
じっさい引数と返り値を持っていない関数というのもあります。
これはただ関数内のまとめられた処理をするだけの関数です。
引数と返り値を持たない関数もある
しかし関数に入力を与えてその結果を出力で貰いたい場合。
そういう場合は関数に引数と返り値を書く必要があります。
引数の役割
引数の役割は関数の外から関数の中へデータを入れることです。
たとえば実際のプログラミングで関数を呼び出す場合は関数名にカッコを付けることが多いです。
私の関数()
↑のようにすると「私の関数」という関数が実行されます。
この関数に外から値を入れたい場合はカッコの中に値を書きます。
私の関数(123)
↑のようにすると「私の関数」に「123」という値を渡すことができます。
この「123」という値は関数の引数と言われています。
関数の中ではこの引数を使って処理を書くことができます。
関数 私の関数(arg) { var = arg * 2 }
↑の私の関数の本体ではカッコの中のarg
が引数でこれに「123」が入ります。
そしてarg
を使って関数の中で計算処理などを行います。
このように関数の引数とは関数の外から関数の中にデータを入れる役割があります。
返り値の役割
返り値の役割は関数の中から関数の外へデータを出すことです。
返り値は一般的なプログラミング言語ではreturn
文などで返すことが多いです。
たとえば↓のような関数の本体があるとします。
関数 私の関数() { }
この「私の関数」から「123」という値を返り値として返したい、出力したい場合は↓のように書きます。
関数 私の関数() { return 123 }
この関数を呼び出すと123
という値が返ってきます。
この値を「関数の返り値」と言います。
関数の返り値は変数などに入れておくことができます。
var = 私の関数()
↑の場合、var
という変数には123
という値が入ります。
Pythonで見る関数呼び出し
では実際のコードで関数を見てみましょう。
今回はPythonというプログラミング言語でコードを書いてみます。
def func(arg): return arg * 2 result = func(3) print(result) # 6
↑のコードではfunc
というのが関数名です。
この関数は引数のarg
を2倍にして返り値として返します。
おわりに
今回はプログラミングの関数とはなにかをわかりやすく解説してみました。
もしわかりやすくなかったらどこがわかりづらいか教えてください。
関数を定義して快適なプログラミングライフを送りましょう。
(^ _ ^) | 関数で処理をまとめよう |
(・ v ・) | 関数バンザイ |