tixture55’s diary

主にプログラミング関係の日記です。

ASP.NET入門

VSでどんな開発ができるのかなぁ、ASP.NETの文法ってどんなだろうってことで、今回はASP.NETです。

 

特徴

  • ASP.NET MVCは標準でユーザー認証が搭載(Twitter連携とかが簡単)
  • Azureへのデプロイがスムーズにできる
  • PHPみたくHogeController extends AppControllerなんて書かずにもっと書式がシンプルなイメージ

簡単なPOST値を受け取るメソッドは下記のように書ける。

public class GreetingController : ApiController
{
   // POST: api/greeting
          [HttpPost]
          public IHttpActionResult Post([FromBody]Greeting greeting)
          {
          }
}

ASP.NETC#VBも使えていいですね。プロジェクトによってはJavaよりも生産性が上がるらしいです。で下記はC#のいいところ

  • 文字列比較は == でおk
  • マウスやキーボードのイベントにフックできる。(ビープ音を鳴らしたり、どのような文字列が打ち込まれたかとかをログとして記録できる。)
  • プロパティがあるのでゲッターセッター不要
  • 型推論ができる
  • デフォルト引数、名前付き引数
  • デリゲート、ラムダ式
  • Java風の書き方ができる(finalizeはチルダで書ける。もちろんGC処理もかける。)
  • 書き方が限定的で堅牢。
  • IDEサポート(インテリセンス)
  • LINQ
  • インデクサ(クラスインスタンスを配列のプロパティ値のように利用することができるC#独特な言語仕様。
  • 強い型付けを使い、ディクショナリが使える(KeyValuePair という型になる)ディクショナリに対し、存在しないキーを指定すると、KeyNotFoundExceptionがスローされる。
  • PHPのように連想配列と配列がごちゃまぜではなく、連想配列を扱うときはDictionaryが使える。
  • モジュールを使えば、javascriptC#から実行したり、データの受け渡しが可能。逆にjavascriptからC#スクリプトを呼ぶことも可能。
  • その気になればMysqlのドライバとかも作れる。

うーん、いいですね。個人的には、継承の際、extendsッて書かなくていいのが好き。ScalaC#で選択に悩んでしまいそうになります。VBはあまり使いたいと思わないので、ASP.NET触れたら間違いなくC#一択ですよね。

 

C#の仕様周り

  • foreachはIEnumerableインターフェースを実装しているクラスしか処理できない
  • 文字列の内部表現はUTF-16
  • デリゲート型があることで、intを引数に持って、intを返すメソッドを参照できる
  • C#2.0以前とはデリゲートメソッドの定義の書き方が変わっている。(C#2.0以前のIntToInt addOne = new IntToInt (Calculator.AddOne);のような書き方をすべきではない。)
  • constで定義した場合、readonlyより実行速度が速く、switchやデフォルト引数に使え、宣言時にのみ初期化可能(コンパイル時に値が埋め込まれる)
  • readonlyは宣言時の他に、コンストラクタ内でも初期化可能
  • constが使いたいけど、使えない場合にはstatic readonly を使用できる。基本的には、static readonly を使用する。
  • 正規表現の解析エラーが発生した」時にArgumentExceptionを吐く。

デリゲート型については、内容が濃いので、別の記事で学んだことをUPしようと思います。

 

C#フレームワークASP.NET MVC

Railsのパクリらしいです。てことはwindowscakephpか・・?(笑)

特徴としては

  • Rails ゆずりの CoC (設定より規約)の精神。たとえばクラスとビューの命名だけでURLルーティング
  • MVC 4 から Web API にも対応。レスポンスとしてオブジェクトをreturnするだけで、JSONXML に自動変換してくれる。
  • MVC 5 で Bootstrap がデフォルトになり、結構イイ感じ。
  • かなり賢いモデルバインダー。
  • 企業5年以内の開発会社なら BizSpark で相当使える。
  • DBインタフェースはお好みで。

よかったぁ。cakephpよりたぶんこいつは賢そうだ! 

 

調べてみると、シンプルにjsonyaml使ったりもできるし、他の人の書いたコードを見ていると、メモリの解放のタイミングなどを意識した設計をしなくてはならないケースもあり、どことなくC言語の匂いがやっぱりするんだなぁと思いました。難易度はPHPよりも上がるけれどもやれることは大幅に拡大しそうですね。

 

参考サイト

csharp.keicode.com

qiita.com

smdn.jp