SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Scott Guthrie氏 Blog翻訳

ASP.NET MVC 3:Razorで暗黙的、明示的コードナゲット

連載:ScottGu's Blog翻訳


  • X ポスト
  • このエントリーをはてなブックマークに追加

Razorでの暗黙的なコードナゲットの埋め込み方法

 Razorは、独自の言語を使用しません。Razorコードナゲット内に書くコードは、標準のC#またはVBになります。これにより、既存の言語スキルを再利用でき、独自の言語文法を習得する必要がなくなります。

 Razorパーサーにはスマートビルドがあるので、C#/VBコードナゲットの終了を明示的に示す必要がありません。これにより、コーディングがよりスムーズで生産性のあるものになり、クリーンで簡潔なよいテンプレート文法で記述できます。以下はRazorがサポートするいくつかのシナリオで、コードナゲットの開始/終了を明示的に示さず、Razorに暗黙的にコードナゲットの領域を確認させる場合のものです。

プロパティへのアクセス

 Razorでは、『ドット』表記を通じて参照される変数の値または変数上のサブプロパティを出力できます。

caption

 複数の下位レベルにあるサブプロパティにアクセスする時も、『ドット』表記が使用できます。

caption

Array/Collectionの索引付け

 Razorでは、CollectionまたはArrayに索引が付けられます。

caption

メソッドの呼び出し

 Razorでは、メソッドを呼び出せます。

caption

 上記のシナリオすべてにおいて、コードナゲットを明示的に終了させる必要がないことを確認してください。Razorは、コードブロックの終了を暗黙的に確認できています。

コードナゲットに対するRazorのパースアルゴリズム

 以下のアルゴリズムは、Razor内で『@』式をサポートし、上記の暗黙的なコードナゲットを可能にするために使用するコアのパースロジックです。

  1. 識別子をパース。C#またはVB識別子で有効でない文字を確認すると、すぐに停止し、ステップ2に移ります。
  2. カッコの確認。"("また"["があると、ステップ2.1へ、それ以外はステップ3に移ります。
    • 2.1. ")"また"]"にマッチするまでパースします(ネストされた"()"および"[]"ペアは追跡し、文字列やコメントで見つけた"()[]"は無視します)。
    • 2.2. ステップ2にもどります。
  3.  "."をチェック。もし1つあれば、ステップ3.1へ、それ以外は"."をコードとして受け入れず、ステップ4へ移ります。
    • 3.1. もし"."の後の文字が有効な識別子な場合、"."を受け入れてステップ1に戻り、それ以外はステップ4に移ります。
  4. 完了!

コードとコンテンツの識別

 ステップ 3.1は、特に上記のアルゴリズムの中で興味深く、識別子がコードステートメントの一部として使用される場合、またそれが静的なコンテンツとして扱われるべき場合のシナリオを、Razorが識別できるようになっています。

caption

 上記のスニペットで、「?」や「!」文字をコードナゲットの最後で使用している様子を確認してください。これらはどちらも正式なC#の識別子ですが、Razorはその後に空白文字が続いているので、暗黙的にそれらをコード式の一部ではなく、静的な文字列として扱うべきであることを認識できるのです。これは非常に便利で、キーストロークを減らすことができます。

Razorの明示的コードナゲット

 Razorでは、多くのコードナゲットのシナリオを暗黙的に確認できます。しかしながら、コードナゲット式の領域によっては、より明示的にしたい/する必要がある場合も、やはりあります。@(式)文法で、これを行えます。

caption

 @()文法内には、必要なC#/VBコードステートメントが書けます。Razorでは、ラップする()文字を、コードナゲットステートメントの明示的領域として扱います。以下は、明示的コードナゲット機能を使用する場合のシナリオになります。

演算/修正の実行

 明示的コードナゲットで演算が実行できます。

caption

コード式の結果にテキストを追加

 コードとして間違えてパースされないかどうかを心配することなく、コードナゲットの最後に静的なテキストを追加できる、明示的な式の文法があります。

caption

 上記では、<img>要素のsrc属性にコードナゲットを埋め込んでいます。これにより、『/Images/Beverages.jpg』のようなURLの画像とリンクできます。明示的な()がないと、RazorはCategoryName上の『.jpg』プロパティを探します(そして、エラーが発生します)。明示的にすることで、コードの終了とテキストの開始をはっきりと示すことができます。

ジェネリックとラムダ式の使用

 明示的な式により、コード式でジェネリックの型およびメソッドが使用でき、タグ要素とややこしくならないように、ジェネリックの<>文字を避けられます。

次のページ
もう1つ、属性内のIntelliSense

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Scott Guthrie氏 Blog翻訳連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト Chica(チカ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Guthrie(Scott Guthrie)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5680 2011/01/24 17:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング