Submit Search
Upload
Scala警察のすすめ
•
8 likes
•
12,349 views
T
takezoe
Follow
#scalafukuoka
Read less
Read more
Software
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
オラクルエンジニア通信
例外設計における大罪
例外設計における大罪
Takuto Wada
頑張りすぎないScala
頑張りすぎないScala
takezoe
Recommended
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
オラクルエンジニア通信
例外設計における大罪
例外設計における大罪
Takuto Wada
頑張りすぎないScala
頑張りすぎないScala
takezoe
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
型安全性入門
型安全性入門
Akinori Abe
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
非同期処理の基礎
非同期処理の基礎
信之 岩永
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
自然言語処理 Word2vec
自然言語処理 Word2vec
naoto moriyama
More Related Content
What's hot
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
型安全性入門
型安全性入門
Akinori Abe
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
非同期処理の基礎
非同期処理の基礎
信之 岩永
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
What's hot
(20)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
型安全性入門
型安全性入門
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
できる!並列・並行プログラミング
できる!並列・並行プログラミング
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
非同期処理の基礎
非同期処理の基礎
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
Viewers also liked
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
自然言語処理 Word2vec
自然言語処理 Word2vec
naoto moriyama
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発
YujiSoftware
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
The best of AltJava is Xtend
The best of AltJava is Xtend
takezoe
MP in Clojure
MP in Clojure
Kent Ohashi
Clojure web dev history
Clojure web dev history
Ikuru Kanuma
Non-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
Javaでマサカリ投げてみた
Javaでマサカリ投げてみた
YujiSoftware
Tensor Decomposition and its Applications
Tensor Decomposition and its Applications
Keisuke OTAKI
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
Shinsuke Sugaya
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
Shinsuke Sugaya
自然言語処理
自然言語処理
naoto moriyama
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Shinsuke Sugaya
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
Shinsuke Sugaya
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
hamaken
AI社会論研究会
AI社会論研究会
Hiroshi Nakagawa
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
Shinsuke Sugaya
Viewers also liked
(20)
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
自然言語処理 Word2vec
自然言語処理 Word2vec
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
The best of AltJava is Xtend
The best of AltJava is Xtend
MP in Clojure
MP in Clojure
Clojure web dev history
Clojure web dev history
Non-Functional Programming in Scala
Non-Functional Programming in Scala
Javaでマサカリ投げてみた
Javaでマサカリ投げてみた
Tensor Decomposition and its Applications
Tensor Decomposition and its Applications
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
自然言語処理
自然言語処理
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
AI社会論研究会
AI社会論研究会
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
Similar to Scala警察のすすめ
Scala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
Scalaノススメ
Scalaノススメ
Yasuyuki Maeda
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41
Kazumune Katagiri
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
Hiroshi Ito
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
Shuya Tsukamoto
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
Hideyuki Takeuchi
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介
Kevin Toyoda
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
Trait in scala
Trait in scala
Yuta Shimakawa
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Shintaro Fukushima
Similar to Scala警察のすすめ
(20)
Scala Daysに行ってみて
Scala Daysに行ってみて
Scalaノススメ
Scalaノススメ
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
activerecord-oracle_enhanced-adapterのご紹介
activerecord-oracle_enhanced-adapterのご紹介
ATN No.2 Scala事始め
ATN No.2 Scala事始め
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
Scala.jsはじめました!
Scala.jsはじめました!
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Trait in scala
Trait in scala
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
More from takezoe
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
takezoe
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
takezoe
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
takezoe
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
takezoe
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
takezoe
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
takezoe
Type-safe front-end development with Scala
Type-safe front-end development with Scala
takezoe
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
takezoe
Macro in Scala
Macro in Scala
takezoe
Java9 and Project Jigsaw
Java9 and Project Jigsaw
takezoe
Reactive database access with Slick3
Reactive database access with Slick3
takezoe
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
takezoe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
takezoe
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
takezoe
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scala
takezoe
Play2実践tips集
Play2実践tips集
takezoe
Scala界隈の近況
Scala界隈の近況
takezoe
More from takezoe
(20)
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
Type-safe front-end development with Scala
Type-safe front-end development with Scala
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
Macro in Scala
Macro in Scala
Java9 and Project Jigsaw
Java9 and Project Jigsaw
Reactive database access with Slick3
Reactive database access with Slick3
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
ネタじゃないScala.js
ネタじゃないScala.js
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scala
Play2実践tips集
Play2実践tips集
Scala界隈の近況
Scala界隈の近況
Scala警察のすすめ
1.
Scala警察のすすめ Naoki Takezoe @takezoen BizReach, Inc
2.
有名OSSでもScala的に微妙なコードが多い ● ビッグデータ、機械学習界隈のプロダクトにこの 傾向がある ● 元々関数型界隈ではなく、ビッグデータ界隈や機 械学習界隈の人がSparkやMLlibを使うために Scalaを使っているので仕方ない ●
むしろScala警察活躍のチャンス!!!!
3.
Scala的に微妙なコードあるある
4.
その1. Procedure Syntax
5.
Procedure Syntax メソッドの戻り値がUnitの場合はメソッド定義の「=」 を省略できるという記法 def hello()
{ "Hello World!!" }
6.
なぜダメか? ● 戻り値の型がUnitになってしまう ● Javaから来た人が間違って書いてしまいがち ●
将来のバージョンのScalaでは廃止予定 def hello(): Unit = { "Hello World!!" } def hello(): String = { "Hello World!!" } こういうメソッドを定義しているつもりが・・・ 実はこうなっている
7.
どうすればよいか? Procedure Syntaxは使わない def hello():
String = { "Hello World!!" } def hello() = { "Hello World!!" } または
8.
その2. Unit is
not Unit value
9.
Unit値を返すつもりでUnitと書いてしまう def hello(): Unit
= { // ...いろいろ処理... Unit } これ
10.
なぜダメか? ● Unit値は()、UnitはUnitオブジェクト ● メソッドの戻り値など、実害はないケースが多い ので気づきにくい scala>
val x = () x: Unit = () scala> val x = Unit x: Unit.type = object scala.Unit
11.
どうすればよいか? Unitではなく()と書きましょう def hello(): Unit
= { // ...いろいろ処理... () } こう書く
12.
その3. Auto Tupling
13.
引数を自動的にタプルに変換する機能 def hello(x: (String,
String)): String = { x._1 + " " + x._2 } // 本来であればこう呼び出す hello(("Naoki", "Takezoe")) // こう書ける hello("Naoki", "Takezoe")
14.
なぜダメか? ● なぜコンパイルエラーになるのかわかりにくい ケースがある ● リファクタリング時に意図せずコンパイルが通って しまうケースがある
15.
どうすればよいか? ● Auto-Tuplingを使わずに記述する ● 名前付き引数で引数を渡す ●
Any型の引数を持つメソッドを定義する場合や、 リファクタリング時は特に注意する Scalaパズルにも 書いてある!
16.
その3. Escape by
"return"
17.
def hello(name: String):
String = { return s"Hello ${name}!" } そもそもこういう場合はreturnは不要
18.
引数チェックのEarly return def hello(names:
Seq[String]): String = { // Seqが空の場合 if(names.isEmpty) return "" // Seqに空文字列が含まれている場合 names.foreach { name => if(name.isEmpty) return "" } // 実際の処理 names.mkString(", ") }
19.
なぜダメか? ● メソッドの戻り値の型推論が効かなくなるので戻り 値の型を明示的に記述する必要がある ● 場合によっては例外にコンパイルされている (ControlThrowable)
20.
どうすればよいか? ● 不要な場合は書かない ● if
elseやコレクション操作に置き換える ● 使う場合は例外処理に気をつける
21.
def hello(names: Seq[String]):
String = { // Seqが空の場合 if(names.isEmpty) "" // Seqに空文字列が含まれている場合 else if(names.exists(_.isEmpty) "" // 実際の処理 else names.mkString(", ") }
22.
例外処理をする場合 ● Throwableでキャッチしない ● Throwableもキャッチする必要がある場合は NonFatalを使う try
{ // ...処理... } catch { case NonFatal(t) => t.printStackTrace() } ControlThrowableなどは マッチしない
23.
他にもよくあるパターン ● varやmutableコレクション ○ ループカウンタやコレクションの詰め替え処理など ●
whileループ ○ varやmutableなコレクションと組み合わせで使用されてい ることが多い ○ returnやbreakなどとの合わせ技担っている場合も
24.
ループカウンタが必要な場合 var i =
1 seq.foreach { x => println(s"${i}: ${x}") i = i + 1 }
25.
zipWithIndexを使う seq.zipWithIndex.foreach { case
(x, i) => println(s"${i + 1}: ${x}") }
26.
途中で処理を止めたい場合 var line: String
= null val lines = new ListBuffer[String]() line = reader.readLine() while(line != null){ lines += line line = reader.readLine() }
27.
Iterator.continuallyが使える val lines =
Iterator.continually(reader.readLine()) .takeWhile(_ != null)
28.
バッドコードを検出するために ● コンパイラのオプションを設定しよう ● Lintツールを使おう ○
scalastyle ○ wartremover scalacOptions in ThisBuild ++= Seq( "-feature", "-unchecked", "-deprecation", "-Xfuture", "-Yno-adapted-args", "-Ywarn-dead-code", "-Ywarn-numeric-widen" )
29.
SparkがScalaの隙間産業を生み出している ● PredictionIO ● Spark
MLlib ● Mahout-Spark ● Elasticsearch-Hadoop
30.
SparkがScalaの隙間産業を生み出している ● PredictionIO ● Spark
MLlib ● Mahout-Spark ● Elasticsearch-Hadoop あなたもScala警察として OSSコミッタになろう!
Download now