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

4,567 views

Published on

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

Published in: Technology

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

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

×