東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

嫌い嫌いも好きのうち

えぴちゃん居直ってます。ケツまくってます。
# こ、今回は「好きになれない」ネタじゃないからねっ

VBでイベントを試す:

Public Class Program
    ' デレゲートを定義し、
    Public Delegate Sub DoSomething()
    ' イベントを用意する
    Public Event SomethingHappen As DoSomething
    ' イベントに着火
    Public Sub Execute()
        RaiseEvent SomethingHappen()
    End Sub

    ' はとぽっぽハンドラ
    Public Sub OnSomething()
        Console.WriteLine("くるっくー")
    End Sub

    Public Shared Sub Main()
        Dim obj As New Program
        ' はとぽっぽハンドラをイベントにアタッチ
        AddHandler obj.SomethingHappen,
                   AddressOf obj.OnSomething ' [※]
        Console.WriteLine("ハトがでますよー...")
        ' 着火!
        obj.Execute()
    End Sub

End Class

違和感を覚えるのは [※] んとこ。
なんで
obj.SomethingHappen.AddHandler(obj.OnSomething)
みたいな構文にしなかったんだろ。
Eventには AddHandler/RemoveHandler/RaiseEvent メソッドが勝手に
定義されるって約束でいいぢゃん、ねぇ。

そうでなくとも、AddressOf ってキーワードがなーんか邪魔。
AddHandler obj.SomethingHappen, obj.OnSomething
でいいんじゃないの? あるいは
AddHandler obj.SomethingHappen, New DoSomething(obj.OnSomething)
とかさ。

...とか考えてて気が付いた。
VBってば引数のないSub/Functionはカッコなしで呼べるんだ。
だからobj.OnSomethingだけだとその関数を呼び出し、
戻り値をAddHandlerに渡しちゃうかも。
だから AddressOf つけて区別してんじゃないのかなー

それにしても AddressOf とはずいぶん生臭いキーワードだこと。
メモリー管理とかそんなもん気にしなくていいですよーが売りのVBで
「アドレス」なんてあまりにロコツだわ。

投稿日時 : 2008年6月13日 10:00

コメントを追加

# re: 嫌い嫌いも好きのうち 2008/06/13 10:18 はつね

AddressOf演算子ですね。VB5のときに追加になった。
関数アドレスの概念がVBにはなかったのですが、例えばEnumWindows-APIの第一パラメタとかのために(というと語弊があるかもだけれど)付かされました。

# re: 嫌い嫌いも好きのうち 2008/06/13 10:44 επιστημη

もう30年近く昔ですけど、PC-8001に搭載されたN-BASICにはユーザか作ったマシン語ルーチンを呼び出せました。
で、そいつに引数を渡すべくVARPTRって組み込み関数がありましたねぇ。
その名の通り変数のポインタを返してくれます。

# re: 嫌い嫌いも好きのうち 2008/06/13 10:55 中吉

>メモリー管理とかそんなもん気にしなくていいですよーが売りのVBで「アドレス」なんてあまりにロコツだわ。

むしろ、API呼び出しできるようにしたけれど、もまえらAPI呼ぶんだったらちゃんとメモリ管理汁!(訳:これからはAPIも使ってもいいんだからね。ちゃんと私のこと考えて使ってくれなきゃ泣いちゃうんだからね☆)
なんていう元祖ツンデレ系のキーワードなんだと思ってます。
#VB使いならAPI呼び出しに萌えて死ね!(言い杉スマソ)

これと似たこととして、VB使いが一番C系言語に拒否反応示すのは、関数やメソッドのアドレスを渡す構文だと思ってます。関数「名」やメソッド「名」がアドレスを表わす、というのが気持ち悪くて仕方がない模様。
#デリゲートとかをVB使いに教えるののまぁ大変なこと(自分の教え下手を棚に上げるな!?>中吉)

# re: 嫌い嫌いも好きのうち 2008/06/13 11:12 よねけん

> そいつに引数を渡すべくVARPTRって組み込み関数がありましたねぇ。

