【Kotlin超入門コース】12.関数 |関数を料理ロボットに例えて説明しました【プログラミング初心者向け入門講座】

はじめに

こんにちは。キノコードです。
「Kotlin超入門コース#12 関数」について説明します。

関数とは?

この動画では、「関数」について説明します。
説明する内容はこちらです。
まず、関数について説明します。
関数とは、「処理」のことです。
なぜ関数があるのでしょうか?
料理で例えてみます。
例えば、いつも作るカレーがあるとします。
そのレシピを料理ロボットに記憶してもらいます。
またカレーが食べたくなったときに、
ボタン1つで作れる。
しかも、その料理ロボットは、自分も使えるし、家族も使える。
その料理ロボットが関数なのです。
関数の便利なところは、3つあります。
1つめは、同じものを2回書く必要がなくなること。
2つめは、同じものを他の場面でも使えること。
3つめは、他の人も使うことができることです。
実は、今までのレッスンで関数を使ってきました。
変数の中身を表示させるときに使っていたprintln(プリントライン)です。
関数には2種類あって、自分で作る関数と、Kotlinがあらかじめ用意してくれている関数です。
このprintln関数は、Kotlinがあらかじめ用意している関数です。
println関数はたった1行で変数の中身を表示してくれますが、実は、関数の中身は何行ものコードが書かれています。
もしprintln関数がなければ、変数の中身を表示させたいときに、イチからそのコードを書くことになり、大変です。
println関数があるから、変数の中身を表示させたいたびに何行もコードを書く必要ありません。
使いたいときに、たった1行で使い回すことができるのです。
また、最初に実行するmain関数もKotlinがあらかじめ用意している関数です。
レッスン5の実行でmain関数を説明しました。このレッスンでも改めて説明します。

Kotlinでは、関数からプログラムがスタートします。
関数の書き方は、funと書いて、半角。メイン、丸括弧。そして波括弧を書きます。
関数の記述はこれで終わりです。
ちなみに、プログラムの始点のことを「エントリポイント」といいます。
Kotlinでは、エントリポイントとなる関数は、main関数です。
つまり、Kotlinではこのmain関数からプログラムが始まります。
次に、自分で作る関数を説明します。
関数を作ることを「関数を定義する」といいます。
Kotlinで関数の定義方法をみていきましょう。

関数の定義方法

fun 関数名( ) {
実行する処理
}

関数はまず最初にfunと書きます。
funの後に関数につける名前を書き、丸括弧、波括弧を書きます。
丸括弧の中に記述するものを引数と言います。
関数は、この引数を受け取ることができます。
受け取った引数は、関数内で使うことができます。
例えば、関数内にある数字と引数を掛け算することができます。
このように、関数に引数を値を渡すことで関数のできる処理の幅が広がります。
引数は、必ず必要と言うわけではなく、省略することができます。
また、引数は、何個でも渡すことができます。引数と引数の間をカンマで区切ればよいです。
波括弧のなかに実行する処理を書きます。
実行する処理の行は右にひとつインデントをあけましょう。
そして、関数は引数を受け取ることができる一方、処理結果を返すことができます。
これを戻り値といいます。
returnを使うことで、戻り値として関数の外に値を返すことができます。
それでは、実際に、コードを書いてみましょう。

関数の宣言と実行

あいさつを表示する関数を作成しましょう。

fun main() {
    sayHello()
}

fun sayHello() {
    println("Hello World")
}

関数を定義します。
「fun」を書いて、関数名を書きます。
関数名はメッセージを表示させるので「sayHello」としましょう。
今回、引数はないので何も記述しません。
波括弧を書いて、実行する処理「println("Hello World")」を書きます。
これで関数を定義することができました。
関数を実行するには、関数名、丸括弧で実行できます。
関数名の「sayHello」に引数なしの丸括弧。これで「Hello World」が表示されるはずです。
実行してみましょう。
「Hello World」を表示することができました。

fun main() {
    sayHello()
    sayHello()
    sayHello()
}

fun sayHello() {
    println("Hello World")
}

定義した関数は何度でも呼び出すことができます。
3回、say_helloを記述しましょう。
「Hello World」は3回表示されるはずです。
実行してみましょう。
「Hello World」を3回表示することができました。

引数がある関数

