SlideShare une entreprise Scribd logo
1  sur  35
Scala
勉強会 at ipros ハンズオン前編
株式会社イプロス
カイゼンチームリーダー 竹内孝志
自己紹介
•
•
•
•
•
•
•
•
•
•

竹内 孝志(たけうち たかし)
1985年12月18日生まれ
SIerで3年間金融系システムの保守・運用
現在はイプロスにWEBエンジニアとして勤務
業務はイプロスサイトの改善と機能拡張
Scalaは最近始めたばかりで初心者
アジャイル開発を極めるため修行中
Railsでサービスを作ろうと目論んでる
趣味はオンラインゲーム
実況動画にハマってる
Scalaハンズオン 前編 目的
Scalaを触ったことない人が・・・

文法を理解して、
Scalaのコードを書いて実行できる
前編の流れ
• Scala概要
• 変数宣言、型、キャスト
• 関数、ループ
• 例外処理、制御式
• まとめ
※赤字の箇所はハンズオンを行います
Scala概要
Java仮想マシン(JVM)上で動作するプログラ
ミング言語の一つ。
オブジェクト指向言語と関数型言語の両方
の特徴を取り入れた設計。
ScalaはJavaのクラスライブラリなどそのま
ま利用できるため利便性が高い。
簡潔に並列処理を記述するための機能が用
意されている。
関数型言語とは
コードを逐次実行しながら副作用を起こ
す命令型のコードをなるべく排除したプ
ログラミングができる言語。
このため並列処理に向いている。

関数自身を引数に取ることができる高階
関数、データ型の型推論、遅延評価など
の機能が用意されている。
Scala構成
ソース
*.java

ソース
*.scala

テキスト

javaコンパイラ
(JDK)

テキスト

バイトコード
(*.class)

Scala
コンパイラ

中間コード

Java(JVM)

JRE
Scalaと他の言語比較
Scala

Java

Ruby

関数型

◯

−

−

生産性

−

−

◯

処理速度

◯

◯

−

学習コスト

−

◯

◯

技術者の数

−

◯

◯

IDE

◯

◯

−
環境構築
こちらを参考にしてください
http://atnd.org/events/46137
Scalaハンズオン
ここからは実際に手を動かします
前編のハンズオン
• 変数(宣言、キャスト)
• 関数(宣言、引き渡し、ループ)
ハンズオン環境の紹介
REPL環境とスクリプトとしての実行の両方を行います。

1.REPR環境
Read-Eval-Print-Roopの略。
読み込み-評価-表示を繰り返す対話型の環境。

2.スクリプト実行環境
rubyやperl同様ファイルを読み込ませて
1行1行実行していく。
REPL環境の使い方
ダウンロードしたbinにあるscalaを実行してください
$ scala-2.10.3/bin/scala
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64Bit Server VM, Java 1.7.0_17).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
文字の出力
Scala

println(“Hello World”)

Java

system.out.println(“Hello World”);
変数の宣言
Scala

var str = “Hello World”
val str = “Hello World”
Java

String str = “Hello World”
final String str = “Hello World”
型の省略(型推論)
Scala
var a = 1
var b = 1.0
var c = “abc”
var d = list(“A”,”B”)

Java
int a = 1;
doble b = 1.0;
String c = “abc”;
List<String> list = newList(“A”,”B”);
型階層
キャスト
Scala

val obj: Any = “abc”
val str: String = obj.asInstanceOf[String]
Java

Object obj = “abc”;
String str = (String) obj;
演習
• valとvarの違いを確認する
• 型推論を確認する
• キャストを確認する
演習 : valとvarの違いを確認
>var str1 = "cat"
>str1 = "dog"
>println(str1);
>val str2 = "cat"
>str2 = "dog"
>println(str2)
演習 : 型推論を確認
>var str = “Cat”
>str
>str = 5 ⬅
ここでエラー
>var list = List(1,2,3,4,5)
>list
>list = List() ⬅
ここでエラー
演習 : キャストを確認
>val obj: Any = “abc”
>obj
>val str: String = obj.asInstanceOf[String]
>str
>obj = str.asInstanceOf[Any]
>obj
関数の宣言
Scala

