Submit Search
Upload
【LT】akka receive とScala Javaの違い
•
Download as PPTX, PDF
•
1 like
•
706 views
賢太郎 前多
Follow
2017/3/21 アドテクスタジオ×Scala 勉強会 LT。 https://adtechstudio.connpass.com/event/50607/
Read less
Read more
Software
Report
Share
Report
Share
1 of 12
Download now
Recommended
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
akka-doc-ja
akka-doc-ja
TIS Inc.
Akka actorを何故使うのか?
Akka actorを何故使うのか?
Nyle Inc.(ナイル株式会社)
Akka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
Akka入門
Akka入門
Masashi (Jangsa) Kawaguchi
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
Akka meetup 2014_sep
Akka meetup 2014_sep
masahitojp
Recommended
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
akka-doc-ja
akka-doc-ja
TIS Inc.
Akka actorを何故使うのか?
Akka actorを何故使うのか?
Nyle Inc.(ナイル株式会社)
Akka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
Akka入門
Akka入門
Masashi (Jangsa) Kawaguchi
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
Akka meetup 2014_sep
Akka meetup 2014_sep
masahitojp
実践Akka
実践Akka
Huy Do
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
TanUkkii
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
Real world android akka
Real world android akka
Taisuke Oe
Scala警察のすすめ
Scala警察のすすめ
takezoe
JavaからScalaへ
JavaからScalaへ
takezoe
Developing an Akka Edge6
Developing an Akka Edge6
saaaaaaki
Developing an Akka Edge1-3
Developing an Akka Edge1-3
saaaaaaki
ScalaにまつわるNewsな話
ScalaにまつわるNewsな話
Yosuke Mizutani
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
実戦Scala
実戦Scala
Yuto Suzuki
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
Godai Nakamura
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
都元ダイスケ Miyamoto
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
Developing an Akka Edge4-5
Developing an Akka Edge4-5
saaaaaaki
明日から業務で使うScala
明日から業務で使うScala
martin_lover_ca
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
More Related Content
What's hot
実践Akka
実践Akka
Huy Do
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
TanUkkii
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
Real world android akka
Real world android akka
Taisuke Oe
Scala警察のすすめ
Scala警察のすすめ
takezoe
JavaからScalaへ
JavaからScalaへ
takezoe
Developing an Akka Edge6
Developing an Akka Edge6
saaaaaaki
Developing an Akka Edge1-3
Developing an Akka Edge1-3
saaaaaaki
ScalaにまつわるNewsな話
ScalaにまつわるNewsな話
Yosuke Mizutani
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
実戦Scala
実戦Scala
Yuto Suzuki
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
Godai Nakamura
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
都元ダイスケ Miyamoto
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
Developing an Akka Edge4-5
Developing an Akka Edge4-5
saaaaaaki
What's hot
(20)
実践Akka
実践Akka
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
Real world android akka
Real world android akka
Scala警察のすすめ
Scala警察のすすめ
JavaからScalaへ
JavaからScalaへ
Developing an Akka Edge6
Developing an Akka Edge6
Developing an Akka Edge1-3
Developing an Akka Edge1-3
ScalaにまつわるNewsな話
ScalaにまつわるNewsな話
Scala.jsはじめました!
Scala.jsはじめました!
Scala.jsはじめました?
Scala.jsはじめました?
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
ネタじゃないScala.js
ネタじゃないScala.js
実戦Scala
実戦Scala
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
Developing an Akka Edge4-5
Developing an Akka Edge4-5
Viewers also liked
明日から業務で使うScala
明日から業務で使うScala
martin_lover_ca
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
Recruit Lifestyle Co., Ltd.
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
Yota Ishida
【講演資料】激変する自動車業界におけるクルマ屋の戦略
【講演資料】激変する自動車業界におけるクルマ屋の戦略
naoto kyo
リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介
Recruit Technologies
Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon, a new chat messaging backend system build on Scala
TanUkkii
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]
Shinichi Kozake
DSLの使い所
DSLの使い所
disc99_
Smart World
Smart World
Azamat Abdoullaev
Akka stream
Akka stream
Masaki Toyoshima
Proxies are Awesome!
Proxies are Awesome!
Brendan Eich
Apache Spark チュートリアル
Apache Spark チュートリアル
K Yamaguchi
Intelligent world
Intelligent world
Azamat Abdoullaev
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Yahoo!デベロッパーネットワーク
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
Yahoo!デベロッパーネットワーク
AWS Black Belt Online Seminar Antipattern
AWS Black Belt Online Seminar Antipattern
Amazon Web Services Japan
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
Amazon Web Services Japan
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo!デベロッパーネットワーク
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shell
jaguardesignstudio
Viewers also liked
(20)
明日から業務で使うScala
明日から業務で使うScala
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
【講演資料】激変する自動車業界におけるクルマ屋の戦略
【講演資料】激変する自動車業界におけるクルマ屋の戦略
リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介
Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon, a new chat messaging backend system build on Scala
Kotlinで関数拡張しちゃうぞ![修正版]
Kotlinで関数拡張しちゃうぞ![修正版]
DSLの使い所
DSLの使い所
Smart World
Smart World
Akka stream
Akka stream
Proxies are Awesome!
Proxies are Awesome!
Apache Spark チュートリアル
Apache Spark チュートリアル
Intelligent world
Intelligent world
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
AWS Black Belt Online Seminar Antipattern
AWS Black Belt Online Seminar Antipattern
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shell
Similar to 【LT】akka receive とScala Javaの違い
Java使いにとっての関数
Java使いにとっての関数
amkt922
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
こわくないScala
こわくないScala
FScoward
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Trait in scala
Trait in scala
Yuta Shimakawa
Play frameworkについて
Play frameworkについて
Shinobu Okano
Scala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
Survey of Apache Spark
Survey of Apache Spark
Mila, Université de Montréal
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
Shuya Tsukamoto
Next Language Scala
Next Language Scala
pengin01
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
Hideyuki Takeuchi
Scalaはじめました!
Scalaはじめました!
Asami Abe
Scala EE 7 Essentials
Scala EE 7 Essentials
tnoda
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメ
Ouka Yuka
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
Similar to 【LT】akka receive とScala Javaの違い
(20)
Java使いにとっての関数
Java使いにとっての関数
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
こわくないScala
こわくないScala
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Trait in scala
Trait in scala
Play frameworkについて
Play frameworkについて
Scala Daysに行ってみて
Scala Daysに行ってみて
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Survey of Apache Spark
Survey of Apache Spark
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
Next Language Scala
Next Language Scala
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
Scalaはじめました!
Scalaはじめました!
Scala EE 7 Essentials
Scala EE 7 Essentials
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメ
Scalaでのプログラム開発
Scalaでのプログラム開発
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
【LT】akka receive とScala Javaの違い
1.
Akkaのreceiveと Scala・Javaの違い 前多賢太郎 @kencharos
2.
内容 自己紹介 Akka
の receive は何? 部分関数とは Akka (Java)のreceiveについて
3.
自己紹介 前多賢太郎 (@kencharos)
ウルシステムズ株式会社所属 Javaプログラマー 最近の仕事 Spring(boot)のアプリケーション構築・教育 Playframework(Java) + Cassandra 案件の技術コンサル 好きなAWSサービス: Lambda 仕事以外 Scala 独学中 akka-doc-jaに参加中(みなさんもぜひ) https://github.com/akka-ja/akka-doc-ja
4.
akka の receive
を見たとき 俺の知ってる 関数の定義と何か違う いきなり始まる case とパターンマッチ メッセージを処理する関数なのに引数は? 戻り値は? パターンマッチに該当しない場合の処理は? // Actor#receive def receive = { case "ping" => { sender ! "pong" } } // 普通の関数 def func(x:String) = { "Hello" + x }
5.
def receive の定義
receiveは Receive型の戻り値を返す引数なしの抽象メソッド Receive型は, PartialFunction[Any, Unit] 型のエイリアス つまり、 receiveの中身は、PartialFunction の定義 PartialFunction? def receive: Actor.Receive type Receive = PartialFunction[Any, Unit]
6.
PartialFunction(部分関数) とは? 特定の引数について任意の処理を行うオブジェクト
特定の引数と処理の組を、パターンマッチの一覧で定義 できる 通常の関数のように呼び出せるが、マッチしない引数だ とエラー def pfSample:PartialFunction[String, Unit] = { case "John" => println("hello Jhon") case "Tony" => println("Get out! Tony") } pfSample("Jhon") // "hello!" pfSample("Tony") // "get out!" pfSample("Michel") // 実行時エラー
7.
PartialFunctionの便利機能 マッチしない引数の確認やデフォルト処理を設定できる Akka
の場合、 applyOrElse で、receiveで処理できないメッ セージをunhandled メソッドで処理している unhandledを通して、アクターの終了検知やデッドレター送付など共通処 理を行っている if (pfSample.isDefinedAt("Michel")) { pfSample("Michel") } else { "strange!" } pfSample.applyOrElse("Michel", (name:String) => s"${name} is stranger!") protected[akka] def aroundReceive(receive: Actor.Receive, msg: Any): Unit = receive.applyOrElse(msg, unhandled)
8.
PartialFunctionであることを生かす PartialFunctionは合成できる 各アクターを横断して行うメッセージの処理を
traitなどで 定義して、各アクターのreceiveに合成できる 詳しくは↓ http://doc.akka.io/docs/akka/current/scala/actors.html#Extendi ng_Actors_using_PartialFunction_chaining trait CommonProcess { this: Actor => val greeting :Receive = { case "Greeting" => sender ! s"Hello! I am ${self.path.name}" } } class SomeActor extends Actor with CommonProcess{ def receive = greeting orElse { case "ping" => { sender ! "pong" } } }
9.
Java版だとどうなの?
10.
Java の場合 unhandledを自分で呼ぶ
Java(UntypedActor)の場合、unhandledの明示的な呼び出 しが必要 Scalaと同じように書けなくてつらい でもAkkaでunhandledを呼ばせるには、メッセージ判定と メッセージ処理の2つの抽象メソッドをほぼ同じ内容で定 義する必要がある @Override public void onReceive(Object message) throws Exception { if ((message instanceof String) && ((String)message).equals("Ping")) { getSender().tell("Pong", getSelf()); } else { unhandled(message); } }
11.
将来的には改善されるかも? lambda support
(experimental) で、パターンマッチ相当 の機能が提供されるかも http://doc.akka.io/docs/akka/current/java/lambda-actors.html
12.
まとめ Akka (Scala)
は Scala の文法や機能を駆使して、書き易 いAPI を提供している パターンマッチ、PartialFunction、Implicit parameter, traitなど Akka (Java) もがんばってはいるが、型推論とパターン マッチがないと書いていてつらい unhandledの明示も抜けを防ぐ仕組みが無いのでつらい 私見だがScala・Java を使い分けるなら次のような感じ 全面的に Akka を採用するアプリケーション => Scala 既存Javaシステムの一部にAkka を組み込む => Java
Editor's Notes
Instanceof は割愛
Download now