Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

.NET系開発者から見たJava

4,276 views

Published on

第一回なごやかJavaでの発表資料です。

Published in: Technology
  • Be the first to comment

.NET系開発者から見たJava

  1. 1. .NET系開発者から見たJava bleis-tift November 30, 2014
  2. 2. 自己紹介 id:bleis-tift / @bleis なごやではたらくゆるふわF#er Java のことは忘却のかなた・・・ Java 言語のことならそれなりに詳しい・・・ はず
  3. 3. Javaとの関わり
  4. 4. わたしとJava 今すぐダウンロード 2002 年~2003 年Java を始める(1.3~1.4) 2003 年~ デザインパターン厨 2007 年Sun Tech Days 2007 in Tokyo 2009 年第一回名古屋Scala 勉強会
  5. 5. Java 1.4 今見ると感慨深い新機能群 assert 正規表現ライブラリ 例外のネスト
  6. 6. デザインパターン 今考えると感慨深いデザインパターン Iterator Command Strategy それ言語に組み込まれてるよ/ それラムダ式でで きるよ
  7. 7. Sun Tech Days 2007 in Tokyo 今思い出すと感慨深い発表内容 ラムダ式 JavaFX Script
  8. 8. 名古屋Scala 勉強会 このあたりからJava / C#からF#とかScala へ
  9. 9. .NET開発者から見た今のJava
  10. 10. ジェネリクス .NET にもあるけど、実装方法が違う(型 消去) 共通点としては、後付け うらやましいポイント 高階型の実装とかの可能性がJava にはある .NET にはない
  11. 11. ダイアモンド構文 C#ではvar、F#ではlet C#er「ださい」
  12. 12. ダイアモンド構文のだささ . Java のダイアモンド構文 . .List<String> strs = new ArrayList<>(); . C#のvar . .var strs = new List<string>(); ださい
  13. 13. ダイアモンド構文の利点 . C#のvar? . public class SomeClass { . // コンパイルエラー・・・ var strs = new List<string>(); } C#のvar はフィールドに使えない . Java のダイアモンド構文 . public class SomeClass { . // OK! List<String> strs = new ArrayList<>(); } まぁ、F#のlet はフィールドにも使えるんですけ どね!
  14. 14. インターフェイスのdefault 実装 実装クラスで実装しなくてもいいメソッド 劣化版拡張メソッド? リッチインターフェイスをシンインターフェ イスに変換できるのはうらやましいポイント
  15. 15. プリミティブ型 int とかdouble とか 効率のためというが・・・ これはJava の怠慢
  16. 16. プリミティブ型がオブジェクトとして扱えない のはJavaの怠慢 . Java ではないコード . int x = 42; . String s = x.toString(); . こういうコードと等価とみなす . int x = 42; . String s = Integer.toString(x); まぁ、拡張メソッドですね
  17. 17. enum 列挙型 null が入る以外は、C#のenum より素敵 まぁでも判別共用体の前では・・・ Java のenum もC#のenum も、ケースごとの値 が持てない
  18. 18. ケースごとの値 . アンケートを表す型的なもの(F#) . // 何で知りましたか?を表す型 type t = . | NewsPaper | TV | Internet | Etc of string これをenum でやるのは無理
  19. 19. 無名クラス その場(式) でインターフェイスを実装できる クラスの継承もできる .NET ではデリゲートで代用。でもたまに欲 しくなる F#にはある
  20. 20. try-with-resouces構文 スコープを抜けると自動でclose を呼ぶ仕組み それなんてusing F#はuse 束縛で更に良い感じに使える
  21. 21. use 束縛 . F#の例 . let f path = . use x = new StreamReader(path) // x を使って何か素敵なことをする // スコープを抜けるとx.Dispose が自動で呼び出される! . 更に素敵な例 . let f path = . // スコープは割と自由自在 let body = use x = new StreamReader(path) x.ReadToEnd() // body を使って何か素敵なことをする
  22. 22. ラムダ式 その場で関数が書ける機能 C#のラムダ式と似ているが、F#のそれとは似 ていない 構文の話ではなく、型とかの話 ラムダ式は特定の型を持つわけではない点 ジェネリックとの統合が今一つな点
  23. 23. ラムダ式とジェネリック . F#の例 . let f () = . // これができる let id = fun x -> x let a = id 42 let b = id "hoge" ()
  24. 24. .NET開発者から見た今後のJava
  25. 25. Value Types ユーザ定義できる値型 それなんてstruct ただ、use cases を見ると・・・ Algebraic data: optional(no box), choice-of, unit(no bits) Tuples: multiple-value return!(requires specialized machinery also)
  26. 26. Specialization Value Types とかプリミティブ型もジェネリク スの型引数として渡したい .NET では普通にできている 既存ライブラリとの互換性を考えると問 題も・・・ Map.get() など、null を返すメソッドどうする よの? Conditional Methods を強力にすれば解決できそ うな気もするがはたして
  27. 27. おわり

×