引数がある関数についてみていきましょう。
関数名のあとに丸括弧の中に引数を書いて、引数に書いた内容を表示するプログラムを記述していきましょう。
引数名はあいさつの「greeting」とします。
「say_hello」の丸括弧の中に「greeting」を書きましょう。
そして、受け取った引数をconsole.logで表示させましょう。
関数を呼び出すところの引数に、ダブルクォーテーションで「"Good Morning"」を渡してみましょう。
実行してみます。

fun main() {
    sayHello("Good morning")
}

fun sayHello(greeting:String) {
    println(greeting)
}

引数がある関数についてみていきましょう。
関数名のあとに丸括弧の中に引数を書いて、引数に書いた内容を表示するプログラムを記述していきましょう。
引数名はあいさつの「greeting」とします。
「say_hello」の丸括弧の中に「greeting」を書きましょう。
データ型は文字列型にします。
丸括弧のあとに、波括弧を書きます。
受け取った引数をprintln関数で表示させます。
「println(greeting)」と記述します。
関数を呼び出すには、関数名、丸括弧。丸括弧の中に、引数を書きます。
引数は「"Good morning"」とします。これで「Good morning」が表示されるはずです。
実行してみましょう。
Good morningが表示されました。

fun main() {
    sayHello("Good evening")
}

fun sayHello(greeting:String) {
    println(greeting)
}

次に、「Good evening」を渡してみましょう。
実行してみます。
Good eveningが表示されました。

複数の引数がある関数

fun main() {
    add(6, 2)
}

fun add(num01: Int, num02: Int) {
    println(num01 + num02)
}

引数を2つ使ってみましょう。
加えるという意味の「add」という関数を作ってみます。引数をnum01とnum02として、これを足してprinln関数で表示してみましょう。
では、add関数に6と2を渡してみます。
結果は、6足す2で8となるはずです。
実行してみます。
8が表示されました。

戻り値がある関数

fun main() {
    add(6, 2)
}

fun add(num01: Int, num02: Int): Int {
    return num01 + num02
}

関数の結果は、return文で返すことができます。
prinln関数をreturnに変更してみましょう。
ただし、returnで結果を返しても、prinln関数で表示をさせていないので結果を確認することができません。
念のため、実行してみましょう。
何も表示されません。

fun main() {
    val result = add(6, 2)
    println(result)
}

fun add(num01: Int, num02: Int): Int {
    return num01 + num02
}

結果を変数に格納して、println関数で表示させる方法もあります。「result」という変数に代入して表示させてみましょう。
実行してみます。8が表示されました。
ところで、関数内で表示させる処理と、戻り値を受け取った値を表示させる処理とでは、どのような違いがあるのでしょうか。
どちらも表示するという点は同じです。
違いは、リターンで戻り値を受け取って表示させるかどうかです。では、リターンの意味は、どんなところにあるのでしょうか?
戻り値がない関数は、関数内で処理した結果を返すことができません。
一方、戻り値がある関数は、関数内で処理した結果を返すことができます。そのため、受け取った結果をさらに計算したり文字列とくっつけたりすることができます。
例えば、足し算をする関数で計算した結果を、さらに引き算をする関数で計算することができます。
しかし、関数内で単に表示させる処理では、関数の結果を返すわけではないです。したがって、計算結果をさらに違う関数に渡すことはできません。
このように、戻り値がない場合と戻り値がある場合では使い方が変わってきます。
どちらの関数もよく使うので、必要に応じて使い分けてみてください。
レッスンは以上です。

確認問題

それでは確認問題です。
calという関数を作り、10と5と8の引数を渡します。
足し算の結果を変数に代入して、結果を返してください。
そして、関数の外側で計算結果を表示させてみてください。
動画をストップし、記述してみてください。

fun main() {
    val result = cal(9, 4, 2)
    println(result)
}

fun cal(a: Int, b: Int, c: Int): Int {
    return (a + b + c) / 3
}

それでは最後に確認問題をやります。
3つの引数の受け取る関数を作り、9と4と2の平均を表示させてください。
一旦、動画を止めて記述してみてください。
それでは答え合わせです。まず、funと書いて、関数名はなんでもよいのですが、私はcalという関数名としました。
引数は3つなので、丸括弧の中に引数を3つ記述します。
引数名はなんでもいいですが、私はaとbとcとしました。
そして、returnを書き、a,b,cを足します。足し算は先に計算をしたいので丸括弧で括ってそれから個数の3で割ります。
結果をresultに格納して、println関数で表示させてみましょう。
5が表示させるはずです。
実行してみます。
5が表示されました。
それでは、次のレッスンでお会いしましょう!
see you next time baby