愚痴に近い何かになりそうな予感しかしませんが、仕事でよくVBを書く機会に遭遇するので、戸惑いと文句を備忘録的に書いてみる(よくあるやつ)
- Dimが通常宣言と型推論を兼ねてて何が何だかわからない。(VB派の方、何が正解ですか?Dim i As Integer = 0 or Dim i = 0 もっとわからないのは Dim h As New Hoge() or Dim h = Hoge())
- NameSpaceがPropertiesに隠蔽されてて闇(隠蔽されてるのを書いても無視されて更に闇)
usingImportsがPropertiesに隠蔽されてて…以下略- Iteratorが使えない!と思っていたらVS2012(Framework4.5)からMethodやPropertyだけでなくラムダ式でも使えるようになった…う、うらやましくなんか!!
- ラムダ式の型推論ができるが、そもそも宣言が冗長
- RaiseEventはnullチェックとかしなくていい
- そもそもnullがNothing
- a Is bで参照の等価判定
- 代入も比較も「=」演算子を使うので何が何だか…
- 代入は文(式ではない)ので値を返さない
usingImportsにstatic classModuleが指定できる(C#6.0より対応)あ!!VBなら某Linq to BigQueryの冗長さも一足先に解放(VBはラムダ式がそもそも冗長)- volatile is どこ? = ない(
lockSyncLockで代用する) - 整数型同士の除算の結果が浮動小数点型(double)になる(\演算子で除算するとC#と同じ結果(切捨て))
- AnonymousTypeの要素にKeyが指定でき、自動実装される値の等価とGetHushCodeに考慮される(Keyの等価が値の等価で、KeyからHushCodeが生成される)これは少しうらやましい
- コンストラクタがSub New()!
- コンストラクタチェーンで呼び出す他のコンストラクタの呼び出しタイミングが自由
- PropertyにIndexersみたいに添字が指定できる
他はよくわかりませんが…あ! Catch Whenとかもあったな…
まあ、よくわからんのですが、何とかやってますという話。