VBにもVarPtrは隠し関数としてありました。(他にはStrPtr、ObjPtrも。VB.NETでは廃止されましたけどね。)
APIでポインタを扱うときに利用する場合がありました。
Parentプロパティのような循環参照になるパターンを実装する場合なんかにメモリのコピーを使ってごにょごにょするときとかにも使ってみたり。

# re: 嫌い嫌いも好きのうち 2008/06/13 11:12 ネタ好き未記入

私もAddressOfを見た時おかしいと思っていました。
もし無理やりキーワードをつけるのならば、BindEventとかCallFunctionの方がいいと思います。
でも親切さを売りにしているんだからキーワードなしで、AddHandler(obj.SomethingHappen,obj.OnSomething )でいいでしょうにぃwか
もういっそうの事AddHandler obj.SomethingHappen,obj.OnSomething
AddHandlerで関数呼ぶわけ無いでしょう!ってね。
親切心が足りないぃ
親切心が足りないぃ

# re: 嫌い嫌いも好きのうち 2008/06/13 11:13 なちゃ

PEEK、POKEはないなあ…

# re: 嫌い嫌いも好きのうち 2008/06/13 11:26 επιστημη

INP,OUTP とかもなかったっけ? 覚えてねぇやw

# re: 嫌い嫌いも好きのうち 2008/06/13 11:48 επιστημη

> 親切心が足りないぃ

ぃゃぃゃぃゃぃゃ、僕にはVB.NETの要らぬ親切心こそが
好きになれない理由の大多数なので。

# re: 嫌い嫌いも好きのうち 2008/06/13 11:58 中吉

>僕にはVB.NETの要らぬ親切心こそが 好きになれない理由の大多数なので。
「小さな親切大きなお世話」これがVBの真髄っしょ^^
#お世話いただいてありがとうございます。と思えたら、VBを手放せなくなりますw

# re: 嫌い嫌いも好きのうち 2008/06/13 12:49 じゃんぬねっと

AddressOf は単に旧 VB から引きずっているのとばかり思っていましたが。

旧 VB では AddressOf の結果 (Long) を返すだけの関数とか作った時になんでやねんと思った記憶しかない。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:07 επιστημη

> AddressOf は単に旧 VB から引きずって

おそらくそうなのでしょう。

がっ! これじゃコトバの意味が違う。
AddHandlerに与えるべきは「メソッドのアドレス」
ではなく「"メソッドのアドレス"と"レシーバ"の組」
なのですから。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:12 ネタ好き未記入

今ふっと思ったのですが、επιστημηさんはもしかしたらVB.NETをハックすればするほどVB色に染まってしまうかもしれないw
第一印象が悪い人ほどちょっといい面があったら惚れてしまうのと同じ原理です。
VB.NETの良い面を見つけた時επιστημηさんはゾッコンになるに違いない(笑)

# re: 嫌い嫌いも好きのうち 2008/06/13 13:16 ネタ好き未記入

いきなりですが、AddressOfの豆知識を披露します。
実はAddressOfはイベントハンドラだけに使用するものではありません。
Threading.Thread(AddressOf fooFun)
とかにも使用します。
本当にアドレスを使用するときに使うみたいです。
VBでアドレスこれ如何に。

何ヘイか下さいw

# re: 嫌い嫌いも好きのうち 2008/06/13 13:17 επιστημη

