VB.NETに限らず、プログラミング全般において用いられているインスタンスについて質問させてください。
お聞きしたいのは「インスタンスの存在意義とは何か(インスタンスのメリットは何か)」です。
最近、VB.NETの勉強を始めたのですが、勉強のため購入した入門書で疑似乱数を発生させる処理を試していたところで問題が発生しました。
入門書には「疑似乱数を発生させるにはRandomクラスのNext()メソッドを使います」という説明がありました。
そこでサンプルコードを見ずに以下のように記述してみました。
VB
1Console.Write(Random.Next(0,10))
これでいけると思ったのですがVisual Studioからは「非共有メンバーを参照するには、オブジェクト参照が必要です。」と警告を受けてしまいました。
何が悪かったのだろうと思い、サンプルコードを参考にして以下のように修正すると正しく動作しました。
VB
1Dim rnd As Random = New Random() 2Dim num As Integer = rnd.Next(0, 10) 3Console.Write(num)
teratailに挙がっている他の質問を見させて頂いたところ、変数rndは「インスタンスを参照している変数」で、変数numは「変数rndを参照することで、ひいてはインスタンスを参照している」ということになるのかと解釈しております。
そこで(この解釈が間違っている場合、質問の前提が崩れますが)思ったのですがオブジェクト指向では何故インスタンスを利用しているのでしょうか?
後者のコードの場合、たった3行なのでパッと見ただけで処理の流れが追えますが、これが何百行にもなったり、別のファイルから変数rndを参照するとき、インスタンスを利用しなければならないと困らないのでしょうか?
Random.Next()が疑似乱数を発生させる、ということはVB.NETを勉強すれば多くの人で共有することができます。
しかし、これを変数に入れなければならないとなると変数rndを作成した人と、変数rndを作成した人から「疑似乱数を発生させたいときは変数rndを参照してね」と聞いた人にしか分からなくなりませんか?
もちろん、処理の流れを追ったり、また新たに別の変数にNew Random()したら良いのでしょうが、うーん……なんだかスマートじゃないなぁ、という気がしてなりません。
特に「変数rndに入れなくても使えるよ。けど変数に入れたほうが色々メリットがあるよ」ならわかるのですが「変数にNewして入れないと使えないよ」というのは不便だなぁと思ってしまいます。
改めて質問ですが「インスタンスの存在意義」を教えてください。
より言えば「インスタンスのメリット」をご教示頂ければ幸いです。
長くなりましたが、よろしくお願い申し上げます。
回答5件
あなたの回答
tips
プレビュー