タイトル画像
琴葉茜

葵は関数の返り値が複数個あっても良いって話は覚えてるかな?

琴葉葵

返り値って「return」のあとにくっ付いてる値で、関数の外に値を送れるやつだったよね!リンゴジュースとバナナジュース!!
確かおねーちゃんがすごくシレッと言ってたね

琴葉茜

そうそう、あまりにもシレッと紹介しただけだったから、ここで改めてプログラムと一緒に紹介するね

解説画像1
琴葉茜

返り値を複数個にする場合は、返ってきた先でも同じ個数だけ値を受け止める状態を作っておかないとエラーが出ちゃう点に注意してね

琴葉葵

返り値が2個なら、返り値を受け取る変数も2個用意する必要があるってことだね!

琴葉茜

一応、受け取る変数が1つの場合は「タプル型(配列型に似た型)」として受け取ることができるけど、返り値の個数だけ受け取る変数も用意しとくほうが間違いは少ないかな

琴葉茜

あと、「return」は関数に1つしか使えないと思ってしまいがちだけど、条件によって違う結果を返すために複数扱うことも可能だよ!

解説画像2
琴葉葵

そうなんだ!if文を使う時はわざわざ一度変数に入れてから返してたよ...!

琴葉葵

...ところで、わざわざ「return」をしなくても、関数の外の変数を直接更新したら良いんじゃないの??

琴葉茜

良いところに気づいたね!だけど、基本的にそれは出来ないようになってるんだ

琴葉葵

そうなの!?

琴葉茜

実は変数って、関数の外で定義する「グローバル変数」と関数の中で定義する「ローカル変数」があって、明確に区別が付けられてるんだよね

琴葉葵

それってどう違いがあるの?

琴葉茜

グローバル変数はプログラムのどこでも参照できるけど、関数内で更新はできなくて、ローカル変数は関数内でしか使えないけど、関数内なら更新もできるんだ

解説画像7
琴葉葵

なるほど、だからちゃんと返り値で関数の外に送ってあげる必要があるんだね!

琴葉茜

そういうことだね!
厳密には関数内でグローバル変数を更新する方法はあるんだけど、多用すると不具合が出やすくなるからやり方は控えておくね

琴葉葵

りょーかい!まずはちゃんと「return」に慣れるようにするよ!!

琴葉茜

じゃあ次は「引数のデフォルト値(初期値)の設定」について紹介するね

琴葉葵

初期値の設定ができるってどういうこと?

琴葉茜

前回と同じくミキサーで説明すると、例えば普段ジュースを作る時は「牛乳」を入れるけど、たまに「豆乳」に変えたいって時があるよね

琴葉葵

そこまでは意識高くないです

琴葉茜

まぁまぁ、例だから...汗

琴葉茜

だけど、その「たまに」の為に毎回「牛乳」を指定しないといけないのは面倒くさいよね

琴葉葵

たしかに!!

琴葉茜

そんな時に使えるのが「引数のデフォルト値(初期値)の設定」なんだ
やり方もシンプルで、関数の定義の時に「引数名=デフォルト値」とすれば良いよ!

解説画像3
琴葉葵

おおー!!これは簡単だし、覚えとくと便利そうだね!!

琴葉茜

だけど注意してほしいこともあって、「デフォルト値を設定する引数は、設定しない引数より必ず後ろに用意すること」だね

解説画像4
琴葉葵

ほうほう

琴葉茜

それと、デフォルト値のある関数を扱う時に「値を指定しない(デフォルト値を使う)引数」があったり無かったり混在している場合は引数名もちゃんと指定しないとエラーになる点に注意してね

解説画像5
琴葉葵

逆に言えば、関数に指定した引数の順番に引数の値を入れる場合は、引数名を指定しなくても良いんだね

琴葉茜

そういうこと

琴葉葵

上手く使える自信はないけど、思い出した時は試してみる!

琴葉茜

引数には他にも、引数の個数を指定しない「可変長引数」っていうのもあるんだけど、ちょっと扱いが難しいから存在だけ知っておけば十分かな

解説画像6
琴葉葵

あ!もしかして、「print()」の時に「,」を付けるだけで何個でも横並びで文字が表示できるのもこの仕組み!?

琴葉茜

おお!よく気づいたね!!えらい!!!

琴葉葵

(どやぁ...)