
ふと疑問に思ったんだけど、コードってどんどん長くなったらとんでもないことにならない?



その時はプログラムを細かく分けて部品化していくのがいいよ!まずは関数(メソッド)について学んでいこう!



今まで使ってきたmain関数みたいなもの?



それも特殊だけど関数のひとつだね!今回は自分で関数を作り、使う方法を解説していくよ!
Dartではプログラムはmain関数から始まります。
しかしプログラム全てをmain関数に書いたら長くて読みづらく、また再利用性(機能を使いまわすこと)が低くなってしまいます。なので機能を分割して部品化することで、コードがすっきりして、機能を再利用したりすることができるようになります。
そんな関数(メソッドともいいます)を今回は解説していきます!
前回のDart入門記事はこちら!
【Dart】関数(メソッド)とは
関数(メソッド)とは処理のひとまとまりを指します。



処理のひとまとまりとはなんじゃらほい。



とある機能をもつ塊、とでもいえばわかるかな?例えばふたつの数字を渡したら足し算してくれる機能があったら便利じゃない?



足し算したければmain関数に書けばいいじゃないの。







これ足し算二回してるけど、10回とかなったらどう思う?



うーん、単純な処理なのにものすごく長くなるね。



この足し算という処理を分割して、足し算する機能があれば便利だよね。それを呼び出すだけで足し算ができるんだ!





おお!めちゃくちゃすっきりしたし、main関数の中のaddってところで足し算機能を呼び出しているんだね!



こうすることで再利用性も保守性(コードの保守のしやすさ)も高まるからいいことづくめなんだ!
【Dart】関数(メソッド)の書き方・使い方
Dartにおける関数(メソッド)の書き方は以下のようになります。
戻り値の型 関数名(引数の型 変数名,...){
// 行う処理
return 戻り値;
}



もどりち?ひきすう?わからない~!



1個ずつ解説していくよ!
戻り値とは
戻り値とは関数を呼び出した結果、受け取る値のことを指します。



値を受け取る?どういうこと?



さっきの例を戻り値があるパターンに書き換えてみようか!
.png)
.png)
結果.png)
結果.png)



8行目を見てみよう!左辺の変数に右辺の関数の結果を代入しているんだ!関数の処理の結果返ってくる値を戻り値というよ!



add(3,5)っていう関数の結果、8が返ってきたってことかな?



そう!じゃあ次は15行目から27行目の関数の部分を見ていこう。
関数の始まりにintの型が書いてあるね。これは戻り値がint型ということを指しているんだ。



なるほど!帰ってくる値、つまり戻り値の型を書けばいいんだね。
文字列が返ってくる場合はStringみたいに。



そうだね。戻り値がない関数の場合はvoidと書くよ。
ちなみに戻り値として複数の値を返すことはできないんだ。そういう時はリストなどの配列を活用しよう。
引数とは
引数とは関数に渡す値のことを指します。



関数に値を渡しているの?



8行目を見てみよう。add(3,5)となっているね。これは関数「add」に3と5のふたつの値を渡しているんだ。



なるほど!3と5を「add」っていう関数に渡して、足し算の処理をして戻り値として計算結果の8を受け取っているんだね!



その通り!引数が複数ある場合はカンマで区切って書いていくよ。



戻り値の時みたいに、関数を書く方には何か引数に関わることは書くの?



16行目の関数の定義を見てみよう。addっていう関数の名前があるね。これは自分でつけて大丈夫。
その後ろの括弧があるけど、その中にどんな引数があるかを書くんだ。
ここではint型の引数をふたつ定義しているね。つまりint型の引数がふたつ必要なんだ。



型の後ろの変数名ってのはどういうこと?



その変数はその関数内だけで使える変数で、関数を呼び出した時渡された引数の値がその変数に入るんだ!変数名も自由に決められるよ。



今回の例だとaには3が、bには5が代入される形になるんだね!呼び出した時に渡した順番通りに値が入るんだね。



引数がない関数の場合は括弧の中は何も書かなくていいからね。
return句



最後にreturn句を見てみよう。25行目だね。
returnと書いたところで関数の処理は終わり、処理が呼び出し元に戻るんだ。



returnの後ろに書いてあるのは、これが戻り値ってこと?



そう!戻り値がある場合はreturn句の後ろに戻り値を書くんだ。戻り値がない場合は後ろには何も書かないよ。戻り値がない場合はreturn句は省略できる。その場合は関数の最後まで処理は続くよ。
オプション引数とは



引数は必ず関数が指定した数を渡さなきゃならないの?



Dartでは渡しても渡さなくてもいい引数、「オプション引数」を定義できるよ。その引数に値を渡さなかった場合、その変数にはnull(何も入っていないことを示す値)が入るんだ。
オプション引数は[]で引数を囲います。
戻り値の型 関数名(引数の型 変数名,...,[オプション引数の型 オプション引数名]){
// 行う処理
return 戻り値;
}
例がこちらになります。
.png)
.png)
※int?のように型の後ろに?をつけるとnullを入れることのできるnull許容型になります。Dart言語では堅固なnull Safetyというコンセプトを持っており、nullの扱いを安全にする仕組みになっているためデフォルトではnullは入れられないようになっています。オプション引数は値が渡されない場合nullが入るので今回の例ではintのnull許容型で定義しています。
引数のデフォルト値



オプション引数だと値を渡さなかった場合nullになるのが嫌だなぁ~。
何も渡さなかったら0、とかできないかな。



できるよ!引数にはデフォルト値、つまり何も渡さなかった場合この値で処理する、という指定ができるんだ。
デフォルト値を指定する場合は、その引数を{}で囲い、デフォルト値を代入演算子で結びます。
戻り値の型 関数名(引数の型 変数名,...,{引数の型 変数名 = デフォルト値}){
// 行う処理
return 戻り値;
}
例は以下のようになります。
.png)
.png)
結果.png)
結果.png)
このように結果を見ると3つ目の引数を渡していないので10というデフォルト値で計算した結果が返ってきます。
アロー関数



関数の処理が1行で済む場合は、アロー関数という書き方で書くとかなりすっきり書けるよ。
アロー関数の書き方は以下のようになります。
戻り値の型 関数名(引数の型 変数名,...) => 処理(この結果が戻り値となる);
例はこちらになります。
.png)
.png)



=>が弓矢みたいだからアロー関数というんだね!
処理を関数でわけて見やすく扱いやすいコードに!



今回は情報量いっぱいだったけど、なんだか関数を理解したらかなり幅が広がる気がするよ!



プログラムは機能をうまく分割することが大事だからね。関数はしっかり理解しておこう!



私はDartメソッドマスターになる!
■参考文献
コメント