SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

マンガで分かるプログラミング用語辞典

「参照」
~マンガでプログラミング用語解説

マンガで分かるプログラミング用語辞典(37)

解説

 参照は、少し高度なプログラムを書き始めると、必ず出てくる概念です。

 多くのプログラミング言語では、変数には数値などの値を直接格納するだけでなく、配列などのより高度な対象を格納しています。これらの数値や配列などは、実際にはメモリー上にデータとして存在しています。プログラムでは、変数の操作を通して、このメモリー上の値を書き換えます。

 またプログラムでは、変数の内容をよく、他の変数にコピーします。その際、数値などの直接的な値は、メモリー上のごく小さな範囲のデータなので、他の変数にコピーした際に、その値を丸ごと複製して、メモリー上に新しいデータ領域を確保します。

 しかし、配列などは、メモリー上でかなり大きなデータ領域を占めています。そのため、他の変数にコピーした際に、全てのデータを丸ごとコピーするのは大変です。そのため、元々変数には、そのデータ領域にアクセスする権利のみが格納されています。それは、部屋の鍵のようなもので、プログラムでは参照と呼ばれます。プログラミング言語によって、その参照は、抽象化されたアクセスする権利だったり、メモリー上の実際の位置だったりします。

 ただ、メモリーを直接操作することは、高度なことができる反面、プログラマーの技量によってバグを大量に生み出す原因にもなってしまいます。そのため、比較的新しいプログラミング言語では、参照は、数値以外のデータを扱う時などに限定されて使われ、その参照も抽象化されたデータにアクセスする権利であることが多いです。

 どちらにしろ、数値よりも複雑な配列などのデータは、変数に入っているのはたいてい参照です。そのため、変数で値をコピーした気になり、コピーした先で中身のデータを書き換えると、元のデータも書き変わるので注意が必要です。

サンプル

 参照の動作の様子が分かる処理を、JavaScriptで簡単に書いてみます。

<html>
    <head>
        <title>「参照の動作の様子が分かる処理」のサンプル</title>
    </head>
    <body>
        <pre><script type="text/javascript">
            // 配列1を作成して出力
            var arr1 = [0, 1, 2, 3, 4, 5];
            document.writeln("arr1 : " + arr1.toString());

            // 配列2にコピーして出力
            var arr2 = arr1;
            document.writeln("arr2 : " + arr2.toString());

            // 配列2を書き換えて、配列1と2を出力
            arr2[1] = 10;
            arr2[2] = 20;
            document.writeln("arr1 : " + arr1.toString());
            document.writeln("arr2 : " + arr2.toString());
        </script></pre>
    </body>
</html>
出力結果)
arr1 : 0,1,2,3,4,5
arr2 : 0,1,2,3,4,5
arr1 : 0,10,20,3,4,5
arr2 : 0,10,20,3,4,5
フィードバックお待ちしております!

 ご感想、解説して欲しい用語、解説内容のアドバイスなどございましたら、FacebookTwitterなどでお気軽に編集部までお寄せください。よろしくお願いいたします。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
マンガで分かるプログラミング用語辞典連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7333 2013/09/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー