VB10 の配列初期化子と型推論

投稿者: Tomotoshi Sugishita 2008年10月30日 3:00
blank_page

海の向こうでは、PDC2008 が開催中で、いろいろな話題が連日飛び込んできます。

Visual Studio 2010 のプレビュー版 (CTP) も公開され、次期 VB の言語仕様の変更点もいくつか見えてきたので、ご紹介したいと思います。

まずは、VS2008 で個人的に気になっていた、配列、コレクションの初期化子と型推論について確認してみました。

VB9(2008) では、以下のような式を記述すると、コンパイラにより v1 は Integer 型として型推論されます。

Dim v1() = {1, 2, 3, 4, 5}

このように記述した場合の v1 は Object 型の配列として扱われてしまいます。
どうやら VB9(2008) では、リテラル値や変数からの型推論はできても、配列の型推論はできないらしく、これは、

Dim v1() = New Integer() {1, 2, 3, 4, 5}

または

Dim v1 = New Integer() {1, 2, 3, 4, 5}

と記述する必要があります。
後者の方を見ると、配列の型推論もできているように思えるのですが、これは v1 に対し明示的に Integer 型の配列を代入しているので、単純な型の代入時と同じ解釈だと思います。
とりあえずはこの例のように型が決まった配列を扱う場合は、この仕様でも十分なのですが、匿名型の配列を初期化する場合にはこれが弊害となります。
匿名型の場合、当然型名を持たないのであえて書くならば、

Dim persons = New () { _
              New With {.ID = 1, .Name = "Person1"}, _
              New With {.ID = 2, .Name = "Person2"} _
             }

みたいな感じになるのでしょうか。
VB の場合、C 系言語のように配列とメソッドで使用する括弧が区別されていないので、コードパーサー上も複雑でしょうし、実際のコードを見る側としても何のこっちゃという感じですので、私の意見としては以下のような記述ができる方がより自然な形ではないのかなと思っていました。

Dim persons = { _
              New With {.ID = 1, .Name = "Person1"}, _
              New With {.ID = 2, .Name = "Person2"} _
             }

さてそこで VB10(2010) ですが、今のところは、私が期待していた仕様となっているようです。

Dim v1 = {1, 2, 3, 4, 5}

これと等価の C# のコードが

var v1 = new [] {1, 2, 3, 4, 5};

となるので、この部分の型推論については VB の方が一歩踏み込んだようなかたちになりますが、BASIC 言語の特性上せざるをえなかったということでしょうか。

ちなみに、配列の要素を複数の型でミックスした場合のルールが現行は C# と若干違うのですが、このあたりはまだ CTP なので、今後は統一していくのかもしれません。 (まぁ、普通こんなことはしないのでどうでもいいんだけど・・・。)

Dim v1 = {1I, 2L, 3D, 4.0F, 5.0R}   '(有効)Double 型の配列として解釈される

var v1 = {1, 2L, 3m, 4.0f, 5.0d}; //(無効)十進型と浮動小数点型は混在できない

最後に、さきほどの匿名型の配列の初期化コードですが、VB10(2010) では正式には以下のように

Dim persons = {
              New With {.ID = 1, .Name = "Person1"},
              New With {.ID = 2, .Name = "Person2"}
             }

なんと!VBからついに "_"(アンダースコア)が消えています!!
VB にはステップの終端文字(セミコロン)がないので、これ(コードのパース)の開発には VBTeam は相当苦労したんじゃないかなと。
限定条件があるとはいえ、これはかなりうれしいです。コードがかなり美しく見えます。つか、なにかとコードが書きやすいぞ!

それでは、今日はこんなところで。
こんなことを調べていたら、また夜中になってしまいました・・・。

また気づいたことがあったら書きます。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

タグ: ,

Visual Basic | Visual Studio

DotNetNuke でスキンを国際化

投稿者: Tomotoshi Sugishita 2008年10月24日 5:15

DotNetNuke 4.9.0 より追加になった新しいスキンオブジェクトを使用することで、スキンの国際化に対応できるようになったので、ご紹介。

Text スキンオブジェクトがそれにあたり、HTML で記述する際は、[TEXT]というトークンを使用します。
マニフェストとなる skin.xml には以下のような形で、[TEXT] トークンに対するマニフェストを指定してください。

<Object>
  <Token>[TEXT]</Token>
  <Settings>
    <Setting>
      <Name>CssClass</Name>
      <Value>任意のクラス名</Value>
    </Setting>
    <Setting>
      <Name>Text</Name>
      <Value>表示する文字列</Value>
    </Setting>
    <Setting>
      <Name>ResourceKey</Name>
      <Value>リソースファイル内のエントリー名</Value>
    </Setting>
  </Settings>
<Object>

上記を指定した上で、実際のローカライズに使用する、リソースファイルをスキンのインストールフォルダ配下のにApp_LocalResourcesフォルダに作成します。
作成については、Visual Studio を使用するのが一番手っとり早いと思います。
エントリー名については、上記マニフェストで指定したResourceKeyの値に、.Textを付加した名前で保存します。
リソースファイル名については、スキンファイルと同名のファイルに設定してください。
スキンファイル名が、index.html(index.ascx)になる場合は、index.ascx.resx になります。
日本語のリソースを作成する場合は、ロケール名をファイル名に追加します。上記の場合なら、index.ascx.ja-JP.resx。

残念ながら、現行バージョンのDNNの言語エディタでは、スキンのリソースの編集はできないため、Visual Studio やエディタで編集します。
同様にアップロードの方法も提供されていませんので、スキンといっしょにアップロードする必要があります。

詳しいところは、次回の大阪、東京の DNNJP Offsite Meeting で説明したいと思いますので、興味のある方はご参加ください。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

タグ: ,

DotNetNuke

JellyFish Deep Zoom が公開されていました

投稿者: Tomotoshi Sugishita 2008年10月24日 5:05

ちょっと出遅れましたが、先日の MIX essencial. SilverLight Day でセカンドファクトリーより発表があった、JellyFish Deep Zoom が Codeplex で公開されていました。
SilverLight 2 と同時リリースと言ってましたので、アップデートかかった時に、CodePlex を探してみたんですが、 若干時差があったらしく当時は見つからなかったので放置していて忘れていました。

http://www.codeplex.com/jellyfishDZ

これで、SilverLight なアプリケーションももっと増えてくると楽しいなと。

がんばれ、開発者!

いろいろ評価して、このブログでも取り上げていこうと思います。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

タグ:

SilverLight

ThinkPad X61 を Windows Server 2008 にしてしまいますか

投稿者: Tomotoshi Sugishita 2008年10月23日 1:04

もうかなり前からうちの X61 は メモリを4GBふるふるで Vista Untimate x64 で使ってるんですが、出張とか打ち合わせの時にちょっとメモを取るか、開発環境のサブとして使ってない状況です。
本来サブノートなので、役割としてはそれで正しいのですが、x64 の Vista で使っていてもここ半年は何の不便さや障害もなかったというか、ビジネス用途1本なのでエンターテイメント系の機能は一切使わないので、いっそのこと Windows Server 2008 x64 にしてしまおうかと思ってます。
Windows Server 2008 にしても、Aero なんかも使えるので、デスクトップとしても十分いけるわけで、ん?いっそのこと、うちの Vista 機全部 Windows Server 2008 にしてしまうかみたいな気分です。

X61を Windows Server 2008 にすることによる メリット としては Hyper-V が使えること。
既にうちの仮想環境はWindows 9x や16bit OS を除いてすべて Hyper-V で展開しているので、出先に同じ環境を持ち歩くことができます。
自宅のサーバー上で準備を行って、ノートに環境をエクスポートして客先でデモみたいな芸当ができるんですね。(わざわざデモ環境をはり直さなくてよい。)
私の場合は、セミナーなどのセッションでもこの手法が使える。もちろん VirtualPC よりも仮想環境が快適になるというのも良いです。

そんな感じで今少し悩んでます。

そういや、部屋のどこかに使っていないノート用の 100GB SATA ハードディスク(7200rpm)が転がっていたような・・・。

明日には「やっちまいました」って報告してるかもw

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

タグ: ,

PC | Windows Server

Virtual PC や Virtual Server で作成された仮想イメージを Hyper-V にマウントする際の注意点

投稿者: Tomotoshi Sugishita 2008年10月22日 18:50

とある Windows Server 2008 32 bit の Virtual PC イメージを Hyper-V で使用しようと思って、新規仮想マシンを作成し、VHDをマウントしたところ、Hyper-V 統合サービスをインストールしても、VM Bus が有効にならない罠に遭遇しました。

もちろん、旧 Virtual Machine Add-in をアンインストールしてもダメです。

いろいろ悩んだ挙句、某Mさんの情報から、ブート時の詳細オプションで”HALの検出”を有効化することで解決しました。
"HALの検出"については、msconfig.exe を起動し、ブートタブの詳細オプションで、HALの検出にチェックをつけることで有効になります。

事前に、Hyper-V統合サービスをインストールしておき、システム構成にてHALの検出の有効化後、仮想マシンを再起動します。
再起動後、Hyper-V 統合サービス関連のドライバがプラグアンドプレイで認識されます。
この後、もう一度再起動したら、準備完了です。

仮想イメージが、英語版なので、日本語言語パックを入れて、OSの日本語化もやっていました。そのあと Windows Update とかもろもろで、結局1時間以上かかったぞ。

さてさて・・・(謎)。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

タグ: , ,

Hyper-V Server | Windows Server

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen
Customized by D&UNITE Co., Ltd.

杉下 朋年

Tomotoshi Sugishita
Tomotoshi Sugishita
< D&UNITE Co., Ltd. >

Microsoft MVP
Microsoft MVP for Development Tools
- ASP/ASP.NET Jul.2009 - Jun.2010
Microsoft MVP for Development Tools
- Visual Basic Jul. 2004 - Jun. 2009

 

カレンダー

<<  2010年3月  >>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

投稿一覧をカレンダーで表示

ブログロール