SlideShare a Scribd company logo
1 of 25
Download to read offline
Rubyistを誘う
Scalaの世界
@Peranikov
ドーモ、
ルビースト=サン
Scalaistデス
今日はRubyistの皆様に
Scalaの魅力を
伝えるために来ました
どうやってつたえるか
• Rubyの魅力(と思われるもの)をScalaで再現す
れば良い
• 型をなるべく書かない(Rubyistに型を見せると
死ぬ)
Scalaは純粋な
オブジェクト指向
である
1 + 2
これをな
1.+(2)
+メソッド +メソッドの引数
こうじゃ
1.+(2)
+メソッド +メソッドの引数
RubyでもScalaでも通る!
リスト操作
どっちのコードか?
[1,2,3].map { ¦i¦ i * 2 }
正解:Ruby
[1,2,3].map { ¦i¦ i * 2 }

# => [2, 4, 6]
Scalaではこう書く
List(1,2,3).map { i => i * 2 }

// => List(2, 4, 6)
さらに短く
List(1,2,3).map { _ * 2 }

// => List(2, 4, 6)
※ _ には引数が代入される
おなじみのメソッド達
• min
• max
• reduce
• zip
• unzip
Mix-In
RubyにはModule、
ScalaにはTraitがある
trait HelloModule {
def hello = "Hello!"
}
trait WorldModule {
def world = "World!"
}
class Hoge extends HelloModule with WorldModule
val hoge = new Hoge()
hoge.hello // => "Hello!"
Traitを定義
TraitをMix-In
Open Class
暗黙クラスを使う
implicit class MyString(val s: String) extends AnyVal {
def addScala = s + "Scala"
}
"Ruby is like ".addScala // => "Ruby is like Scala"
拡張したい型を指定
implicitにより暗黙的に型変換され、MyStringの
メソッドが呼ばれる
Duck Typing
がんばればできる

(structural subtyping)
type Hogeable = {
def hoge(s: String):String
}



def addFuga(t: Hogeable): String = {
t.hoge + fuga!
}
class Hoge { def hoge = hoge! }
addFuga(new Hoge()) // => hoge!fuga!
共通するメソッドを持つ
型を定義
定義した型を
引数に指定
メソッドを持っていれば
そのまま渡せる
結論
• Rubyの魅力(と思われるもの)は大体Scalaで再
現できた(はず)
• Scala書こうぜ!
終わり
メタプログラミングは?
• そんなものにふれてはいけない
メタプログラミングは???
• 一応ScalaにもReflectionやMacroが存在する
• まだEXPERIMENTAL
• 触ってみたが面倒くさかった

(Rubyほどカジュアルに使えない)

More Related Content

Viewers also liked

Camp report for_kwskrb
Camp report for_kwskrbCamp report for_kwskrb
Camp report for_kwskrbrojiuratech
 
Cookpad TechConf 2016 - DWHに必要なこと
Cookpad TechConf 2016 - DWHに必要なことCookpad TechConf 2016 - DWHに必要なこと
Cookpad TechConf 2016 - DWHに必要なことMinero Aoki
 
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLangメカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLangTakeshi Kimura
 
Juliaでオンライン線形分類器つくった
Juliaでオンライン線形分類器つくったJuliaでオンライン線形分類器つくった
Juliaでオンライン線形分類器つくったTakeshi Ishita
 
R&D at Foodtech company - #CookpadTechConf 2016
R&D at Foodtech company - #CookpadTechConf 2016R&D at Foodtech company - #CookpadTechConf 2016
R&D at Foodtech company - #CookpadTechConf 2016Aki Ariga
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Shinya Okano
 
Cloud Native Hadoop #cwt2016
Cloud Native Hadoop #cwt2016Cloud Native Hadoop #cwt2016
Cloud Native Hadoop #cwt2016Cloudera Japan
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介cyberagent
 
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化Nagato Kasaki
 
Introduction to Kanagawa Ruby Kaigi01 #kana01
Introduction to Kanagawa Ruby Kaigi01 #kana01Introduction to Kanagawa Ruby Kaigi01 #kana01
Introduction to Kanagawa Ruby Kaigi01 #kana01Aki Ariga
 
Julia 100 exercises #JuliaTokyo
Julia 100 exercises #JuliaTokyoJulia 100 exercises #JuliaTokyo
Julia 100 exercises #JuliaTokyoAki Ariga
 
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDSIbis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDSCloudera Japan
 
TEGNOLOGIA DE PUNTA
TEGNOLOGIA DE PUNTA TEGNOLOGIA DE PUNTA
TEGNOLOGIA DE PUNTA Angela yanez
 
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...COIICV
 
Nilis cert in info man - rb on 'info and know' man - 1 oct 11
Nilis   cert in info man - rb on 'info and know' man - 1 oct 11Nilis   cert in info man - rb on 'info and know' man - 1 oct 11
Nilis cert in info man - rb on 'info and know' man - 1 oct 11NILISSL
 
Notas Excel Evaluaciones
Notas Excel EvaluacionesNotas Excel Evaluaciones
Notas Excel EvaluacionesSkulleD42
 

Viewers also liked (20)

Camp report for_kwskrb
Camp report for_kwskrbCamp report for_kwskrb
Camp report for_kwskrb
 
Cookpad TechConf 2016 - DWHに必要なこと
Cookpad TechConf 2016 - DWHに必要なことCookpad TechConf 2016 - DWHに必要なこと
Cookpad TechConf 2016 - DWHに必要なこと
 
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLangメカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
 
