Submit Search
Upload
Scala警察のすすめ
•
8 likes
•
12,347 views
T
takezoe
Follow
#scalafukuoka
Read less
Read more
Software
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
頑張りすぎないScala
頑張りすぎないScala
takezoe
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Ormとの付き合い方
Ormとの付き合い方
豊明 尾古
Recommended
頑張りすぎないScala
頑張りすぎないScala
takezoe
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
parrotstudio
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Ormとの付き合い方
Ormとの付き合い方
豊明 尾古
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
Yoshitaka Kawashima
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Railsで作るBFFの功罪
Railsで作るBFFの功罪
Recruit Lifestyle Co., Ltd.
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ナレッジグラフ入門
ナレッジグラフ入門
KnowledgeGraph
C# における Redis 徹底活用
C# における Redis 徹底活用
Takaaki Suzuki
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
Rの高速化
Rの高速化
弘毅 露崎
概念モデルって難しいですよね
概念モデルって難しいですよね
Takuya Kawabe
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
自然言語処理 Word2vec
自然言語処理 Word2vec
naoto moriyama
More Related Content
What's hot
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
Yoshitaka Kawashima
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Railsで作るBFFの功罪
Railsで作るBFFの功罪
Recruit Lifestyle Co., Ltd.
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ナレッジグラフ入門
ナレッジグラフ入門
KnowledgeGraph
C# における Redis 徹底活用
C# における Redis 徹底活用
Takaaki Suzuki
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
Rの高速化
Rの高速化
弘毅 露崎
概念モデルって難しいですよね
概念モデルって難しいですよね
Takuya Kawabe
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
What's hot
(20)
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Railsで作るBFFの功罪
Railsで作るBFFの功罪
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ナレッジグラフ入門
ナレッジグラフ入門
C# における Redis 徹底活用
C# における Redis 徹底活用
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
Rの高速化
Rの高速化
概念モデルって難しいですよね
概念モデルって難しいですよね
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Vacuum徹底解説
Vacuum徹底解説
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
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
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
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社会論研究会
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
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