5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
田中 宏明さんの投稿
(投稿ID: 3949)
参照循環ではまりそうで、頭がおかしくなりそうですが、ウォッチ式で正常に動いていることを確認できました。
小川 慶一さんのコメント
(コメントID: 5502)
実は、このプログラムでは、ファンクションプロシージャに渡した引数を戻り値として受け取る必要はありません。
以下のプログラムを実行しても分る通り、呼び出されたサブプロシージャまたはファンクションプロシージャ内で呼び出し元から受け取った引数の値が変わると、呼び出し元のプロシージャの中での当該引数も影響を受けるからです。
試しに、以下のプログラム「zenbu」を実行しみてください。
「zenbu」を実行すると、以下のような出力を得ます。
この性質については発展編2の本編では解説しませんでした。
なので、本動画では、冗長ではありますが、あえて、引数として渡したオブジェクトを戻り値として受け取るようにしています。
呼び出し先のプロシージャ内で呼び出し元から受け取った引数の値を変更したときに呼び出し元のプロシージャ内の変数も影響を受けるか?ということは、プログラミング言語によって変わります。
言語によっては、受け取った引数がデータ型か?オブジェクト型か?によって変わる場合もあります。
それぞれを称して、「実体参照」、「値参照」と呼ぶことがあります。
実体参照:
呼び出し先のプロシージャ内で受け取った引数の値を変えたとき、呼び出し元のプロシージャ内の変数も影響を受ける
値参照:
呼び出し先のプロシージャ内で受けだった引数の値を変えても、呼び出し元のプロシージャ内の変数は影響を受けない
エクセルVBAで現在サポートされているVisual Basicでは実体参照になっています。
ただ、「プログラミング言語はそういう挙動をするもの」と思うのはちょっとまずいです。
また、Excel VBAでも、将来のバージョンアップによって、値参照するような言語仕様になるかもしれません。
> この関数の使い方(参照渡しの引数を書き換えて戻り値に入れる)は、すごいです。
>
> 参照循環ではまりそうで、頭がおかしくなりそうですが、ウォッチ式で正常に動いていることを確認できました。
>
>