def getMessage(name: String): String = {
"My name is " + name
}
Java

String getName(String name) {
return "My name is " + name;
}
関数に関数を渡す
Scala
def getMessageMyname(name: String): String = {
"My name is " + name
}
def printCatByMessage(f:(String) => String ) = {
println(f("Cat"))
}
printCatByMessage(getMessageMyname)
ループ
Scala
def printMyname(name: String) = {
println("My name is " + name)
}
var array = Array("Cat","Dog","Pig","Egg”)
array.foreach(printMyname(_))

Java
void printMyname(name: String){
system.out.println();
}
String array[] = {"Cat","Dog","Pig","Egg"};
for (String name : array) {
printMyname(name);
}
演習
• 関数に関数を渡してみる
• foreachを使ってループする
スクリプトの実行方法
Scala実行時にファイル名を指定してください
$ scala-2.10.3/bin/scala sample.scala
演習 : 関数に関数を渡す
//関数を定義する
def getMessageMyname(name: String): String = {
"My name is " + name
}
//関数を引数として関数を定義する
def printCatByMessage(f:(String) => String ) = {
println(f("Cat"))
}
//関数に関数を渡して実行する
printCatByMessage(getMessageMyname)
演習 : foreachを使ってループ
//関数を定義する
def printMyname(name: String) = {
println("My name is " + name)
}
//ループ用にデータ配列を用意する
var array = Array("Cat","Dog","Pig","Egg”)
//データの要素を一つずつ取り出して関数を実行
array.foreach(printMyname(_))
例外処理
Scala
try catchを書かなくてもエスカレーションされる。
処理の中断をしたくない場合は例外処理を書く必要がある。

Java
try {
// 処理
} catch (Exception e) {
e.printStackTrace();
} finally {
// 処理
}
例外処理をScalaで書くなら
Scala
try {
// 処理
} catch {
case e: Exception => {
e.printStackTrace
}
} finally {
// 処理
}
制御式
Scala

String str = “Cat”
if (“Cat” === str) { }
Java

String str = “Cat”;
if (“Cat”.equals(str)) { }
Scalaでハマったところ
• 文法がjavaと異なる
• MapやListのメソッドがjavaと異なる
• オブジェクトの構造
まとめ
ScalaはJVM上で動作する言語の1つ。
Javaのライブラリを使用することが可能。
Javaとは文法が異なる。
関数型言語の特徴を持っている。
ご清聴ありがとうございまし
た。

Contenu connexe

Tendances

Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentation
Jason Namkung
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0
Kenji Yoshida
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
guest5f4320
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
 

Tendances (20)

ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
夏だからJava再入門
夏だからJava再入門夏だからJava再入門
夏だからJava再入門
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
 
Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentation
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
rpscala35-scala2.9.0
rpscala35-scala2.9.0rpscala35-scala2.9.0
rpscala35-scala2.9.0
 
Scala勉強会
Scala勉強会Scala勉強会
Scala勉強会
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 

Similaire à Scala勉強会 初心者向けハンズオン前編

ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
 

Similaire à Scala勉強会 初心者向けハンズオン前編 (20)

traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
 
Scala東北紹介
Scala東北紹介Scala東北紹介
Scala東北紹介
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
秀スクリプトの話
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
cp-12. 文字列
cp-12. 文字列cp-12. 文字列
cp-12. 文字列
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 

Plus de takeuchi-tk (7)

Xamarin
XamarinXamarin
Xamarin
 
Fluentd勉強会 (導入編 TreasureData活用)
Fluentd勉強会 (導入編 TreasureData活用)Fluentd勉強会 (導入編 TreasureData活用)
Fluentd勉強会 (導入編 TreasureData活用)
 
Vagrant勉強会アップロード用
Vagrant勉強会アップロード用Vagrant勉強会アップロード用
Vagrant勉強会アップロード用
 
Aws勉強会アップロード用
Aws勉強会アップロード用Aws勉強会アップロード用
Aws勉強会アップロード用
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
 
Selenium
SeleniumSelenium
Selenium
 
Mercurial shelveとmq
Mercurial shelveとmqMercurial shelveとmq
Mercurial shelveとmq
 

Scala勉強会 初心者向けハンズオン前編