Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
takezoe
PDF, PPTX
10,101 views
頑張りすぎないScala
https://d-cube.connpass.com/event/74106/
Software
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 43
2
/ 43
3
/ 43
4
/ 43
5
/ 43
6
/ 43
7
/ 43
8
/ 43
9
/ 43
10
/ 43
11
/ 43
12
/ 43
13
/ 43
14
/ 43
15
/ 43
16
/ 43
17
/ 43
18
/ 43
19
/ 43
20
/ 43
21
/ 43
22
/ 43
23
/ 43
24
/ 43
25
/ 43
26
/ 43
27
/ 43
28
/ 43
29
/ 43
30
/ 43
31
/ 43
32
/ 43
33
/ 43
34
/ 43
35
/ 43
36
/ 43
37
/ 43
38
/ 43
39
/ 43
40
/ 43
41
/ 43
42
/ 43
43
/ 43
More Related Content
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PPTX
ワタシハ Azure Functions チョットデキル
by
Tsuyoshi Ushio
PDF
アジャイル開発を支えるアーキテクチャ設計とは
by
Yusuke Suzuki
PDF
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
PPTX
あじゃいる時代の品質保証 ~DevSQAの提案~
by
Hiroaki Matsunaga
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PPTX
60分でわかった気になるISO29119 #wacate
by
Kinji Akemine
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
ワタシハ Azure Functions チョットデキル
by
Tsuyoshi Ushio
アジャイル開発を支えるアーキテクチャ設計とは
by
Yusuke Suzuki
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
あじゃいる時代の品質保証 ~DevSQAの提案~
by
Hiroaki Matsunaga
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
60分でわかった気になるISO29119 #wacate
by
Kinji Akemine
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
What's hot
PPTX
Azure Search 大全
by
Daiyu Hatakeyama
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
by
Kent Ohashi
PDF
What's new in Spring Boot 2.6 ?
by
土岐 孝平
PPTX
Spring CloudとZipkinを利用した分散トレーシング
by
Rakuten Group, Inc.
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PDF
Akkaとは。アクターモデル とは。
by
Kenjiro Kubota
PPTX
みんなどんな書式でテストケース書いているの
by
kauji0522
PPTX
「開発がスクラム導入するんだって!試験どーしよ!?」 -サイボウズQAスクラム奮闘記-
by
yabbysan
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
PDF
PostgreSQLアンチパターン
by
Soudai Sone
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
PDF
Azure Network Security Group(NSG) はじめてのDeep Dive
by
Yoshimasa Katakura
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PPTX
Docker Tokyo
by
cyberblack28 Ichikawa
PDF
PHPからgoへの移行で分かったこと
by
gree_tech
PDF
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
by
aha_oretama
PDF
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
PPTX
グラフデータベース入門
by
Masaya Dake
PDF
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
by
Yusuke Suzuki
Azure Search 大全
by
Daiyu Hatakeyama
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
by
Kent Ohashi
What's new in Spring Boot 2.6 ?
by
土岐 孝平
Spring CloudとZipkinを利用した分散トレーシング
by
Rakuten Group, Inc.
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
Akkaとは。アクターモデル とは。
by
Kenjiro Kubota
みんなどんな書式でテストケース書いているの
by
kauji0522
「開発がスクラム導入するんだって!試験どーしよ!?」 -サイボウズQAスクラム奮闘記-
by
yabbysan
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
ドメイン駆動設計 基本を理解する
by
増田 亨
PostgreSQLアンチパターン
by
Soudai Sone
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
Azure Network Security Group(NSG) はじめてのDeep Dive
by
Yoshimasa Katakura
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
Docker Tokyo
by
cyberblack28 Ichikawa
PHPからgoへの移行で分かったこと
by
gree_tech
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
by
aha_oretama
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
グラフデータベース入門
by
Masaya Dake
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
by
Yusuke Suzuki
Similar to 頑張りすぎないScala
PDF
Non-Functional Programming in Scala
by
takezoe
PDF
Scalaプロジェクトへの未経験者の円滑なジョインへ
by
Kenji Doi
PDF
こわくないScala
by
Kota Mizushima
PDF
Scala is-unscared
by
Kota Mizushima
PDF
“Septeni×Scala”勉強会#1資料_20150219_寺坂
by
ikuyaterasaka
PDF
Scala workshop 20131019
by
Junichi Okamura
PDF
Scalaで萌える関数型プログラミング[エッセンシャル版]
by
Ra Zon
PPTX
明日から業務で使うScala
by
martin_lover_ca
PDF
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
by
parrotstudio
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
by
Ra Zon
PPTX
Scala勉強会 初心者向けハンズオン前編
by
takeuchi-tk
Non-Functional Programming in Scala
by
takezoe
Scalaプロジェクトへの未経験者の円滑なジョインへ
by
Kenji Doi
こわくないScala
by
Kota Mizushima
Scala is-unscared
by
Kota Mizushima
“Septeni×Scala”勉強会#1資料_20150219_寺坂
by
ikuyaterasaka
Scala workshop 20131019
by
Junichi Okamura
Scalaで萌える関数型プログラミング[エッセンシャル版]
by
Ra Zon
明日から業務で使うScala
by
martin_lover_ca
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
by
parrotstudio
Scalaで萌える関数型プログラミング[1.1.RC1]
by
Ra Zon
Scala勉強会 初心者向けハンズオン前編
by
takeuchi-tk
More from takezoe
PDF
Journey of Migrating Millions of Queries on The Cloud
by
takezoe
PDF
GitBucket: Open source self-hosting Git server built by Scala
by
takezoe
PDF
Testing Distributed Query Engine as a Service
by
takezoe
PDF
Revisit Dependency Injection in scala
by
takezoe
PDF
How to keep maintainability of long life Scala applications
by
takezoe
PDF
GitBucket: Git Centric Software Development Platform by Scala
by
takezoe
PDF
Scala警察のすすめ
by
takezoe
PDF
Scala製機械学習サーバ「Apache PredictionIO」
by
takezoe
PDF
The best of AltJava is Xtend
by
takezoe
PDF
Scala Warrior and type-safe front-end development with Scala.js
by
takezoe
PDF
Tracing Microservices with Zipkin
by
takezoe
PDF
Type-safe front-end development with Scala
by
takezoe
PDF
Scala Frameworks for Web Application 2016
by
takezoe
PDF
Macro in Scala
by
takezoe
PDF
Java9 and Project Jigsaw
by
takezoe
PDF
Reactive database access with Slick3
by
takezoe
PDF
markedj: The best of markdown processor on JVM
by
takezoe
PDF
ネタじゃないScala.js
by
takezoe
PDF
Excel方眼紙を支えるJava技術 2015
by
takezoe
PDF
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
by
takezoe
Journey of Migrating Millions of Queries on The Cloud
by
takezoe
GitBucket: Open source self-hosting Git server built by Scala
by
takezoe
Testing Distributed Query Engine as a Service
by
takezoe
Revisit Dependency Injection in scala
by
takezoe
How to keep maintainability of long life Scala applications
by
takezoe
GitBucket: Git Centric Software Development Platform by Scala
by
takezoe
Scala警察のすすめ
by
takezoe
Scala製機械学習サーバ「Apache PredictionIO」
by
takezoe
The best of AltJava is Xtend
by
takezoe
Scala Warrior and type-safe front-end development with Scala.js
by
takezoe
Tracing Microservices with Zipkin
by
takezoe
Type-safe front-end development with Scala
by
takezoe
Scala Frameworks for Web Application 2016
by
takezoe
Macro in Scala
by
takezoe
Java9 and Project Jigsaw
by
takezoe
Reactive database access with Slick3
by
takezoe
markedj: The best of markdown processor on JVM
by
takezoe
ネタじゃないScala.js
by
takezoe
Excel方眼紙を支えるJava技術 2015
by
takezoe
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
by
takezoe
頑張りすぎないScala
1.
頑張りすぎないScala Naoki Takezoe @takezoen BizReach, Inc
2.
自己紹介 竹添 直樹: @takezoen ビズリーチという会社でScalaを書いてます OSS開発や技術書の執筆などもしています
3.
関数型プログラミング in Scala 基本的には副作用を使った手続き型プログラミング言語 関数型言語由来の様々な機能を備えている for内包表記、暗黙的なモナド Scalaz、Cats、Slickなどの関数型ライブラリ どこまで関数型に寄せるか?という選択を迫られる プログラミングスタイルだけでなく、ライブラリやフレームワークの 選定から考慮しなくてはならない 難しそう!!!!
4.
Scalaの学習曲線 学習時間 Scala力
5.
Scalaの学習曲線 最初はみんな 初心者 学習時間 Scala力
6.
Scalaの学習曲線 Scala力アップ!! 最初はみんな 初心者 学習時間 Scala力
7.
Scalaの学習曲線 Scala力アップ!! 最初はみんな 初心者 後から入ってくる 人つらい!! 学習時間 Scala力 ハードルの高さ
8.
こうあって欲しい(気持ちは理解できる) 学習時間 Java力
9.
振り返り 最初はみんなScala初心者だった 初期のメンバーが少しずつレベルアップしてくる 関数型プログラミングが取り入れられてくる 時代によってコードの傾向が違う 後から入ってくる人ほどつらくなってしまう
10.
振り返り Scalaはプログラマの成長にあわせてスタイルを変えられる 長期間、固定のチームで開発するのであればチームの成長にあ わせて変化していくことができる メンバーの増加・入れ替わりが激しい場合は変化が大きいとどん どんハードルが上がっていってしまう
11.
でも、思い出してみて欲しい
12.
Scala != 関数型プログラミング言語
13.
Scalaはいろんな使い方ができる
14.
最初の一歩、こんな方針はどうでしょう そもそもScalaは副作用のある手続き型プログラミング言語であ り、モナドを意識せずに使えるように設計されている Scalaの便利な機能を使いつつ、関数型プログラミングに寄せす ぎないようにする
15.
例: これらを使うべきか?使わないべきか? ● var ●
mutableコレクション ● return ● null ● 例外
16.
var
17.
varとvalの違い 変数宣言 val name =
"Naoki Takezoe" // 再代入不可能 var name = "Naoki Takezoe" // 再代入可能 Scalaでは一般的にvalの使用が推奨されている
18.
varを使いがちなケース ループ処理などでフラグやアキュムレータに使いがち takeWhileやfoldLeftなどで代用可能だが取っつきづらい var line =
reader.readLine() while(line != null) { ... line = reader.readLine() }
19.
varの使用は禁止するべきか? valにできるものはvalにするべき メソッド内での利用であれば許容してもよいのでは? 最初はJavaでfinalをつけるかどうかくらいの感覚で使い分けるの がよさそう なるべくvalを使用するよう啓蒙していく
20.
mutableコレクション
21.
Scalaのコレクション Scalaにはimmutableなコレクションとmutableなコレクションが ある 基本的にはimmutableなコレクションが推奨されている // immutableなシーケンス val langs
= Seq("Java", "Scala", "Kotlin") // mutableなシーケンス import scala.collection.mutable.ListBuffer val langs = ListBuffer("Java", "Scala", "Kotlin")
22.
mutableコレクションを使いがちなケース ループしながら詰め替えるような処理で使いがち val list =
... val map = mutable.Map("some" -> 0, "none" -> 0) list.foreach { x => if (x.nonEmpty) { map.put("some", map("some") + 1) } else { map.put("none", map("none") + 1) } }
23.
mutableコレクションを禁止するべきか? メソッド内での利用であれば許容してもよいのでは? 戻り値として返す際にimmutableなコレクションに変換する なるべくimmutableなコレクションを使うよう啓蒙していく val map =
list.groupBy(_.nonEmpty) .map { case (nonEmpty, values) => if(nonEmpty) "some" -> values.size else "none" -> values.size }
24.
return
25.
Scalaのreturnはちょっと特殊 Ealry returnやループ処理中からのreturnなどが使われがち def hello(name:
String): String = { if(name.isEmpty) return "" ... } 戻り値の型を明記しないといけなくなる コンパイル後に例外(ControlThrowableのサブクラス)で実現さ れるケースがある
26.
returnが例外で実装されるケース def hello(names: Seq[String]):
String = { names.foreach { name => if(name.isEmpty){ return "" } } ... }
27.
コンパイルされるとこんな感じ(イメージ) def hello(names: Seq[String]):
String = { try { names.foreach(checkHelloArguments) } catch { case e: NonLocalReturnControl[String] => return e.value } ... } private def checkHelloArguments(str: String): Unit = { if(str.isEmpty) throw new NonLocalReturnControl[String]("") }
28.
returnを禁止するべきか? 実際に問題になるケースは少ないので許容してもよいのでは そもそも例外をThrowableでキャッチするべきではない try { ... } catch
{ case NonFatal(t) => ... }
29.
null
30.
nullを使うべき理由はまるでない
31.
nullの代わりにOption型を使う def findUser(id: Long):
Option[User] = { val user = userDao.get(id) if(user == null){ None } else { Some(user) } }
32.
nullの代わりにOption型を使う val user =
findUser(id) user match { case None => ... // 存在しない場合の処理 case Some(user) => ... // 存在する場合の処理 }
33.
Javaライブラリを使う場合は仕方ない 可能であれば前述の例のようにラップしてOptionに変換したイン ターフェースを用意するとよい
34.
例外
35.
Scalaでの例外処理 例外は副作用なので関数型プログラミングでは好まれない 関数の実行結果としてエラーを表現できる型で返す ScalaにはEither[A, B]という型がある 正常な場合はRight[B] エラーの場合はLeft[A]
36.
Eitherの使い方 def findUser(): Either[Exception,
User] = { try { val user: User = ... Right(user) } catch { case e: Exception => Left(e) } }
37.
Eitherの使い方 val result =
findUser() // パターンマッチで結果を取り出す result match { case Right(user) => ... // 成功時の処理 case Left(e) => ... // エラー時の処理 }
38.
ただし全部Eitherで返そうとすると問題も どこで例外が発生するかわからないので各所で変換が必要にな る(特にJavaライブラリを使っている場合) 中途半端にやると戻り値がEitherなのに例外もスローされる場合 があるという地獄のような状態になってしまう for内包表記やEitherTなどが登場してしまう
39.
例外を禁止するべきか? エラーを呼び出し元でハンドリングする必要がある場合はEither などエラーを表現できる型を使う そうでない場合は積極的に例外を使う方向に倒してしまってもよ いのでは?
40.
最終的にはケースバイケース これらはあくまでも判断の一例 プロダクトの方向性、今後のチーム運営も考えて決める チームのスキルが一様であればそれにあわせればよい Scalaで楽しくプログラミングして欲しい 最初はみんな初心者だった 関数型プログラミングに興味のある人だけでなく、 それ以外の人たちにもScalaを使って欲しい
41.
とはいえ... Better Javaに留まるのであればKotlinなどの選択肢がある 手続き型のオブジェクト指向プログラミングから関数型プログラミ ングが地続きになっているのがScalaの特徴 Scalaのメリットを活かすには関数型プログラミングを積極的に取 り入れていくべき
42.
次回予告 教養としてのモナド
43.
ご静聴ありがとうございました
Download