アンタのことなんか別に何とも思っちゃいないんだからねっ(かおまっか

# re: 嫌い嫌いも好きのうち 2008/06/13 13:20 ネタ好き未記入

>アンタのことなんか別に何とも思っちゃいないんだからねっ(かおまっか
後もうちょっとでVB色に染められそうだw
よーしみんなで面白VBネタを探そう!

ついでに間違い訂正します。
誤:何ヘイか下さいw
正」何へぇか下さいw
ごめんまた間違ちゃった。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:21 επιστημη

> Threading.Thread(AddressOf fooFun)
> 本当にアドレスを使用するときに使うみたいです。

ちがうよー、コレだって
"スレッドのエントリ(アドレス)" と "エントリを持つレシーバ" の組じゃん。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:29 ネタ好き未記入

>"スレッドのエントリ(アドレス)" と "エントリを持つレシーバ" の組じゃん。

ふっふっふっふ、多分VBではこの組をアドレスと呼ぶのでしょう。
何故かって?それはVBだからなんですw
VBは勝手に用語まで作ってしまうんです。
それがユーザーフレンドリー(笑)なのだと私は理解しています。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:33 επιστημη

> それがユーザーフレンドリー

これにより、えぴのVB色染まり度17ポイント↓

# re: 嫌い嫌いも好きのうち 2008/06/13 13:40 ネタ好き未記入

しまった!ポイントを下げてしまった。
今のままではバットエンディングだw

じゃあ、VBの先進度を示す事例を挙げます。
なんとVBには結構昔からリフレクションに近い機能が
CallByName関数と言う形で提供されていました。
VBは高機能な一面がチャームポイントです。

# re: 嫌い嫌いも好きのうち 2008/06/13 13:53 επιστημη

昔がどーだったかはえぴ的にはどーでもえーです。
むしろどーでもえー昔との互換性が染まり度を下げています。
# めざせハーレムエンディング♪

# re: 嫌い嫌いも好きのうち 2008/06/13 14:00 ネタ好き未記入

じゃあ、えっと、C萌えな人が好みそうな仕様は・・・
明示性だと思うから・・・
みーつけた。
Option Compareステートメントは如何でしょうか?
このステートメントを使用すると「文字列比較方法を指定」出来ます。これを使用すれば文字を厳密に扱えます。
この仕様はどうでしょうか?

# re: 嫌い嫌いも好きのうち 2008/06/13 14:07 επιστημη

僕がVBに抱く'もやもや感'をチャラにできるほど大きくありませんねぇ...

# re: 嫌い嫌いも好きのうち 2008/06/13 14:42 ネタ好き未記入

やはりVBの仕様に納得できない私が魅力を語るのは無理があったか・・・
ヘルプミー。VBの魅力を語れる真のVB愛好家の方、人援護射撃を頼む。

# re: 嫌い嫌いも好きのうち 2008/06/13 16:43 よねけん

VB.NETのAddressOfは型推論をして適切なデリゲート型を返すキーワードです。

VBで変数を宣言するための予約語がDimであるのと同程度の歴史的な理由により意味をやや強引にこじつけてでもキーワードを無闇に増やさないように言語拡張しているが故の悲しき<del>佐賀</del>性なのです。

VB7.1からVB8.0になっていくつかの予約語がキーワードに格下げされた程に予約語は増やしたくないのです。
VB愛を持つ私はそんな設計思想を感じ取りました。

# re: 嫌い嫌いも好きのうち 2008/06/13 17:53 επιστημη

> 強引にこじつけてでも

よぉくわかります。痛いほどわかります。
C++におけるstaticのわけわかんなさに通じるものが。

# re: 嫌い嫌いも好きのうち 2008/06/13 18:15 PCだいちゅき

AddressOfがないとキモイのorz

# re: 嫌い嫌いも好きのうち 2008/06/14 0:53 とりこびと

>違和感を覚えるのは [※] んとこ。

私もです。
たぶんコンパイルエラーですからw

# 志村~!行連結!行連結!

これもVisual Basicなのですよねw

# re: 嫌い嫌いも好きのうち 2008/06/14 1:05 とりこびと

>「"メソッドのアドレス"と"レシーバ"の組」

AddressOf Instance.Method

とあるレシーバのとあるメソッドへのアドレスなのですよね?

あれ?なんかズレてます?

# re: 嫌い嫌いも好きのうち 2008/06/14 1:08 επιστημη

ま、いずれにせよ "誰に対し"と"何をしろ"の組です。

# re: 嫌い嫌いも好きのうち 2008/06/17 10:27 中吉

イベントと処理が1対1になるという信仰に近い物を持っているVBerに、マルチキャストとかパブリッシャ・サブスクライバとか言い出すと蕁麻疹が...
#個人的には、C#のイベントハンドラ追加の構文が美しくて好きです。

タイトル
名前
URL
コメント