すいません、VB4しかやってないんです、VBAはやったけど(ぼそ) チラシの裏だって立派な書き込み空間なんだからねっ!資源の有効活用なんだからねっ!とか偉そうに言ってるけど、実は色々と書き残したいだけ

だからなに? どうしろと? くるみサイズの脳みそしかないあやしいジャンガリアンベムスターがさすらう贖罪蹂躙(ゴシックペナルティ)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  632  : 記事  35  : コメント  12580  : トラックバック  143

ニュース


片桐 継 は
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
関東に住みついちゃったの
和装着付師だったりするの
エセモノカキやってたりするの
VBが得意だったりするの
SQL文が大好きだったりするの
囲碁修行中だったりするの
ボトゲ好きだったりするの
F#かわいいよF#

正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


わんくまリンク

C#, VB.NET 掲示板
C# VB.NET掲示板

わんくま同盟
わんくま同盟Blog


WindowsでGo言語
WindowsでGo言語


ネット活動


SNSは疲れました

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

突然ですが、VB.NETで書くラムダについての熱い議論のページ(笑)
VBだとこうなったんだけど、ラムダってどんな書き方がかっちょええんやろ?で、本人は3パターン出したわけですが……
http://www.panopticoncentral.net/archive/2006/12/08/18587.aspx

こーしたほーが、いやこれもあるでよ、俺はRuby好きだしこれがいーなー、ちょいまてそもそもVB6だったときにはなぁー、と交わされる交わされるコメント群。言葉も国も変われど、わんくま的ノリってどこにでもあるのねー(笑) 結局のところ、ラムダってのは一つの処理をさせるのに十人十色な表現方法があって「祭り」にぴったりのものっぽい気がした。<おい

閑話休題。

私の目的はVB.NETでLambdaを書けるようにならないとな、と情報を集めていただけなんだけれど、やっぱりこれが一番判りやすいサンプルコードだと思ったデスよ。

Public Class Class1
 
    Delegate Function TransformDelegate(ByVal input As Integer) As Integer
 
    Sub ApplyTransform(ByVal array() As Integer, ByVal transform As TransformDelegate)
        For i As Integer = 0 To array.Length - 1
            array(i) = transform(array(i))
        Next
    End Sub
    Sub Main()
        Dim a() As Integer = {1, 2, 3}
        ApplyTransform(a, Function(x) x + 1)
    End Sub
 
End Class

えっと、配列を渡すとその中身に1ずつ足した配列に変わってくれる処理ってやつがVBのラムダで書かれてますです。

これを見ていて思ったのだけれど、LINQとLambdaってのは切っても切れないというか、とっても似たもの同士というか兄弟というかお互いがあってお互いがあるみたいな、そんな感じだったんですね。LINQで何ができるのかという部分がぼんやりと判ってきたところなんだけど、実はそれは、さりげにLambdaに手を染め始めていたってことであり、今回のVisualBasic9.0を触っていく上で避けて通れないんだなぁ、と。

え、今更そんなこと言ってるのか?って、だって、胡桃の脳みそなんだもん、、、
これからモンブランがおいしいよね(違っ)

投稿日時 : 2007年10月4日 22:28

コメント

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/04 22:54 επιστημη
せんせえしつもん。

こいつを任意の型で実現すべくGeneric使うとですね:
Public Class Class1
 Delegate Function TransformDelegate(Of T)(ByVal input As T) As T
 ...
 Shared Sub Main()
  Dim a() As Integer = {1, 2, 3}
  ApplyTransform(a, ココになんて書けばえぇですか?)


# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/04 23:30 片桐
んー、せんせー、任意の型っていうのは、何でも使えるぜベイベーって型でよろしいのかしらん?
私がさらっと思い浮かべたのはObject型だったんですけれど(汗)


  Delegate Function TransformDelegate(Of T)(ByVal input As T) As T

  Sub ApplyTransform(ByVal array() As Object, ByVal transform As TransformDelegate(Of Object))
    For i As Integer = 0 To array.Length - 1
      array(i) = transform(array(i))
    Next
  End Sub
  Sub Main()
    Dim a() = {1, 2, "3", 4}
    ApplyTransform(a, Function(x) x + 1)
    For Each b In a
      Console.WriteLine(String.Format("Answer:{0}", b))
    Next
    Stop
  End Sub

こんな感じで

Answer:2
Answer:3
Answer:4
Answer:5

と返せましたです。推論しまくり&かつてのvariant型を思い出すような動きですです。

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/05 0:23 επιστημη
あ、ほんとだー。追試できました。
# Objectはダメよ。任意型じゃなくて万能型だから。


# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/05 9:46 刈歩 菜良
> これからモンブランがおいしいよね(違っ)
栗は面倒くさい&お高いのでもっぱら芋モンブランです。
(^^)v

しかし、かれこれ数百年作ってないなぁ。モンブラン。

# 楽を求めるなら「既定の」は積極的に使用すべき? 2007/10/05 9:59 とりこびと ぶろぐ。
楽を求めるなら「既定の」は積極的に使用すべき?

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/05 11:55 とっちゃん
モンブラン...最近どっかで一杯見た...
あ、ナンジャタウンでイベントやってんだ!

でも...久しく口にしてないですw


# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/05 21:10 片桐
>えぴさん

追試、いやんな言葉ですですですです。
任意の型っていうのは、好きな型でプログラム作ってよかったってことでしょうか?

>かるぼさん
おいしーい、芋モンブラン希望

>とっちゃんさん
うん、モンブランは好きなんだけどね、タマゴがね(遠い目)

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/05 23:11 Streetw☆
          ふぅーふぅー↑
えぴさんのってこういうことじゃないですか?

xは型が推論されるのでそれに見合うオーバーロードを用意しておく感じで、「ココになんて」のところは変わらないと思います。

Sub ApplyTransform( _
    ByVal array() As String, _
    ByVal transform As TransformDelegate(Of String))
  ・・・
End Sub

Dim aos() As String = {"a", "b", "c"}
ApplyTransform(aos, Function(x) x.ToUpper())

試しに変なことしてみたら、実行時にInvalidCastExceptionが発生しました。
array(i)はstringだってわかるんだから、ApplyTransformの中でコンパイルエラーになるかと思ったんだけど...

Sub ApplyTransform( _
    ByVal array() As String, _
    ByVal transform As TransformDelegate(Of Integer))
  For i As Integer = 0 To array.Length - 1
    array(i) = transform(array(i))
  Next
End Sub

Dim aos() As String = {"a", "b", "c"}
ApplyTransform(aos, Function(x As Integer) x)


# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/06 8:09 片桐
>Streetw☆さん
どもですー
遅延バインドもどきな動きがあるようなんですよ、私も色々とサンプルコードをいじってて、首を何度か傾げましたがw

of T の T がTypeってことなんだな、とやっとわかってきました。Tを好きにして良いコードなら、確かにFunctionでの使い方さえ意識しておけば簡単にラムダれるんだなってことで解釈してます、私w

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/09 9:25 かるあ
TransformDelegate を Func(Of String, Integer) にしちゃうとか。

# re: あついぜ!Lambda!火を噴くぜ!←うそw 2007/10/09 9:27 かるあ
あっ (Of String, Integer) だと InvalidCastException だ(w

Post Feedback

タイトル
名前
Url:
コメント