今回は引数の渡し方について見ていくね。 | |
引数の渡し方って? | |
例えばこういうスクリプト。 |
このスクリプトを実行すると、何て表示されると思う? | |
えっ? …えっと、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 参照ね。 |
|
引数って色々難しいんだね… | |
確かにね。 でも、色んな関数を作っていけば大抵のことは頭に入ると思うよ。 |
|
そうなのかなぁ…? | |
ん、そんなもんだって。 じゃ、今回はここまでね。 |
|
今回は短いんだね。 | |
ん、まぁ引数関係は他にもあるんだけど、ここまでで見てきた事が解れば、それなりに関数は作れると思うから。 | |
そうなの? | |
うん。だから引数の話はとりあえずここまで。 それじゃ、また次回ね。 |