scala勉強会 初心者向けハンズオン前編
DESCRIPTION
外部向け勉強会 ipros tech meet up で行ったscalaハンズオンの資料です。 内容はscala触ったことがない、かなり初心者向けとなっています。TRANSCRIPT
Scala勉強会 at ipros ハンズオン前編
株式会社イプロスカイゼンチームリーダー 竹内孝志
自己紹介• 竹内 孝志(たけうち たかし)• 1985 年 12 月 18 日生まれ• SIer で3年間金融系システムの保守・運用• 現在はイプロスに WEB エンジニアとして勤務• 業務はイプロスサイトの改善と機能拡張• Scala は最近始めたばかりで初心者• アジャイル開発を極めるため修行中• Rails でサービスを作ろうと目論んでる• 趣味はオンラインゲーム• 実況動画にハマってる
Scala ハンズオン 前編 目的Scala を触ったことない人が・・・
文法を理解して、Scala のコードを書いて実行できる
前編の流れ• Scala 概要•変数宣言、型、キャスト•関数、ループ•例外処理、制御式•まとめ※ 赤字の箇所はハンズオンを行います
Scala 概要Java仮想マシン (JVM)上で動作するプログラミング言語の一つ。オブジェクト指向言語と関数型言語の両方の特徴を取り入れた設計。Scala は Javaのクラスライブラリなどそのまま利用できるため利便性が高い。簡潔に並列処理を記述するための機能が用意されている。
関数型言語とはコードを逐次実行しながら副作用を起こす命令型のコードをなるべく排除したプログラミングができる言語。このため並列処理に向いている。関数自身を引数に取ることができる高階関数、データ型の型推論、遅延評価などの機能が用意されている。
Scala 構成
テキスト テキスト
中間コード
Scalaコンパイラ
java コンパイラ(JDK)
ソース*.java
ソース*.scala
バイトコード(*.class)
JRE Java(JVM)
Scala と他の言語比較Scala Java Ruby
関数型 ◯ − −
生産性 − − ◯
処理速度 ◯ ◯ −
学習コスト − ◯ ◯
技術者の数 − ◯ ◯
IDE ◯ ◯ −
環境構築こちらを参考にしてくださいhttp://atnd.org/events/46137
Scala ハンズオンここからは実際に手を動かします
前編のハンズオン•変数(宣言、キャスト)•関数(宣言、引き渡し、ループ)
ハンズオン環境の紹介
1 .REPR 環境Read-Eval-Print-Roop の略。読み込み - 評価 - 表示を繰り返す対話型の環境。
2 . スクリプト実行環境ruby や perl 同様ファイルを読み込ませて1 行 1 行実行していく。
REPL 環境とスクリプトとしての実行の両方を行います。
REPL 環境の使い方
$ scala-2.10.3/bin/scalaWelcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17).Type in expressions to have them evaluated.Type :help for more information.
scala>
ダウンロードした bin にある scala を実行してください
文字の出力
println(“Hello World”)
system.out.println(“Hello World”);
Scala
Java
変数の宣言
var str = “Hello World”val str = “Hello World”
String str = “Hello World”final String str = “Hello World”
Scala
Java
型の省略 ( 型推論 )
var a = 1var b = 1.0var c = “abc”var d = list(“A”,”B”)
int a = 1;doble b = 1.0;String c = “abc”;List<String> list = newList(“A”,”B”);
Scala
Java
型階層
キャスト
val obj: Any = “abc”val str: String = obj.asInstanceOf[String]
Object obj = “abc”;String str = (String) obj;
Scala
Java
演習• 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
関数の宣言
def getMessage(name: String): String = { "My name is " + name}
String getName(String name) { return "My name is " + name;}
Scala
Java
関数に関数を渡す
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(_))
void printMyname(name: String){ system.out.println();}String array[] = {"Cat","Dog","Pig","Egg"};for (String name : array) { printMyname(name);}
Scala
Java
演習•関数に関数を渡してみる• foreach を使ってループする
スクリプトの実行方法
$ scala-2.10.3/bin/scala sample.scala
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(_))
例外処理try catch を書かなくてもエスカレーションされる。処理の中断をしたくない場合は例外処理を書く必要がある。
try { // 処理} catch (Exception e) { e.printStackTrace();} finally { // 処理}
Scala
Java
例外処理を Scala で書くなら
try { // 処理} catch { case e: Exception => { e.printStackTrace }} finally { // 処理}
Scala
制御式
String str = “Cat”if (“Cat” === str) { }
String str = “Cat”;if (“Cat”.equals(str)) { }
Scala
Java
Scala でハマったところ•文法が java と異なる•Map や List のメソッドが java と異なる•オブジェクトの構造
まとめScala は JVM上で動作する言語の1つ。Java のライブラリを使用することが可能。Java とは文法が異なる。関数型言語の特徴を持っている。
ご清聴ありがとうございました。