なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

比喩を使って本質を隠した説明をするときの注意点

f:id:nazuna_0124:20170403224602p:plain

試験も終わってすっきりなので、気になるところはがしがしと。


オブジェクト指向の話のところで、比喩を使っての説明はうんざり

などと言いつつ、自分もしっかり使って説明してます。


これは比喩を使った説明が2つの傾向に別れるからです。


対象の本質を例えを使ってわかりやすく説明する。


対象自体をわかりやすくするために、本質を隠して

対象を例え話を使って説明する。


私の説明が後者です。オブジェクトの理解を深めるための説明ですが、

オブジェクト指向(本質)の理解の妨げにはなるかもしれないということ。


そこで言及したいのがこちらの記事様です。

thom.hateblo.jp


のっけから全く納得がいかないので調べてみた結果判明。


完全に私の学習タイミングの問題でした。


ちょーどクラスとオブジェクトを覚えて、そうなったら

VBAの書き方も変わったのです。昔はRangeが死ぬほど嫌いでした。


オブジェクトってこうなんだー、このクラス書いた人すごいな!って矢先に

この記事を見かけたもんだから、オブジェクトでせっかく理解したのに

なぜ違うという話に??? になったのですなー。


比喩使っての説明は、相手のレベル時応じて使い分ける必要がある

というのが今回のオチでした。


ついでに、対象記事様には乗ってなかったので内容の調べた結果も残しておきます。

検索元はこちらのおふたつ。


www.relief.jp


smdn.jp


事象と理由を改めてまとめるとこうなります。

  • debug.print Sheets(1).Range(“a1”) Is Sheets(1).Range(“a1”) がtrueにならないなぜか。
  • 理由1:is演算子の比較対象の本質
  • 理由2:Rangeオブジェクトが呼び出されたときの特性


is演算子の比較対象とは?

リンク先様より。Is演算子は2つのオブジェクトを比較して

同一のオブジェクトを参照しているかを調べます。


出てきました!参照です。言及先記事様が比喩使った理由もわかるってもんです。

参照なので、要するにメモリ番地を見てるってことです。


そこでメモリ番地を調べる関数があります。ObjPtrです。

 Debug.Print ObjPtr(Sheets(1).Range("a1"))
 Debug.Print ObjPtr(Sheets(1).Range("a1"))

これを見ると一発です。確かに返ってきてる数字が違います

この数字を比較してるのがis演算子なら、falseなのは当然です。


変数に格納した同士ならTrueが返ってくるのもこれが原因だとわかります。


じゃあ なんでこんなことに?がもう1つのリンク先です。


が、Rangeとはそういうもので落ち着きそうです…

どういうわけか、呼び出される度に違うメモリ番地に格納されるのだとか。


さてさて、これで今のわたしはすっきり解決しました


が!! JAVAやってる最中だからすんなりわかる説明です。

ちょっと前だったら、こんな説明わかるわけもありません。


というわけで、大事なことなので2回め。

比喩の効果は(言われた、読んだ)相手ののレベルによって違う!