私はQiitaに一言言いたい。なぜVB.NETのタグがないのかと。
私はGitHubに一言言いたい。 Visual BasicはVBとVB.NETで区別すべきじゃない!?と。
そして一言言っておきたい。これは別に他言語に対しケンカを売っているわけではなく、VB.NETの低すぎる地位を改善するためのものです、と。
こちらの記事もぜひご一読いただきたい。Visual Basicさん、やればできる子なのに。
今まで色々な言語でプログラムを書いてきたが、VB.NETの書きやすさは群を抜いていると思う。また、書きやすさだけでなく、C#から流れてきたオブジェクト指向・関数言語型的実装も取り込んでいる多機能な言語だ。
「VB.NET?Excelマクロでしょ?」「VB.NET?昔使われてた低機能言語でしょ?」「VBといったらコードが汚くて読みづらいったらない」・・・
そんなイメージの一切を払拭する。そのための記事である。
##VB.NETの凄さ① 可読性
VB.NETでの宣言は以下のように行う(タグはないけどコードハイライトはある。サンキューQiita)。
Dim hoge As String = "xxx" '変数の宣言
Function func(name As String) As String '関数(メソッド)の宣言(戻り値がない場合Sub)
一見して分かりやすいかどうかは人によると思うが、初めて見る人にとっては、JavaやC#より分かりやすいと断言できる。なぜか? 言語の順序と宣言方法が一致しているからである。
変数 hoge は String型で 値は "xxx" である。
関数 func は引数 name で戻り値はStringである。
このように、宣言方法が言語の自然な文法順序と一致する。多くの言語は変数の宣言はまず型から、関数の宣言は戻り値が先頭に来るが正直これは分かりやすい順序とは言えない。この可読性の高さはVB.NETの強みの一つである。MustInherit
やMustOverride
、Overridable
なども分かりやすさを意識した宣言文と思う(これらはC#(に限らないが)ではabstract
やvirtual
で、プログラムの概念を理解した上でないと分かりにくい)。
なお、変数宣言については複数同時も可能だ。関連する変数宣言を1ラインにまとめ可読性を上げることができる(@corocorococoro さんより。サンキューです。)。
Dim errorCount , totalCount As Integer
Dim message As String , occuredAt As Integer
また、JavaやC#で下記のようにイライラしたことはないだろうか。
SuperLongNameClassHoge a = new SuperLongNameClassHoge()
長いクラス名を二度書かないといけないこの地獄。VB.NETは以下のように書ける。
Dim a As New SuperLongNameClassHoge()
・・・グレイト。これだけでVB.NETを選ぶのに十分な理由だ。
※C#はvarを使えば同様に書くことは可能だが、あんまり型を省略していると怒られるかもしれないので注意
##VB.NETの凄さ② 機能の豊富さ
よく言われるオブジェクト指向・関数型、これらは当然VB.NETにも実装されている。C#も同様だが、これに加えLINQに代表される.NET Frameworkの強力な機能も魅力の一つだ。その力の一端をお見せしよう。
レンタルビデオで有効期限が今日切れたものについて期限切れのメッセージを書く、という例。
Dim expired = From v As Video In Videos Where v.expire < DateTime.Now Select v
expired.ToList().ForEach(Function(x) x.notification = "有効期限切れです" )
・・・アンビリーバブル。配列要素に対するクエリ操作を可能とするLINQ、匿名関数を利用した要素処理。
これが.NET。これがVB.NETの真の姿である。
VB.NETの機能はこれに留まらない。特に文字列周りの処理。
半角全角の変換やひらがなカタカナ変換など、通常はライブラリが必要な処理もVB.NETは一発で出来る(Rubyのこのエンコード周りのぞんざいさは正直どうかしてると思う)。
Dim hankaku As String = StrConv("あいうえおかきくけこ",vbNarrow)
Dim katakana As String = StrConv("あいうえおかきくけこ",vbKatakana)
・・・アメージング。こんな日本的処理そうそうないよ、と思うかもしれないが、それはあまちゃんである。
システムの入り口はほぼ検索から始まり、検索とは非定型のユーザー文字列を内部データとマッチングさせる処理である。「どらえもん」でも「ドラエモン」でも「ドラえもん」でも同じくヒットさせる必要があるのだ。
VB.NETはVB時代に培われたそうした必須機能もしかと継承しているのである。これは長年生きている言語にしか出せない力だ。
##VB.NETの凄さ③ 開発環境によるサポート
{ } ; 。これらは一回省略する快感を覚えるとなかなか元に戻れない。VB.NETは括弧いらず・行末いらずだ。
コードの補完が効いていればまだ良いのだが、C#については補完が { だけで一行取りたがるので正直辟易とする(namespaceがあればなおさら)。そして、なぜか閉じる括弧を自動的に入れてくれない。
その点VB.NETのコード補完はかなり強力だ。If
ならEnd IF
、For
ならNext
とバリバリコードを補完してくれる。私はC#とVB.NET両方書くが、VB.NETの方が明らかに優遇されている感がある(補完がなければタイピング量が多すぎるというのも事実だが)。
書いていて全くストレスがたまらない。これもVB.NETの魅力の一つである。
まだ語り尽くせないところは多いが、少しでも魅力を感じていただけたら幸いである。
そして「VB.NETいいと思うんだけどそう言うの恥ずかしいな」と思っているそこのあなた!には、ぜひ積極的に情報を発信していただきたいと思うのだ。