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

Weitere ähnliche Inhalte

Was ist angesagt?

C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編道化師 堂華
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2Kenta Hattori
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1Kenta Hattori
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること信之 岩永
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~エイシュン コンドウ
 

Was ist angesagt? (20)

C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編
 
C++ tips4 cv修飾編
C++ tips4 cv修飾編C++ tips4 cv修飾編
C++ tips4 cv修飾編
 
C++ tips1 #include編
C++ tips1 #include編C++ tips1 #include編
C++ tips1 #include編
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
C言語講習会1
C言語講習会1C言語講習会1
C言語講習会1
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
C言語講習会2
C言語講習会2C言語講習会2
C言語講習会2
 
言語処理系入門€2
言語処理系入門€2言語処理系入門€2
言語処理系入門€2
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
 

Andere mochten auch

LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?Ryota Murohoshi
 
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~Fujio Kojima
 
Locality of Reference
Locality of ReferenceLocality of Reference
Locality of ReferenceKouji Matsui
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 

Andere mochten auch (6)

LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
 
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
 
Locality of Reference
Locality of ReferenceLocality of Reference
Locality of Reference
 
「var禁止」禁止
「var禁止」禁止「var禁止」禁止
「var禁止」禁止
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 

Ähnlich wie .NET系開発者から見たJava

From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To ClojureKent Ohashi
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
テストコードってすごい.pptx
テストコードってすごい.pptxテストコードってすごい.pptx
テストコードってすごい.pptxcistb220msudou
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式pocketberserker
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fundeflis
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Uehara Junji
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 

Ähnlich wie .NET系開発者から見たJava (20)

すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
テストコードってすごい.pptx
テストコードってすごい.pptxテストコードってすごい.pptx
テストコードってすごい.pptx
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
FabricとRailsと私
FabricとRailsと私FabricとRailsと私
FabricとRailsと私
 
Java研修
Java研修Java研修
Java研修
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fun
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 

Mehr von bleis tift

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documentsbleis tift
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話bleis tift
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前にbleis tift
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴るbleis tift
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~bleis tift
 
F#事例発表
F#事例発表F#事例発表
F#事例発表bleis tift
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)bleis tift
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)bleis tift
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)bleis tift
 
async/await不要論
async/await不要論async/await不要論
async/await不要論bleis tift
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)bleis tift
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリbleis tift
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLbleis tift
 
SCMBC闇LT資料
SCMBC闇LT資料SCMBC闇LT資料
SCMBC闇LT資料bleis tift
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料bleis tift
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NETbleis tift
 

Mehr von bleis tift (20)

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
札束でExcelを殴る
札束でExcelを殴る札束でExcelを殴る
札束でExcelを殴る
 
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
 
F#事例発表
F#事例発表F#事例発表
F#事例発表
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
自分戦略
自分戦略自分戦略
自分戦略
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
 
SCMBC闇LT資料
SCMBC闇LT資料SCMBC闇LT資料
SCMBC闇LT資料
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NET
 

.NET系開発者から見たJava