Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20181110 Scala関西Summit 懇親会LT「Scalaのかわいいところ」
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
omiend
November 10, 2018
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20181110 Scala関西Summit 懇親会LT「Scalaのかわいいところ」
omiend
November 10, 2018
More Decks by omiend
See All by omiend
スクラッチ組織活用術 Salesforce Developers Meetup #24
omiend
0
1.4k
Nuxt.jsのComponent分割単位と,SSRをする上で気をつけること
omiend
1
820
Nuxt.js_Vue.js_のVuexの動かしかたをまとめてみたよ.pdf
omiend
0
120
20181208_好きだけじゃツライScala.js_共有版_.pdf
omiend
0
130
Other Decks in Programming
See All in Programming
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
310
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
SREの越境 / SRE Collaboration
y0hgi
2
300
カツオ、ご期待ください
suneo3476
0
150
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.5k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
4k
FreeBSDでZabbixを動かす
kenkino
0
360
Kubernetes祭り #2 OP/ED
bells17
0
100
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
200
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
For a Future-Friendly Web
brad_frost
183
10k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
The Curse of the Amulet
leimatthew05
3
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Unsuck your backbone
ammeep
672
58k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
300
Transcript
Scalaの好きなところ・・・//// 超超超初心者@omiend Scala関西Summit 2018 懇親会LT
Scalaのかわいいところ・・・//// 超超超初心者@omiend Scala関西Summit 2018 懇親会LT
@omiend 恵比寿で働くプログラマー歴12年目のおじさん 一応フロントエンドからバックエンドまで一通り出来ると思い込んでいる人間デス お仕事 - プログラミング - 会社経営 - 音楽雑誌のライター
SI業界:8年 - Java,Shell,DB(SQLもゴリゴリ),Salesforce,GAE(Slim3) WEB業界:4年 - Scala(Play),Angular,React,Vue/Nuxt,Rails,Docker プライベート - Riot.js 好きなプログラム言語 - Scala(ScalaMatsuriのスタッフもやらさせていただいてます) 趣味 - 音楽 - 映画 - ジョギング・ウォーキング - DDD(Drink Driven Development)
今日の昼に急いで作ったスライドなので もし間違った表現がありましたら @omiendまで
最近Rubyばかり書いていますが 今日のみなさんの発表を見て やっぱりScalaって いいなと思いました
みなさんScalaはお好きですか? Scalaの何がお好きですか?
例えば・・・
簡潔な記述
少ない記述 バグの混在が減る!
強力な静的型付け言語
強力な静的型付け言語 かわいい!!
for式
for式 一番好き・・・//// 一番好き・・・////
一番好き・・・//// 一番好き・・・////
val list1: List[String] = List("TEST1","TEST2","TEST3") val list2: List[String] = List("TEST4","TEST5","TEST6")
// TEST1 | TEST4 // TEST1 | TEST5 // TEST1 | TEST6 // TEST2 | TEST4 // TEST2 | TEST5 // TEST2 | TEST6 // TEST3 | TEST4 // TEST3 | TEST5 // TEST3 | TEST6 こんなふうにコンソールに出力したいばあい・・・ $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val list1: List[String] = List("TEST1","TEST2","TEST3") val list2: List[String] = List("TEST4","TEST5","TEST6")
for (l1 <- list1) { for (l2 <- list2) { println(s"$l1 | $l2") } } list1.foreach { l1 => list2.foreach { l2 => println(s"$l1 | $l2") } } Javaライクに書いたり foreachを使ったり $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val list1: List[String] = List("TEST1","TEST2","TEST3") val list2: List[String] = List("TEST4","TEST5","TEST6")
for { l1 <- list1 l2 <- list2 } println(s"$l1 | $l2") もしくは、for式を使うとこのようにかけます $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val list1: List[String] = List("TEST1","TEST2","TEST3") val list2: List[String] = List("TEST4","TEST5","TEST6")
List( "TEST1 | TEST4", "TEST1 | TEST5", "TEST1 | TEST6", "TEST2 | TEST4", "TEST2 | TEST5", "TEST2 | TEST6", "TEST3 | TEST4", "TEST3 | TEST5", "TEST3 | TEST6" ) 値を返したい場合どうでしょう? $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val res = list1.map { l1 => list2.map { l2
=> s"$l1 | $l2" } } 値を返す=map?とまず考えるかもですが $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
List( List("TEST1 | TEST4", "TEST1 | TEST5", "TEST1 | TEST6"),
List("TEST2 | TEST4", "TEST2 | TEST5", "TEST2 | TEST6"), List("TEST3 | TEST4", "TEST3 | TEST5", "TEST3 | TEST6") ) mapでネストしただけですと、こうなってしまいま すね $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val res = list1.map { l1 => list2.map { l2
=> s"$l1 | $l2" } } そんなとき、外側のmapを $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val res: List[String] = list1.flatMap { l1 => list2.map {
l2 => s"$l1 | $l2" } } そんなとき、外側のflatMapにする、あるいは $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val res: List[String] = list1.map { l1 => list2.map {
l2 => s"$l1 | $l2" } }.flatten mapをネストする場合、おしりに flattenをつけてあ げます $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
$ scala -version Scala code runner version 2.12.6 -- Copyright
2002-2018, LAMP/EPFL and Lightbend, Inc. val res = for { l1 <- list1 l2 <- list2 } yield s"$l1 | $l2" でも、mapを使えば、あら不思議! これだけでいいんですね。
一番好き・・・//// 一番好き・・・////
val nameOpt1: Option[String] = Some("omiend1") val nameOpt2: Option[String] = Some("omiend2")
val nameOpt3: Option[String] = Some("omiend3") val res = for { n1 <- nameOpt1 n2 <- nameOpt2 n3 <- nameOpt3 } yield s"$n1 | $n2 | $n3" // res: Option[String] = Some(omiend1 | omiend2 | omiend3) $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc. 値を返すfor式は、map/flatMapがあれば利用で きます。 例えば、Option型でも。
val nameOpt1: Option[String] = Some("omiend1") val nameOpt2: Option[String] = None
val nameOpt3: Option[String] = Some("omiend3") val res = for { n1 <- nameOpt1 n2 <- nameOpt2 n3 <- nameOpt3 } yield s"$n1 | $n2 | $n3" // res: Option[String] = None $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc. flatMapが動きますので、Noneがあるとその時点 で処理がおわり、Noneがかえります
val res = for { n1 <- nameOpt1 n2 <-
nameOpt2 n3 <- nameOpt3 } yield s"$n1 | $n2 | $n3" $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc. どうでしょう?
val res = nameOpt1.flatMap { n1 => nameOpt2.flatMap { n2
=> nameOpt3.map { n3 => s"$n1 | $n2 | $n3" } } } $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc. 見比べると、for式かわいくないですか?
あくまでも個人的な考えですが、プログラムの 頭が揃うと、それだけで見やすくなるものです。 更に、使われる変数も見やすくなるので flatMap/mapでネストしまくるくらいなら、積極的 にfor式で記述するべきだと考えてます。 もちろんときと場合によりますが・・・
あくまでも個人的な考えですが、プログラム の頭が揃うと、それだけで見やすくなるもの です。 更に、使われる変数も見やすくなるので flatMap/mapでネストしまくるくらいなら、積極 的にfor式で記述するべきだと考えていま す。 日本語だってそう。
val res = nameOpt1.flatMap { n1 => nameOpt2.flatMap { n2
=> nameOpt3.map { n3 => s"$n1 | $n2 | $n3" } } } $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
val res = for { n1 <- nameOpt1 n2 <-
nameOpt2 n3 <- nameOpt3 } yield s"$n1 | $n2 | $n3" $ scala -version Scala code runner version 2.12.6 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
最後に!!! (実はコレが本題)
None
セッション募集中!
ご清聴ありがとうございました