SlideShare a Scribd company logo
Scala入門
Scalaスケーラブルプログラミング(言語設計者が書いたバイブル)
⇨コンパクトに
1. Scalaひとめぐり
2. Scalaの基礎
3. Option/Either/Tryによるエラー処理
4. コレクション
5. 平行プログラミング
6. Scalaプロジェクトのビルド
7. ユニットテスト
8. 知っておきたい応用的な構文
9. より良いコーディングを目指して
本の章立て
対象者
• 1つ以上のプログラミング言語(できればJava)を知ってる
• Scalaという言語をなんとなく知ってみたい
こんな人に向けて解説します
• プログラミング言語の理解を深める確実な方法は実際に自分で書いてみることです.
• あくまで,手を動かさずにふんわりと把握する程度の意気込みでお願いします.
注意
目次
Scala入門 Part1
1 Scalaとは
2 なぜScalaか?
3 お試しコード
4 おまけ
1 Scalaとは
オブジェクト指向言語と関数型言語の特徴
を融合したマルチパラダイムの言語
• スイス連邦工科大学ローザンヌ校の
Martin Odersky教授によって設計された
大学にある螺旋階段がモチーフらしい
Scalable Languageの頭字語
2 なぜScalaか?
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3. 関数型
4. シームレスなJavaとの互換性
5. 関数はオブジェクトである
6. Futureへの対応
7. 楽しさ
https://www.edureka.co/blog/what-is-scala/
2 なぜScalaか?
• 利用者とともに成長していく言語
• Javaと比べて堅苦しさがない
• 様々な用途に対応できる
7項目の設計思想
1.スケーラブルな言語
2. オブジェクト指向
3. 関数型
4. シームレスなJavaとの互換性
5. 関数はオブジェクトである
6. Futureへの対応
7. 楽しさ
2 なぜScalaか?
• 本格的な関数型プログラミングが可能
• 値の書き換えよりも不変性を優先
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3.関数型
4. シームレスなJavaとの互換性
5. 関数はオブジェクトである
6. Futureへの対応
7. 楽しさ
初めはセミコロンの不要な
Javaとしてコーディング
値を書き換える癖を徐々に減らす
関数型のコーディングスタイルへ
2 なぜScalaか?
• JVM上で動作する
• Javaのクラスを好きなように使用可能
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3. 関数型
4.シームレスなJavaとの互換性
5. 関数はオブジェクトである
6. Futureへの対応
7. 楽しさ
2 なぜScalaか?
• 小さな基本構造を柔軟に合成
• 関数をオブジェクトとして捉える
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3. 関数型
4. シームレスなJavaとの互換性
5.関数はオブジェクトである
6. Futureへの対応
7. 楽しさ
2 なぜScalaか?
• 非同期処理のための標準ライブラリ
• Javaよりも安全かつ効率的な実装を実現
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3. 関数型
4. シームレスなJavaとの互換性
5. 関数はオブジェクトである
6.Futureへの対応
7. 楽しさ
scala.concurrent.Future
2 なぜScalaか?
• Javaのような定型的で冗長なコードの
少なさ
• スムーズなフィードバックループ
• より少ないコードでスピーディな開発
7項目の設計思想
1. スケーラブルな言語
2. オブジェクト指向
3. 関数型
4. シームレスなJavaとの互換性
5. 関数はオブジェクトである
6. Futureへの対応
7.楽しさ
2 なぜScalaか?
著名なユーザ企業
3 お試しコード
3.1 値や変数の定義
3.2 メソッドの定義
3.3 関数オブジェクト
3.4 制御構文
*** 他人のコード読むよりも,自分で書くのが一番だと思います ***
3.1 値や変数の定義
val : 再代入できない
⇨変数の参照先が不変であることを保証
Scalaは型推論が可能
var : 同じ型の値を再代入できる
var を積極的に使うことは推奨されない
3.2 メソッドの定義
複数行の場合,
ブロックの最後の行が評価される
Unit:返す値がない(他言語のvoid)
⇒これも型
これもできる
3.3 関数オブジェクト
filter :「 Int型を受け取りBoolean型を返す関数」を引数にとる
実行結果
foreach : 「Int型を受け取りUnit型を返す関数」を引数にとる
Javaで書くとこうなる
3.4 制御構文
Scalaのブロック式
{
式1
式2
⋮
式N
}
式を順番に評価し,
最後の式Nを評価した値が返される
セミコロンを挟めば改行しなくてもOK
ブロック式がメソッドの本体に現れただけ
3.4 制御構文
if式 match式
3.4 制御構文
結果
for式
to:含む until:含まない
4 おまけ
標準APIのドキュメント Scaladoc [https://scala-lang.org/api/current/]
次回
Scalaの基礎
1 型の基本
2 クラス定義
3 トレイト定義
4 パターンマッチとか制御構文
5 ジェネリクスと型パラメータ
6 暗黙のパラメータ
多少予定変更するかもしれません
おわり
フィードバック等お願いします.

More Related Content

Similar to Scala入門

Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしいke-m kamekoopa
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
Kota Mizushima
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
Shuya Tsukamoto
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
 
自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
啓 小笠原
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料tantack
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況takezoe
 
Flang kkd1
Flang kkd1Flang kkd1
Flang kkd1
florets1
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
Yasuyuki Maeda
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
FScoward
 
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
 
「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む
Nobutada Matsubara
 
Non-Functional Programming in Scala
Non-Functional Programming in ScalaNon-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
 
Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門
Yuichiro Takahashi
 

Similar to Scala入門 (20)

Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況
 
Flang kkd1
Flang kkd1Flang kkd1
Flang kkd1
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
 
「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む
 
Non-Functional Programming in Scala
Non-Functional Programming in ScalaNon-Functional Programming in Scala
Non-Functional Programming in Scala
 
Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門
 

More from Yoshifumi Takeshima

Agile Testing Night #4 LT
Agile Testing Night #4 LTAgile Testing Night #4 LT
Agile Testing Night #4 LT
Yoshifumi Takeshima
 
ゲーム紹介:GeoGusser
ゲーム紹介:GeoGusserゲーム紹介:GeoGusser
ゲーム紹介:GeoGusser
Yoshifumi Takeshima
 
LTのすゝめっていうLT
LTのすゝめっていうLTLTのすゝめっていうLT
LTのすゝめっていうLT
Yoshifumi Takeshima
 
Scala Hands On!!
Scala Hands On!!Scala Hands On!!
Scala Hands On!!
Yoshifumi Takeshima
 
確率変数とは
確率変数とは確率変数とは
確率変数とは
Yoshifumi Takeshima
 
統計:最尤原理の基礎
統計:最尤原理の基礎統計:最尤原理の基礎
統計:最尤原理の基礎
Yoshifumi Takeshima
 
サッカー:2-0は危険なスコアなのか?
サッカー:2-0は危険なスコアなのか?サッカー:2-0は危険なスコアなのか?
サッカー:2-0は危険なスコアなのか?
Yoshifumi Takeshima
 

More from Yoshifumi Takeshima (7)

Agile Testing Night #4 LT
Agile Testing Night #4 LTAgile Testing Night #4 LT
Agile Testing Night #4 LT
 
ゲーム紹介:GeoGusser
ゲーム紹介:GeoGusserゲーム紹介:GeoGusser
ゲーム紹介:GeoGusser
 
LTのすゝめっていうLT
LTのすゝめっていうLTLTのすゝめっていうLT
LTのすゝめっていうLT
 
Scala Hands On!!
Scala Hands On!!Scala Hands On!!
Scala Hands On!!
 
確率変数とは
確率変数とは確率変数とは
確率変数とは
 
統計:最尤原理の基礎
統計:最尤原理の基礎統計:最尤原理の基礎
統計:最尤原理の基礎
 
サッカー:2-0は危険なスコアなのか?
サッカー:2-0は危険なスコアなのか?サッカー:2-0は危険なスコアなのか?
サッカー:2-0は危険なスコアなのか?
 

Recently uploaded

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Recently uploaded (10)

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

Scala入門