Submit Search
Upload
Scalaでプログラムを作りました
•
7 likes
•
5,027 views
Tomoharu ASAMI
Follow
ニコニコ超会議2012の超エンジニアミーティングで使用したスライドです。JavaなどのOOPをやっていて、Scalaをこれから始めたい人向けの情報提供を目的としています。
Read less
Read more
Report
Share
Report
Share
1 of 27
Download now
Download to read offline
Recommended
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉
Tomoharu ASAMI
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Recommended
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
Object-Functional Analysis and Design and Programming温泉
Object-Functional Analysis and Design and Programming温泉
Tomoharu ASAMI
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Scalaノススメ
Scalaノススメ
Yasuyuki Maeda
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
Ppl
Ppl
Seizan Shimazaki
Phantom Type in Scala
Phantom Type in Scala
Yasuyuki Maeda
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
Yusuke Hirao
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
JavaScriptことはじめ
JavaScriptことはじめ
Yuki Ishikawa
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
Java使いにとっての関数
Java使いにとっての関数
amkt922
JavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
Toshihiro Nakamura
Thinking in Cats
Thinking in Cats
Eugene Yokota
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
More Related Content
What's hot
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Scalaノススメ
Scalaノススメ
Yasuyuki Maeda
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
Ppl
Ppl
Seizan Shimazaki
Phantom Type in Scala
Phantom Type in Scala
Yasuyuki Maeda
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
Yusuke Hirao
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
JavaScriptことはじめ
JavaScriptことはじめ
Yuki Ishikawa
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
Java使いにとっての関数
Java使いにとっての関数
amkt922
JavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
Toshihiro Nakamura
Thinking in Cats
Thinking in Cats
Eugene Yokota
What's hot
(20)
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Yesodを支える技術
Yesodを支える技術
Scalaノススメ
Scalaノススメ
はてなブックマーク in Scala
はてなブックマーク in Scala
Ppl
Ppl
Phantom Type in Scala
Phantom Type in Scala
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
JavaScriptことはじめ
JavaScriptことはじめ
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yesod勉強会
Yesod勉強会
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
Java使いにとっての関数
Java使いにとっての関数
JavaScriptクイックスタート
JavaScriptクイックスタート
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
Thinking in Cats
Thinking in Cats
Similar to Scalaでプログラムを作りました
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
Express Web Application Framework
Express Web Application Framework
LearningTech
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Tomoharu ASAMI
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
Nakazawa Yuichi
scala+liftで遊ぼう
scala+liftで遊ぼう
youku
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
Wakanda#1
Wakanda#1
kmiyako
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Shumpei Shiraishi
Angular js はまりどころ
Angular js はまりどころ
Ayumi Goto
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
Tomoharu ASAMI
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Ember.js the Second Step
Ember.js the Second Step
Dopin Ninja
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Toshiaki Maki
Similar to Scalaでプログラムを作りました
(20)
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Express Web Application Framework
Express Web Application Framework
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
scala+liftで遊ぼう
scala+liftで遊ぼう
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Wakanda#1
Wakanda#1
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Angular js はまりどころ
Angular js はまりどころ
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Ember.js the Second Step
Ember.js the Second Step
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
More from Tomoharu ASAMI
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
Tomoharu ASAMI
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
Tomoharu ASAMI
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
Tomoharu ASAMI
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
Tomoharu ASAMI
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
Tomoharu ASAMI
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
Tomoharu ASAMI
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
Tomoharu ASAMI
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
Tomoharu ASAMI
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
Tomoharu ASAMI
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
Tomoharu ASAMI
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
Tomoharu ASAMI
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
Tomoharu ASAMI
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
Tomoharu ASAMI
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
Tomoharu ASAMI
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
Tomoharu ASAMI
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
Tomoharu ASAMI
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
Tomoharu ASAMI
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
Tomoharu ASAMI
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
Tomoharu ASAMI
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
Tomoharu ASAMI
More from Tomoharu ASAMI
(20)
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
Scalaでプログラムを作りました
1.
Scalaで プログラムを作りました 2012年4⽉月29⽇日 匠Lab 浅海智晴
2.
⾃自⼰己紹介 • (株)匠Lab。⽇日本Javaユーザグループ副会⻑⾧長。 edge2.cc主宰。 •
代表作 • XML SmartDoc (XML⽂文書処理システム) • Relaxer (XML/Javaスキーマコンパイラ) • 開発中 • SimpleModeler (Scala DSLモデルコンパイラ) • SmartDox (⽂文書処理システム) • g3 (サービスマッシュアップフレームワーク) • g4 (Androidアプリケーションフレームワーク) • 近著 • 「上流⼯工程UMLモデリング」(⽇日経BP) • 「マインドマップではじめるモデリング講座」(翔泳社) • 「ボクらのScala」(Softbank Creative)
3.
アジェンダ • Scalaを使ってます • Scalaの使い所 •
Scalaプログラミングの魅⼒力力
4.
Scalaを使ってます
5.
Scalaで作ったプログラム SimpleModeler
https://github.com/asami/simplemodeler モデルコンパイラ Scalaファイル数: 789個、Scalaステップ数: 95K SmartDox https://github.com/asami/smartdox DSL指向⽂文書処理プロセッサ Scalaファイル数: 31個、Scalaステップ数: 3.6K g3 http://code.google.com/p/goldenport3/ クラウドアプリケーションフレームワーク(試作品) Scalaファイル数: 162個、Scalaステップ数: 22K goldenport https://github.com/asami/goldenport 内部的に使っているアプリケーションフレームワーク Scalaファイル数: 289個、Scalaステップ数: 17K
6.
SimpleModeler • DSL駆動開発×クラウド・コンピューティング
• ⾃自動コーディング・⾃自動DDD
7.
sample.org * 登場⼈人物 #+caption: 登場⼈人物⼀一覧 |
name |! |------|! | 商社 |! ! ** 顧客 #+caption: 属性⼀一覧 | name | type |! |------+--------|! | 住所 | string |! ! *** 種類 **** 個⼈人顧客 **** 法⼈人顧客 * 道具 ** 商品 *** 属性 **** 商品名 **** 定価(long)! *** 区分 **** 商品区分(第1類;第2類;第3類)! * 出来事 ** 購⼊入する *** 部品 **** 顧客 **** 商品
8.
Java $ sm -java
sample.org! /src/main/java/model/ModelContext.java! /src/main/java/model/ModelRepository.java! /src/main/java/model/ModelController.java! /src/main/java/model/ModelModel.java! /src/main/java/model/ModelErrorModel.java! /src/main/java/model/ModelModule.java! /src/main/java/model/ModelFactory.java! /src/main/java/model/ModelApplication.java! /src/main/java/model/商社.java! /src/main/java/model/DD商社.java! /src/main/java/model/DVI商社Id.java! /src/main/java/model/商品.java! /src/main/java/model/DD商品.java! /src/main/java/model/DP商品区分.java! /src/main/java/model/DVI商品Id.java! /src/main/java/model/法⼈人顧客.java! /src/main/java/model/DD法⼈人顧客.java! /src/main/java/model/顧客.java! /src/main/java/model/DD顧客.java! /src/main/java/model/DVI顧客Id.java! /src/main/java/model/購⼊入する.java! /src/main/java/model/DD購⼊入する.java! /src/main/java/model/DVI購⼊入するId.java! /src/main/java/model/個⼈人顧客.java! /src/main/java/model/DD個⼈人顧客.java!
9.
Ext-JS & Play $
sm -extjs sample.org! /public/app/model! /public/app/model/商社.js! /public/app/controller! /public/app/model/商品.js! /public/app/controller/AppController.js! /public/app/model/法⼈人顧客.js! /public/app/controller/商社Controller.js! /public/app/model/顧客.js! /public/app/controller/商品Controller.js! /public/app/model/購⼊入する.js! /public/app/controller/法⼈人顧客 /public/app/model/個⼈人顧客.js! Controller.js! /public/app/store! /public/app/controller/顧客Controller.js! /public/app/store/商社Store.js! /public/app/controller/購⼊入する /public/app/store/商品Store.js! Controller.js! /public/app/store/法⼈人顧客Store.js! /public/app/controller/個⼈人顧客 /public/app/store/顧客Store.js! Controller.js! /public/app/store/購⼊入するStore.js! /public/app/view! /public/app/store/個⼈人顧客Store.js! /public/app/view/AppView.js! /conf! /public/app/view/Viewport.js! /conf/evolutions! /public/app/view/商社Grid.js! /conf/evolutions/default! /public/app/view/商社ViewForm.js! /conf/evolutions/default/1.sql.sm! /public/app/view/商社EditForm.js! /public/app/view/商品Grid.js! /public/app/view/商品ViewForm.js! /public/app/view/商品EditForm.js! /public/app/view/法⼈人顧客Grid.js! /public/app/view/法⼈人顧客ViewForm.js! /public/app/view/法⼈人顧客EditForm.js! /public/app/view/顧客Grid.js! /public/app/view/顧客ViewForm.js! /public/app/view/顧客EditForm.js! /public/app/view/購⼊入するGrid.js! /public/app/view/購⼊入するViewForm.js! /public/app/view/購⼊入するEditForm.js! /public/app/view/個⼈人顧客Grid.js! /public/app/view/個⼈人顧客ViewForm.js! /public/app/view/個⼈人顧客EditForm.js!
10.
Scala Tips • ブログ:Modegramming
Style • http://modegramming.blogspot.jp/ • Modeling + Programming = Modegramming • DSL駆動開発 • Scala Tips • Scalaプログラミングのイディオムを整備するのが⽬目的。 • Option編、Either編が終わってValidation編が終わりつつあ るところ。
11.
浅海の関数型体験 • 卒論でLispインタープリタを作成。 • OS開発の仕事をしている時に、カーネルのパニックダンプを解析するツールを
Lispで開発。実⾏行行環境のLispインタープリタは⾃自作。 • ⼀一時期Emacs-Lispに凝っていた。 • Lispを使った⼿手続き型プログラミング。 • Lisp流のリスト処理は便利。 • プログラムが⼤大きくなってくると静的型付けでないと⾟辛くなってくるのでだんだん 疎遠に。 • Javaが出てきてからLispを触ることはなくなった。 • 性能、メモリを意識していた時代。 • 1995年からはJava⼀一筋。関数型とは全く疎遠に。 • 20年近くの関数型の進化の情報が全く⽋欠落している状態。 • 2008年の夏にScalaを始める。DSLが主の⽬目的。 • 2011年の夏にあった『クラウド温泉2.0@⼩小樽』の関連企画『数学勉強会@札幌 百回記念特別勉強会「プログラマのための圏論の基礎」圏論勉強会』をきっかけに 関数型に⽬目覚める。 • 今年もあると思います! • 2011年秋にScalazを調べ始める。 • 只今修⾏行行中。道半ばです。
12.
Scalaの使い所
13.
プログラミング⾔言語の選択 • プログラミング⾔言語に求める物
• 静的型付け • Java VM • OOP • Scalaを選んだ理由 • DSL • Better Java • 並列プログラミング • 関数型 • Scalazを選んだ理由 • Promise • 並⾏行行プログラミング • 「Beyond Mere Actors」 • https://docs.google.com/present/view? id=ddmk3f43_63zpg3jcgz
14.
アプリケーションの階層と役割 アプリケー
• DSLの作法に従ってビジネスロ ジックを記述 ション • OO、関数型のスキルは最低限 • フレームワークを簡単に使⽤用する DSL ための専⽤用⾔言語 • OO、関数型の⾼高度なスキル フレーム • ドメインの共通処理を記述 ワーク • OO、関数型の⾼高度なスキル
15.
DSL (Domain Specific Language)
16.
Scalaプログラミングの魅⼒力力
17.
Scalaプログラミングの⾯面⽩白 いところ • Object-Functional Programming
(OFP) • オブジェクト脳だからOOPははずせない • オブジェクトモデリングとの連続性はOOPで確保 • 関数型プログラミング(FP)もやってみると、どうも⾯面⽩白い ようだ • データ構造はOOP、アルゴリズムはFP • Monadicプログラミング • ボイラープレートが少ない • 本質的なロジックに集中できる • DSL • 作るのも楽しい • 使うと楽チン • フレームワークAPIの技術⾰革新の軸
18.
OFP新三種の神器 トレイト (trait) •
mix-in • 型安全のAOP的な運⽤用 モナド (monad) • 計算⽂文脈をカプセル化する新しい⾔言語概念 • Monadicプログラミング 型クラス (type class) • 型安全のダブルディスパッチ(?) • Scalaでは、⽂文脈、主体、客体の組でメソッドを選択
19.
コーディング⽐比較 Java⾵風 def validate(name:
String, age: Int): ValidationNEL[Throwable, (String, Int)] = {! val a = validateName(name) ! val b = validateAge(age) ! if (a.isSuccess && b.isSuccess) { ! val a1 = a.asInstanceOf[Success[NonEmptyList[Throwable], String]].a ! val b1 = b.asInstanceOf[Success[NonEmptyList[Throwable], Int]].a ! Success((a1, b1)) ! } else if (a.isSuccess) { ! b.asInstanceOf[Failure[NonEmptyList[Throwable], (String, Int)]] ! } else if (b.isSuccess) { ! a.asInstanceOf[Failure[NonEmptyList[Throwable], (String, Int)]] ! } else { ! val a1 = a.asInstanceOf[Failure[NonEmptyList[Throwable], String]].e ! val b1 = b.asInstanceOf[Failure[NonEmptyList[Throwable], Int]].e ! Failure(a1 |+| b1) ! } ! }!
20.
Scala (関数型プログラミング) def validate(name:
String, age: Int): ValidationNEL[Throwable, (String, Int)] = { ! validateName(name) match { ! case Success(a) => validateAge(age) match { ! case Success(b) => Success((a, b)) ! case Failure(e) => Failure(e) ! } ! case Failure(e1) => validateAge(age) match { ! case Success(b) => Failure(e1) ! case Failure(e2) => Failure(e1 |+| e2) ! } ! } ! } ! Scalaz (Monadicプログラミング) def validate(name: String, age: Int): ValidationNEL[Throwable, (String, Int)] = { ! (validateName(name) ⊛ validateAge(age))((_, _)) ! }! URL: http://modegramming.blogspot.jp/2012/04/ scala-tips-validation-10-applicative.html
21.
SparkとScalding val file =
spark.textFile("hdfs://...") file.flatMap(line => line.split(" ")) Spark .map(word => (word, 1)) • http://www.spark-project.org/ .reduceByKey(_ + _) • Lightning-Fast Cluster Computing • Apache Mesos class WordCountJob(args : Args) extends Job(args) { TextLine( args("input") ).read. flatMap('line -> 'word) { line : String => line.split("s+") }. groupBy('word) { _.size }. write( Tsv( args("output") ) ) } Scalding • https://github.com/twitter/scalding • CascadingのScala DSL • Collection APIでHadoop演算
22.
Enterprise Integration
Patterns (EIP) Apache Camel Enterprise Integration Patterns • http://camel.apache.org/enterprise-integration- patterns.html RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(deadLetterChannel("mock:error")); from("seda:a") .choice() .when(header("foo").isEqualTo("bar")) .to("seda:b") .when(header("foo").isEqualTo("cheese")) .to("seda:c") .otherwise() .to("seda:d"); } };
23.
代数的構造デザインパターン 結合律 (associative law) •
半群 (semigroup) • モノイド (monoid) (a + b) + c = a + (b + c) • 群 (group) 可換律 (commutative law) • 可換半群 • 可換モノイド a+b=b+a • 可換群(アーベル群) 分配律 (distributive law) • 環 (ring) • 体 (field) a * (b + c) = a * b + a * c
24.
圏論デザインパターン
圏 (category) モナド • Hask圏 (Scala圏?) (monad) • クライスリ圏 (kleisli category) Applicative 射 (arrow, functor morphism) 関⼿手 (functor)
25.
Scalaへのアプローチ 最初はBetter Java。 • 便利なDSL利⽤用+Better
Javaで⽌止めてしまってもよい。 map系、fold系のList処理を導⼊入。 • 関数型肩慣らし。 Option, Eitherの導⼊入。 • 関数型肩慣らし。mapやfoldを活⽤用。 flatMap系の演算を導⼊入。 • Monadicプログラミング肩慣らし。 Scalaz導⼊入。 • 本格的関数型プログラミング。 • 型クラス、代数的データ型、永続データ構造。
26.
まとめ • DSLがキーテクノロジー。 • 並⾏行行プログラミングで、プログラミング・
モデルが⼤大転換するかも。 • Scalaいいよ。
27.
END
Download now