■基本関数
能力をまとめておくもの
引数の渡し方
■名前つき引数
引数名をしっかりと書く何をどこに渡しているか確認しやすい!
hoge(a=1,b=2)
■実引数
引数名を省略 簡潔に書ける。
hoge(1,2)
■引数が複数の場合先頭から渡している。
この場合初めの引数のみ渡している。メソッドの引数にデフォルト値が入っている場合に限る。
hoge(1)
//基本の書き方
fun hoge(name: String) {}
//戻り値を持たせる書き方
fun hoge2(a: Int, b: Int):Int {
return a + b
}
//能力が一つなら = で書ける。戻り値もreturn不要
fun hoge3(a: Int, b: Int):Int = a + b
//引数に値をデフォルトで持たせる事ができる。
fun hoge4(a: Int=2, b: Int=3):Int = a + b
//引数に値を渡さないとデフォルト値が働く
hoge4() //結果: 5
//デフォルト値が働かない
hoge4(5,5) //結果: 10
//後半のデフォルト値のみ働く
hoge4(5) //結果: 8
//必須引数(値を持っていない)と任意引数(デフォルトで値をもった引数)混在する場合順番は必須引数から書く
fun hoge3(a: Int, b: Int=3):Int = a + b
■可変長引数
基本仮引数には一つの仮引数に対して一つの値を入れる。
可変長引数は一つの仮引数に対して複数の値を代入でき配列となる。
仮引数にvarargをつける。
for文と相性が良い
fun hoge(vararg values: Int): Int {
var count = 0
//引数で渡された配列になる値をfor文で全て書き出しcountに一つずつ足している。
for (value in values) {
count += value
}
return count
}
println(hoge(4,5,6,1))
//結果 16
■可変長引数と普通の引数を混在する事も可能です。
その場合実引数のみではどこからどこが普通の引数でどこからどこが可変長引数なの?
と言う問題になるなと感じました。
なので混在する場合はなるべく名前付き引数で渡すのがいいのではないかと感じました。
fun hoge(a: Int, vararg values: Int): Int {
var count = 0
//引数で渡された配列になる値をfor文で全て書き出しcountに一つずつ足している。
for (value in values) {
count += value
}
return count * a
}
//実引数のみ
println(hoge(3,4,5,6,1))
//名前付き引数込み
println(hoge(a=3,4,5,6,1))
//結果 16
■可変長引数の引数に配列そのものを渡したい場合
スプレット演算子を使う
配列が入った変数を引数に渡す時に*をつける。
fun hoge(vararg values: Int): Int {
var count = 0
//引数で渡された配列になる値をfor文で全て書き出しcountに一つずつ足している。
for (value in values) {
count += value
}
return count
}
val aaa = intArrayOf(4,9,6,7)
println(hoge(*aaa))
//結果: 26
//配列以外にも一緒に渡せる。
println(hoge(5,6,*aaa))
//結果: 37
■複数の戻り値を指定することも可能 Pair Triple
基本戻り値は一つですが
PairかTripleを使えば複数戻り値を指定する事ができます。
■Pair
戻り値2つ
■Triple
戻り値3つ
//必ずしも戻り値分の仮引数が必要と言うわけではない
fun hoge(a: Int, b: Int):Pair<Int,Int> {
return Pair(a,b)
}
//分解宣言
//戻り値が入る。
val(a,b) = hoge(4,5)
println(a) //結果: 4
println(b) //結果: 5
■分解宣言
戻り値に返す値分の変数の入れ物を用意する。
書き方
val (a,b) = メソッド名(4,5)
メソッドの戻り値を先頭から順に変数に入れる。
この場合aには4をbには5を
そして使う時は変数を分けているので使いたい返り値のみを使えたりする。
TripleはPairの3つバージョン
■可変長引数を使って複数の戻り値を指定してみた
fun hoge(vararg values: Int): Pair<Int,Int> {
var count = 0
var count2 = 0
for (value in values) {
count +=value
count2 ++
}
//必ずしもPair(この中が直接引数を必ずしも書くわけではない。)
return Pair(count, count - count2)
}
//sumとsum2にはhoge()の戻り値がそれぞれ入る。
val(sum,sum2) = hoge(5,4,2,1)
//戻り値count
println(sum) //結果: 12
//戻り値count-count2
println(sum2) //結果: 8
■戻り値が複数指定されたとしても一つしか使わない場合
引数の変数名にアンダーバーを指定する。
val(a,_) = hoge(3,5,6,7)