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

35
Scala 勉勉勉 at ipros 勉勉勉勉勉勉勉 勉勉勉勉勉勉勉勉 勉勉勉勉勉勉勉勉勉勉勉 勉勉勉勉

Upload: takeuchi-tk

Post on 27-Jun-2015

2.450 views

Category:

Technology


1 download

DESCRIPTION

外部向け勉強会 ipros tech meet up で行ったscalaハンズオンの資料です。 内容はscala触ったことがない、かなり初心者向けとなっています。

TRANSCRIPT

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

Scala勉強会 at ipros ハンズオン前編

株式会社イプロスカイゼンチームリーダー 竹内孝志

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

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

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

Scala ハンズオン 前編 目的Scala を触ったことない人が・・・

文法を理解して、Scala のコードを書いて実行できる

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

前編の流れ• Scala 概要•変数宣言、型、キャスト•関数、ループ•例外処理、制御式•まとめ※ 赤字の箇所はハンズオンを行います

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

Scala 概要Java仮想マシン (JVM)上で動作するプログラミング言語の一つ。オブジェクト指向言語と関数型言語の両方の特徴を取り入れた設計。Scala は Javaのクラスライブラリなどそのまま利用できるため利便性が高い。簡潔に並列処理を記述するための機能が用意されている。

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

関数型言語とはコードを逐次実行しながら副作用を起こす命令型のコードをなるべく排除したプログラミングができる言語。このため並列処理に向いている。関数自身を引数に取ることができる高階関数、データ型の型推論、遅延評価などの機能が用意されている。

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

Scala 構成

テキスト テキスト

中間コード

Scalaコンパイラ

java コンパイラ(JDK)

ソース*.java

ソース*.scala

バイトコード(*.class)

JRE  Java(JVM)

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

Scala と他の言語比較Scala Java Ruby

関数型 ◯ − −

生産性 − − ◯

処理速度 ◯ ◯ −

学習コスト − ◯ ◯

技術者の数 − ◯ ◯

IDE ◯ ◯ −

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

環境構築こちらを参考にしてくださいhttp://atnd.org/events/46137

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

Scala ハンズオンここからは実際に手を動かします

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

前編のハンズオン•変数(宣言、キャスト)•関数(宣言、引き渡し、ループ)

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

ハンズオン環境の紹介

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

2 . スクリプト実行環境ruby や perl 同様ファイルを読み込ませて1 行 1 行実行していく。

REPL 環境とスクリプトとしての実行の両方を行います。

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

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 を実行してください

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

文字の出力

println(“Hello World”)

system.out.println(“Hello World”);

Scala

Java

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

変数の宣言

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

String str = “Hello World”final String str = “Hello World”

Scala

Java

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

型の省略 ( 型推論 )

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

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

型階層

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

キャスト

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

Object obj = “abc”;String str = (String) obj;

Scala

Java

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

演習• val と var の違いを確認する•型推論を確認する•キャストを確認する

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

演習 : val と var の違いを確認

>var str1 = "cat">str1 = "dog">println(str1);

>val str2 = "cat">str2 = "dog">println(str2)

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

演習 : 型推論を確認>var str = “Cat”>str >str = 5 ⬅ここでエラー

>var list = List(1,2,3,4,5)>list>list = List() ⬅ここでエラー

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

演習 : キャストを確認>val obj: Any = “abc”>obj>val str: String = obj.asInstanceOf[String]>str>obj = str.asInstanceOf[Any]>obj

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

関数の宣言

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

String getName(String name) { return "My name is " + name;}

Scala

Java

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

関数に関数を渡す

def getMessageMyname(name: String): String = { "My name is " + name}def printCatByMessage(f:(String) => String ) = { println(f("Cat"))}printCatByMessage(getMessageMyname)

Scala

Page 25: 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

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

演習•関数に関数を渡してみる• foreach を使ってループする

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

スクリプトの実行方法

$ scala-2.10.3/bin/scala sample.scala

Scala 実行時にファイル名を指定してください

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

演習 : 関数に関数を渡す// 関数を定義するdef getMessageMyname(name: String): String = { "My name is " + name }

// 関数を引数として関数を定義するdef printCatByMessage(f:(String) => String ) = { println(f("Cat")) } // 関数に関数を渡して実行するprintCatByMessage(getMessageMyname)

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

演習 : foreach を使ってループ

// 関数を定義するdef printMyname(name: String) = { println("My name is " + name)}

// ループ用にデータ配列を用意するvar array = Array("Cat","Dog","Pig","Egg”)

// データの要素を一つずつ取り出して関数を実行array.foreach(printMyname(_))

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

例外処理try catch を書かなくてもエスカレーションされる。処理の中断をしたくない場合は例外処理を書く必要がある。

try { // 処理} catch (Exception e) { e.printStackTrace();} finally { // 処理}

Scala

Java

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

例外処理を Scala で書くなら

try { // 処理} catch { case e: Exception => { e.printStackTrace }} finally { // 処理}

Scala

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

制御式

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

String str = “Cat”;if (“Cat”.equals(str)) { }

Scala

Java

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

Scala でハマったところ•文法が java と異なる•Map や List のメソッドが java と異なる•オブジェクトの構造

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

まとめScala は JVM上で動作する言語の1つ。Java のライブラリを使用することが可能。Java とは文法が異なる。関数型言語の特徴を持っている。

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

ご清聴ありがとうございました。