質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • JavaScript

    19912questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

変数の正体について

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 820
退会済みユーザー

退会済みユーザー

変数の正体について改訂版JS本格入門に下記のように記載があったのですが、
アドレスに対して、人間がわかりやすいように名前を付けておく──それが変数の正体です。
変数とは「値の格納先(アドレス)に対して付けられた名札」といえます。

つまり
変数とは箱だとよくたとえられますが実際は、値の格納場所の場所を示す、
アドレスそのものにつけた名札のことなのですか?

どうもいまいちはっきりしません

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+5

JavaScriptの解説本でそこまで踏み込んだ記述があるのは珍しいですね。

コンピュータ寄りでの説明をすると正しくその通りで、値を格納した(メモリ上の)アドレスを人間側でわかりやすくするために表しているものが変数になります。

JavaScriptや他のスクリプト言語でもここまで踏み込んだ説明をしているものは少ない(と言うか、無い)ですから、なかなかイメージがつかみにくいかもしれませんね。もし、興味があれば(機会があれば)、C言語の解説本(または解説サイト)を見てみてはいかがでしょうか。メモリ操作などに密接な機構を持った言語ですので、より理解を深めることができるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/26 08:08

    ありがとうございます。
    やっぱり箱はたとえでメインメモリー上のアドレスという数列に名前を付けたものを変数というのですね。
    そして複数ある場合もある名前を付けたアドレスの、一つ一つの識別名を変数名というのですね。

    名札をが変数という教科書の言い方が私はわかりにくく、
    アドレス自体が変数ではなく名札だけを変数というのかと思ってしまいましたが、
    正しくは00110101のようなアドレスを示す数列に名前を付けたもの全体を変数といい、
    その中の名札のみに変数名が記載されているという方が正しい認識ですね。

    改訂版JS本格入門という本なのですが、かなり、難しいですし、表現が固く、単語もイディオムとか難しい単語を多用していて、
    正直初心者にはかなり難しいです。
    おそらくレベルは入門ではなく中級くらいなのでしょうね。
    サイ本に次に行きたい人が読むレベルなのでしょうね。
    ES6の本がないのでわかりにくいですが、仕方がなく購入しました。

    キャンセル

  • 2017/01/27 00:23

    >正しくは00110101のようなアドレスを示す数列に名前を付けたもの全体を変数といい、
    >その中の名札のみに変数名が記載されているという方が正しい認識ですね。
    概ね、そのような認識でいいと思います。もう少し踏み込んで言えば、あるアドレスから決められた(あるいは指定された)大きさ分確保された領域を「変数」といい、人間側で扱いやすいように宣言時に付けられた名前を「変数名」という、と言った感じでしょうか。

    ちなみに、「改訂版JS本格入門」という本は、技術評論社から出ている「改訂新版JavaScript本格入門~モダンスタイルによる基礎から現場での応用まで」(著:山田祥寛)のことでしょうか?

    キャンセル

  • 2017/01/27 08:47

    難しいですね。

    参照型は
    参照先のアドレスが変数。
    そのアドレスに人間がわかりやすいように識別名を付けた識別名が変数名。
    ということですね。

    ただ基本型は値そのものが入っていると聞きますが、
    もしかするとこれもたとえで、実際は値そのものは入っておらず参照型のようにメインメモリー上の別の場所に値は存在し、参照型のように基本型の中にもアドレスしかないということでしょうか?

    >>>
    ちなみに、「改訂版JS本格入門」という本は、技術評論社から出ている「改訂新版JavaScript本格入門~モダンスタイルによる基礎から現場での応用まで」(著:山田祥寛)のことでしょうか?

    そうです。これしかES6はないので購入しましたが、イディオムがなんだとか初心者にはわかりにくいです。おそらく中級本なんでしょうね。これがわかればサイ本に行けますかね。
    次はどれをやろうか考えないといけません。

    キャンセル

  • 2017/01/27 23:53

    >ただ基本型は値そのものが入っていると聞きますが、
    >もしかするとこれもたとえで、実際は値そのものは入っておらず参照型のようにメインメモリー上の別の
    >場所に値は存在し、参照型のように基本型の中にもアドレスしかないということでしょうか?
    いえいえ、その本の説明の通り、基本型は直接その値が格納されているものです。

    キャンセル

  • 2017/01/28 14:52

    基本型は本当に値自体が格納されているのですね。
    ありがとうございました。

    キャンセル

+3

初心者にプログラミングにおける変数を正しく理解してもらうために、「箱」という説明をするのがいいのかどうかには議論があります。

一例:
プログラミングの変数を教えるときの「箱の説明」の是非について。 - Togetterまとめ

否定派の意見を要約すると

  • 箱だとすると、複数個入れられそうに思えてしまう。
  • x = y; のようなケースで箱に箱を入れるように見えてしまわないか。
  • 同じケースで、箱に別の箱の「中身」を入れるのだとしても、「中身」のコピーではなく移動に見えてしまわないか。

という感じです。ただ、これらは、それぞれ

  • 箱にはサイズと型があって、その型に合うものを一つしか入れられない。
  • = の右辺は、箱そのものではなく、箱の中身を表す。
  • 箱の中身を使ってもなくなるわけではなく、コピーが作られる。

と、プログラミング固有のルールを合わせて教えればいいだけではないかという意見もあります。

いずれにしても、「箱」モデルは、物理的・具体的なモノをイメージした方が理解しやそうだ、という推測から導入されたモデルに過ぎません。しかし、実態は、つまり、プログラミング言語の処理系(コンパイラ)を実装する上では、変数というのは、名前と型とアドレスの組として扱います。なので、メモリを明確にイメージできるレベルに到達しているなら、「箱」にこだわらず、アドレスにつけた名前ととらえてまったく問題ありません。むしろその方が、Cなどのポインタをもつ言語でもつまずかずに済むと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/26 08:08

    ありがとうございます。
    やっぱり箱はたとえでメインメモリー上のアドレスという数列に名前を付けたものを変数というのですね。
    そして複数ある場合もある名前を付けたアドレスの、一つ一つの識別名を変数名というのですね。

    名札をが変数という教科書の言い方が私はわかりにくく、
    アドレス自体が変数ではなく名札だけを変数というのかと思ってしまいましたが、
    正しくは00110101のようなアドレスを示す数列に名前を付けたもの全体を変数といい、
    その中の名札のみに変数名が記載されているという方が正しい認識ですね。

    改訂版JS本格入門という本なのですが、かなり、難しいですし、表現が固く、単語もイディオムとか難しい単語を多用していて、
    正直初心者にはかなり難しいです。
    おそらくレベルは入門ではなく中級くらいなのでしょうね。
    サイ本に次に行きたい人が読むレベルなのでしょうね。
    ES6の本がないのでわかりにくいですが、仕方がなく購入しました。

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    19912questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。