高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

初心者にお勧めできる言語 そのさん

 初心者にもお勧めできる言語って何だろう? わたしがそんなこんなを影でちょこちょこと考えているっていうのは、id:TakamiChie:20050821#1124595480とか、id:TakamiChie:20050720#1121854686を読んでる方はご存知かと思います。
さて、間が空いてしまいましたが、久々に気になる記事を見つけたので。

 id:NyaRuRuさんのところより飛んで・・・

VBにはC#にはない大きな特徴がある。遅延バインディング(Late Binding)支援機能だ。C#ではリフレクション構文を使って書かなければならないコードを、VBではあたかも型の内容を知っているかのように書くことができる。これはCOM Interop(COM相互運用)でExcelのセルを操作するようなコードを書くときなどに重宝する。

 だが一方で、Option Strict Onを無条件に推奨するような風潮の中では、VBのこの機能はVBが「本物のプログラミング言語」になるためには捨て去るべき過去の遺物のように扱われているのも事実だ。

 うーん…。たしかに。わたしもVBの文法は嫌いなどといいつつも、型変換を勝手にやってくれるというのには正直惹かれなくもないですね。プラグインベースのアプリケーションを作るときなど、一番の難所(であると思われる)参照設定周りを軽くパスできるんだったら、それほど楽なことはないです。
 そういえば前id:kanadukiさんに会ったときこの言語のこともちょっと話したのですが、「初心者にとって、型変換は障壁になりかねない」という旨のことを聞きました。
たしかに、型変換は大切です。しかし、ないならないで、別に困ってない人たちもいるんですよね、学校のみんなを見てるとくにそう思います(授業で型変換がどうのなどいわなかったおかげで(せいで?)、みんな型変換など気にもしていません)。実際型変換があるから、それが障壁になるっていうものもないかもしれないけど(別にダメならダメで、コンパイラが警告してくれるだけですしね)、ある程度の型変換は自動でやっても良いかな?なんて思うときもあります。
そもそも型変換って、大型アプリケーションを作るときに大切になるのであって、初めてnヶ月レベルの小さなプログラムでは、あんまり大切じゃないのかもしれません。あとで見ても分からないほどのスケールじゃないでしょうし、分からなくなったら「次から気をつけよう」で済む話ですしね、そのくらいなら。そうでもしないと型変換の大切さに気づかないなんてこともありそうです。
 型変換が必須かどうか?必要ではあるけど、必須にしなければいけないかな?コンパイラ側から見たら必須じゃないと困りますけど、プログラマからみるとどうでしょうね。


 でも、言語の拡張ってある意味最終手段なんじゃないでしょうか?
 言語として「好き」とか「嫌い」とかはあるでしょうし(とくにC#VBはかなりタイプの違う言語だし)、好きな言語で書けるという利点は残して欲しい。「ほんとはVBのほうが好きなんだけど、この機能を使えないから仕方なく…」っていうのはいやです。逆も然り。せっかくそんなのを気にしなくていい.NETなハズなのだから。
 前にもちょこっと書きましたけど、そのあたりを属性で何とか出来ないものでしょうか?指定したメソッドだけで名前空間をusingしたり、それ以下の空間(スコープ)でStrict Offにしたり。変数宣言不要になるってのも悪くないですね、今度はコンパイル言語ですし、「勝手にVariant型になる」なんてこともないでしょうから*1。内部関数のかわりに、(局所的な)C/C++のマクロ構文っていうのもどうでしょう?


 id:TakamiChie:20051004#1128451075 でもちょっと触れましたが、開発環境や言語のバージョンは、他のそれと比べてかなり大きいです。
VBは、7.0(VB.NET 2003)、Delphiは、9.0(Delphi 2005)、JAVA(言語そのもの)は、5.0(1.5)。知ってる限りでは割と小さいJavaScriptだって1.4です(最近は知らないけど。そもそも呼び方すら決まってないし)。
これだけの回数言語拡張が行われたという見方も出来ます(DelphiVBなど、コンポーネントが増えただけの回もあるかもしれませんけど)。
 C#――.NETは、属性なんていうちょうど良い拡張可能な要素もあって、これで上手く使えば言語拡張はない…みたいに思ってたんですが。無理なんでしょうか?
属性が一気に増えて、「事実上の2.0」といわれることはあると思いますけどね。


 最後は「初心者に勧めるプログラミング言語の話」とは無縁の話になっちゃいましたけど

*1:そういえば.NETはプリミティブ型を含め全部Objectなんだから、それくらい造作でもないかもしれませんね