![]() |
今回は引数の渡し方について見ていくね。 |
![]() |
引数の渡し方って? |
![]() |
例えばこういうスクリプト。 |
![]() |
このスクリプトを実行すると、何て表示されると思う? |
![]() |
えっ? …えっと、plus っていう関数は、x と y を引数として受け取って、 x に y を足してから x の値を返してるんだよね。 |
![]() |
そだね。 |
![]() |
まず x を 1、y を 2 で初期化して… それから x と y を引数にして plus 関数を呼ぶんだから、 x_plus_y は 1 + 2 で 3 になるよね。 |
![]() |
うんうん。 |
![]() |
あと、x には y の値が足されてるから 3 で、y は 2 のまま。 だから、「x = 3, y = 2, x + y = 3」って表示されるんじゃないかな。 |
![]() |
じゃあ確かめてみよっか。 |
![]() |
うん、それじゃ実行してみるね。 |
<実行結果>
![]() |
あれっ、x = 1 って表示されてるよ? |
![]() |
実は plus 関数の引数になってる x は、呼び出し元の plus(x, y) の x とは別の変数なんだ。 |
![]() |
えっ、そうなの? |
![]() |
うん。関数が実行される時に、引数の x に呼び出し元の x の値がコピーされてるんだ。 だから関数の中で x の値を書き換えても、呼び出し元の x は変わらないってワケ。 |
![]() |
へぇ、そうなんだ… |
![]() |
ただし! |
![]() |
えっ、なに?? |
![]() |
引数がオブジェクトの時は、注意が必要なんだ。 例えば、こんなふうに引数が配列の時とか。 |
![]() |
このスクリプトを実行すると… |
<実行結果(最初に表示されたメッセージ)>
<実行結果(2番目に表示されたメッセージ)>
<実行結果(3番目に表示されたメッセージ)>
![]() |
これって…呼び出し元の配列の要素の値が全部1ずつ増えたってことだよね? |
![]() |
そ。引数がオブジェクトだったら、関数の中でそのオブジェクトに属してる値を変更すると、呼び出し元の値も変わっちゃうんだ。 |
![]() |
オブジェクトに属してる値って? |
![]() |
配列や辞書配列だと、各要素の値だね。 あと、例えば Date クラスのオブジェクトだと日付の情報ってことになるね。 Date クラスのオブジェクトを引数として渡すと、関数の中で日付の情報を書き換えられるんだ。 |
![]() |
う〜ん、なんかややこしいね… |
![]() |
まぁね。でも TJS ではこうなるって決まってるから、覚えとくしかないかな。 |
![]() |
オブジェクトかどうかって、どうやったら判るの? |
![]() |
typeof 演算子で型をチェックすると "Object" になるのがオブジェクト。 typeof 演算子については §1.6 参照ね。 |
![]() |
引数って色々難しいんだね… |
![]() |
確かにね。 でも、色んな関数を作っていけば大抵のことは頭に入ると思うよ。 |
![]() |
そうなのかなぁ…? |
![]() |
ん、そんなもんだって。 じゃ、今回はここまでね。 |
![]() |
今回は短いんだね。 |
![]() |
ん、まぁ引数関係は他にもあるんだけど、ここまでで見てきた事が解れば、それなりに関数は作れると思うから。 |
![]() |
そうなの? |
![]() |
うん。だから引数の話はとりあえずここまで。 それじゃ、また次回ね。 |