Upgrade to Pro — share decks privately, control downloads, hide ads and more …

C#の強み、或いは何故PHPから乗り換えるのか

 C#の強み、或いは何故PHPから乗り換えるのか

C#ユーザー会 #30

Yoshifumi Kawai

June 11, 2013
Tweet

More Decks by Yoshifumi Kawai

Other Decks in Technology

Transcript

  1. C# Everywhere Windowsアプリケーション WinForms, WPF Macアプリケーション Xamarin.Mac Windows 8アプリケーション Windows

    Store Application Webアプリケーション ASP.NET MVC, ASP.NET Web API クラウド Windows Azure, AWS ゲーム Unity, PlayStation Mobile SDK Mobile(iOS/Android/WP8) MonoTouch Mono for Android Windows Phone 8 App 組み込み/小型端末 .NET Framework Embedded netduino
  2. Type for Refactoring Ctrl + .を押してその場で確実な名前変更 コンパイルエラーを回って(エラー一覧ダブルクリックでその行に飛ぶ)書き換えたりも可 一括置換でリネーム?危なっかしい! 危なっかしいという感情は、手を止めてしまいませんか? その躊躇いが、負債を増やし続けます

    テストがあれば大丈夫だ、って?どのぐらいのカバレッジ? PHP用のIDEがあるって?実際、会社ではPHPStormを使っていて、手動置換よりは全然いい ですが安心感はそれほどない(そもそも生連想配列の箇所とかも……) 参照している別プロジェクトやユ ニットテストの名前なども、漏れ なく完全に一括で置換される
  3. Type is Speed Lightweight Languageと比較すると、重い、本当に? 何が重いって? ローカル変数を宣言するのにいちいち型指定するのがダルい ダルい。面倒。自明なことを、わざわざ意識させられるのは辛い そこで型推論! 軽い、むしろ軽い

    自動生成と違って読みやすさにも寄与する(自動生成最強、ではない) 型推論 = 静的言語と動的言語のイイとこどり! C#, OCaml, Scala, Haskell, F#, TypeScript 型をダラダラ書くJ***と$地 獄なP**は辛ぽよ C#の推論能力はこの中では最弱! ですが、強すぎる能力はIDEの入力 補完との相性が悪くなる。そのト レードオフを忘れてはならない
  4. Debugger is Power 21世紀にもなってprintfデバッグは絶対ない 弊社ではPHPはPHPStorm+Xdebugでデバッガ動かしてます Visual Studioのデバッガはそれよりも更にずっと超強力 マウスで現在のステップを 強制的に動かしてifの内部に 突っ込んで分岐した場合の

    挙動確認が容易 変数表示見やすい (コレクションの展開な ど) ウォッチウィンドウでIntelliSense効 くのが超便利(変数を代入して挙動変 えるとかもウォッチで賄える)
  5. C# is Lightweight リアルタイムエラー通知は速さ IntelliSenseは速さ 型情報は速さ 型推論は速さ 強力なデバッガは速さ C# +

    Visual Studioはロケットブースター どれだけダッシュが速かろうと、人間の脚力には限界がある 全力ダッシュの選手の横を軽々と追い抜いていく
  6. The Evolution of C# Java/Delphi Generics LINQ Dynamic Async 2002

    C# 1.0 2005 C# 2.0 2008 C# 3.0 2010 C# 4.0 2012 C# 5.0
  7. Async : PHP vs C# // 並列通信用マルチハンドルを用意 $mh = curl_multi_init();

    // 通信先ごとにCurl Handleを作り、それを $mh にaddしていく $ch_news = curl_init("http://dailynews.yahoo.co.jp/fc/entertainment/rss.xml"); curl_setopt($ch_news, CURLOPT_RETURNTRANSFER, TRUE); curl_multi_add_handle($mh, $ch_news); // 同様に $ch_music = curl_init("http://magazine.music.yahoo.co.jp/rss/ALL/rss.xml"); curl_setopt($ch_music, CURLOPT_RETURNTRANSFER, TRUE); curl_multi_add_handle($mh, $ch_music); // 同様に $ch_trend = curl_init("http://searchranking.yahoo.co.jp/rss/trend-rss.xml"); curl_setopt($ch_trend, CURLOPT_RETURNTRANSFER, TRUE); curl_multi_add_handle($mh, $ch_trend); // せーので複数の通信を同時実行。whileで全て返ってくるのを待ちます do { curl_multi_exec($mh, $running); } while ( $running ); // 個々のXMLは、それぞれのCurl Handleを指定することで取得できる $rss_news = curl_multi_getcontent($ch_news); $rss_music = curl_multi_getcontent($ch_music); $rss_trend = curl_multi_getcontent($ch_trend); // 後始末 curl_multi_remove_handle($mh, $ch_news); curl_close($ch_news); curl_multi_remove_handle($mh, $ch_music); curl_close($ch_music); curl_multi_remove_handle($mh, $ch_trend); curl_close($ch_trend); curl_multi_close($mh); // リクエストするClientの用意 var client = new HttpClient(); // 非同期リクエスト var news = client.GetStringAsync("http://dailynews.yahoo.co.jp/fc/ente var music = client.GetStringAsync("http://magazine.music.yahoo.co.jp/r var trend = client.GetStringAsync("http://searchranking.yahoo.co.jp/rs // 非同期待機 await Task.WhenAll(new[] { news, music, trend }); // 個々のXMLは変数のResultを指定するだけで取れる Console.WriteLine(news.Result); Console.WriteLine(music.Result); Console.WriteLine(trend.Result); PHPの例は以下のYahooのTech Blogより引用 http://techblog.yahoo.co.jp/architecture/api1_c url_multi/
  8. クリアなビューの価値 Razorは間違いなくテンプレートエンジンとして最先端 とにかく書きやすい! PlayのScalaTemplateも記法は同様で、影響は言及されています design was inspired by ASP.NET Razor

    ビューは複雑化する傾向にある スマフォ用のリッチなUIだと、まあしょうがないかな、とは クリアな構文は、弄りやすく、それだけで圧倒的に価値がある デザイナにお願いしやすい、とも言える そういう機会があるかはともかく、そういうフロー作れるといいな