参照に関する疑問


山崎  2009-10-23 09:37:50  No: 142697  IP: 192.*.*.*

String型の変数が空文字を参照することと、何も参照しないこと(Nothing)
は意味が異なります。

という、ある書籍の一節に立ち往生しております。
そもそも参照するということは、将棋に例えると、実際にコマを動かさずに
将棋盤をみながら、図表上で操作することと私なりに解釈しています。

しかし、上記の意味は私の錆びた頭脳では解釈が困難です。
ぜひ御教授賜りたいと思います。

編集 削除
山崎  2009-10-23 11:45:58  No: 142698  IP: 192.*.*.*

質問内容が明確になっていませんでした。
String型の変数が空文字を参照すること
Dim St  As String=""
とは、どういうことなのでしょうか?

初期化とは違うのですか

編集 削除
69403076  2009-10-23 13:24:21  No: 142699  IP: 192.*.*.*

メモリ上のアドレスが入っているか入っていないかです。

編集 削除
20629882  2009-10-23 13:56:43  No: 142700  IP: 192.*.*.*

例え話は、実際にどうなっているかを勉強した人が、分かり易いように置き換えるから
有効なのであって、自分の都合のいいように解釈する為のものではありません。

編集 削除
聖帝  2009-10-23 22:10:42  No: 142701  IP: 192.*.*.*

やまさきさんは、VBをやったことあるの?
質問者に質問して、すいません^^;

編集 削除
将星  2009-10-24 23:39:16  No: 142702  IP: 192.*.*.*

> Dim St  As String=""
> 初期化とは違うのですか
>
初期化というのは初期値を代入することをいうので、多分、山崎さんのおっ
しゃっている初期化とは別物ですね。初期化というのは""以外を代入した場
合もさすので。
例えばあるプログラムでは初期化として変数に"ABC"を代入する行為を初期
化いう場合もあります。
因みに初期値が代入されない場合は、VBがNothingで初期化してくれていま
す。

> メモリ上のアドレスが入っているか入っていないかです。
>
この表現は微妙だと思うぞ。
どちらかというと使用できる領域が確保されてるか、されてないかの方が
近そう。

#C言語の話だが、NULLは領域未確保状態を表すのでVBもそれを踏襲してい
#るのだと思う。(MSに「そうなの?」と聞いたことがないので推測という
#ことで...MSを探せば資料でるかな?)


山崎さんへ:
本の作者に「↓のプログラム組んだら出力ウィンドウに「空文字Nothing」
って出たんだけど何が違うんだ?」と質問してみるのもいいかもwww
まぁ、質問前に山崎さんがコードコピペして出力されることを確認してから
だろうけど。。。

Dim St As String
if St = "" then
   console.write("空文字")
end if
if St Is Nothing then
   console.write("Nothing")
end if

編集 削除
聖帝  2009-10-25 22:39:57  No: 142703  IP: 192.*.*.*

無理だと思うよ。理解するのは。
そもそも、VBしかやったことの無い人はメモリーの確保がわからないと思うからです。
入門者になったばかりの質問者には到底理解できませんね。
なぜ回答するのでしょうか?
&H5012487、&H5012489に57、59の数字が入るとか、理解できるんでしょうか?
高速言語を知らなければ理解するのは至難の業ですよ。

編集 削除
YuO  2009-10-25 23:13:02  No: 142704  IP: 192.*.*.*

個人的には,とりあえずは無視して読み続けて,最後まで読んでも結局わからないのであれば,別の本を読むことをお勧めします。
System.Stringというのは参照型ではあるものの,リテラル表記のある特殊な型なので。
参照型一般に対するNothingがどういうものかがわかれば,System.StringにおけるNothingも同じなのでSystem.String型のインスタンスである""との違いがわかるかと思います。


メモリのアドレスとか言っている方は,もっと上位のレイヤの話をしていることに気が付いた方が良いと思います。
Cですらアドレスとはオブジェクトの各バイトを識別するための値,という程度には抽象化されています。
# この時点で「メモリ」なるものはアドレスの定義に関係しなくなっている点に注意。

編集 削除
山崎  2009-10-26 09:04:15  No: 142705  IP: 192.*.*.*

>個人的には,とりあえずは無視して読み続けて,最後まで読んでも結局わか>らないのであれば,別の本を読むことをお勧めします
アドバイス感謝いたします。
すべてを理解しなければ前にはすすめないと思っていた自分に気づきました。
理解できない部分は、今後学習をすすめていく過程で解決できると考えて
信じて、ゆっくり焦らずに学んでいこうと思います。

編集 削除
魔界の仮面弁士  2009-10-28 19:47:37  No: 142706  IP: 192.*.*.*

> そもそも参照するということは、将棋に例えると、実際にコマを動かさずに
> 将棋盤をみながら、図表上で操作することと私なりに解釈しています。

将棋に喩えた方が良いのであれば……たとえば、
    Dim x As String = "歩"
    Dim y As String = ""
    Dim z As String = Nothing
なコードがあったとすれば、こんなイメージでどうでしょう。


<xの場合>
棋譜上では、「▲7六」と示されていました。
そのとき、実際の将棋盤上の[7六]にある駒を見ると、「歩」と彫られていました。


<yの場合>
棋譜上では、「△3二」と示されていました。
そのとき、実際の将棋盤上の[3二]にある駒を見ると、何の文字も彫られていませんでした。


<zの場合>
棋譜上に、そもそも駒の座標が記されていませんでした。

編集 削除
山崎  2009-10-29 09:21:37  No: 142707  IP: 192.*.*.*

魔界の仮面弁士さん、よくわかりました。
有り難うございます。

編集 削除