Juliaでオンライン線形分類器つくった
Juliaでオンライン線形分類器つくったJuliaでオンライン線形分類器つくった
Juliaでオンライン線形分類器つくった
 
R&D at Foodtech company - #CookpadTechConf 2016
R&D at Foodtech company - #CookpadTechConf 2016R&D at Foodtech company - #CookpadTechConf 2016
R&D at Foodtech company - #CookpadTechConf 2016
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
Cloud Native Hadoop #cwt2016
Cloud Native Hadoop #cwt2016Cloud Native Hadoop #cwt2016
Cloud Native Hadoop #cwt2016
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化
 
Introduction to Kanagawa Ruby Kaigi01 #kana01
Introduction to Kanagawa Ruby Kaigi01 #kana01Introduction to Kanagawa Ruby Kaigi01 #kana01
Introduction to Kanagawa Ruby Kaigi01 #kana01
 
Julia 100 exercises #JuliaTokyo
Julia 100 exercises #JuliaTokyoJulia 100 exercises #JuliaTokyo
Julia 100 exercises #JuliaTokyo
 
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDSIbis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
 
TEGNOLOGIA DE PUNTA
TEGNOLOGIA DE PUNTA TEGNOLOGIA DE PUNTA
TEGNOLOGIA DE PUNTA
 
I'm happy
I'm happyI'm happy
I'm happy
 
Pbl muskuloskeletal sken_2
Pbl muskuloskeletal sken_2Pbl muskuloskeletal sken_2
Pbl muskuloskeletal sken_2
 
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...
Jose F Ruiz - Los nuevos modelos de firma electrónica - semanainformatica.com...
 
Nilis cert in info man - rb on 'info and know' man - 1 oct 11
Nilis   cert in info man - rb on 'info and know' man - 1 oct 11Nilis   cert in info man - rb on 'info and know' man - 1 oct 11
Nilis cert in info man - rb on 'info and know' man - 1 oct 11
 
13 nights of halloween
13 nights of halloween13 nights of halloween
13 nights of halloween
 
Notas Excel Evaluaciones
Notas Excel EvaluacionesNotas Excel Evaluaciones
Notas Excel Evaluaciones
 

Similar to Rubyistを誘うScalaの世界

Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Ra Zon
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門だいすけ さとう
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数amkt922
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメRuby で扱う LDAP のススメ
Ruby で扱う LDAP のススメKazuaki Takase
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope高広 内山
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)Ryuichi ITO
 

Similar to Rubyistを誘うScalaの世界 (9)

Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメRuby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
 

More from Yuto Matsukubo

がんばれテックリード!JIRA芸人篇!!
がんばれテックリード!JIRA芸人篇!!がんばれテックリード!JIRA芸人篇!!
がんばれテックリード!JIRA芸人篇!!Yuto Matsukubo
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理Yuto Matsukubo
 
Go/gRPCはじめました
Go/gRPCはじめましたGo/gRPCはじめました
Go/gRPCはじめましたYuto Matsukubo
 
非エンジニア向け技術セミナーをした話
非エンジニア向け技術セミナーをした話非エンジニア向け技術セミナーをした話
非エンジニア向け技術セミナーをした話Yuto Matsukubo
 
GCPでSplatoonの戦績を分析する
GCPでSplatoonの戦績を分析するGCPでSplatoonの戦績を分析する
GCPでSplatoonの戦績を分析するYuto Matsukubo
 
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたいYuto Matsukubo
 
Rubyistを誘うScalaの世界 2.0
Rubyistを誘うScalaの世界 2.0Rubyistを誘うScalaの世界 2.0
Rubyistを誘うScalaの世界 2.0Yuto Matsukubo
 
Intoroduction to React.js
Intoroduction to React.jsIntoroduction to React.js
Intoroduction to React.jsYuto Matsukubo
 
受託開発でAnsibleを導入した話
受託開発でAnsibleを導入した話受託開発でAnsibleを導入した話
受託開発でAnsibleを導入した話Yuto Matsukubo
 

More from Yuto Matsukubo (10)

がんばれテックリード!JIRA芸人篇!!
がんばれテックリード!JIRA芸人篇!!がんばれテックリード!JIRA芸人篇!!
がんばれテックリード!JIRA芸人篇!!
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
 
Go/gRPCはじめました
Go/gRPCはじめましたGo/gRPCはじめました
Go/gRPCはじめました
 
非エンジニア向け技術セミナーをした話
非エンジニア向け技術セミナーをした話非エンジニア向け技術セミナーをした話
非エンジニア向け技術セミナーをした話
 
GCPでSplatoonの戦績を分析する
GCPでSplatoonの戦績を分析するGCPでSplatoonの戦績を分析する
GCPでSplatoonの戦績を分析する
 
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
 
Rubyistを誘うScalaの世界 2.0
Rubyistを誘うScalaの世界 2.0Rubyistを誘うScalaの世界 2.0
Rubyistを誘うScalaの世界 2.0
 
はじめてのTDD
はじめてのTDDはじめてのTDD
はじめてのTDD
 
Intoroduction to React.js
Intoroduction to React.jsIntoroduction to React.js
Intoroduction to React.js
 
受託開発でAnsibleを導入した話
受託開発でAnsibleを導入した話受託開発でAnsibleを導入した話
受託開発でAnsibleを導入した話
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

Rubyistを誘うScalaの世界