Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

インターンシップの学生にお届けしようとしたScalaの文法(初級編)

1,128 views

Published on

Scala関西Summit「インターンシップの学生にお届けしようとしたScalaの文法(初級編)」の資料です。

Published in: Software
  • Be the first to comment

  • Be the first to like this

インターンシップの学生にお届けしようとしたScalaの文法(初級編)

  1. 1. インターンシップの学生に お届けしようとした Scalaの文法(初級編) エムオーテックス株式会社 増田 謙太郎
  2. 2. 自己紹介 名前:増田 謙太郎 所属:エムオーテックス株式会社 仕事:Webアプリ開発 役割:スクラムマスター/Scalaエンジニア(初級者) HN:スクラムマスダー(scrummasudar) Twitter:@scrummasudar ブログ:http://scrummasudar.hatenablog.com/ 活動:IDDD読書会開催/アジャイルラジオ出演
  3. 3. エムオーテックス セキュリティ系のメーカー Scala関西Summitのシルバースポンサー IT系コミュニティ向けに会場を無料で貸出中 Scalaもくもく会→次回は、10月20日(木) Scala関西勉強会
  4. 4. 今日のセッション Scala初心者の方向け Scalaの特徴 Scalaの文法説明 学習する時に気をつけた方が良いポイントの紹 介 その他おすすめ事項 ※Scala初心者ではあるが、プログラミング言語を1つ は、実践したことがある方を想定しています。
  5. 5. アジェンダ インターンシップの経緯 Scalaとは Scalaのメリット 用語紹介 文法 for式 match式 +αの要素
  6. 6. インターンシップの経緯 京都大学で行われた超交流会2016に、本部長の指示 で、突如、参加することが決定。 法人出展の場合、インターンの募集が可能だったの で、エムオーテックスも、インターンの学生を募集す ることが決定。 ただし、インターンの募集が初めてだったので、私が 一から考えることに決定。 現在のプロジェクトは、Scalaで開発しているので、 Scalaをインターンの学生向けに教えることが決定。
  7. 7. 僕、スクラムマスターで、 Scalaエンジニアではない
  8. 8. Scalaを教えるために、 Scalaを勉強しなければ!
  9. 9. Scalaとは Scalaの名前は、「scalable language」に由来し、 「スケーラブルな言語」を意味する。小規模スク リプトから、大規模システム開発まで、様々な場 面で活躍できる言語。 「オブジェクト指向」 ✕ 「関数型」の融合 2つの概念を習得する必要あるため、少し大変 使いこなせれば、オブジェクト指向、関数型の 両方のメリットを享受できる!
  10. 10. Scalaのメリット Javaとの互換性があり、Javaで使っていたことを 使うことができる Javaより簡潔なコードを書くことができ、コード 量を減らすことができる 抽象度の高いコードで複雑性を緩和することがで きる 静的な型付けにより、安全で柔軟性のあるインタ ーフェイスを設計することができる
  11. 11. Scalaで覚えておきたい用語① 副作用 副作用とは、変数への値の再代入に代表されるよ うな、得られる結果に変化を与えること。 Scalaでは、副作用のない状態を出来る限り目指 す。つまり、「得られる結果が常に同じ」、「他 に、影響を与えることがない状態」を目指す。 再代入できない変数val がある 明確な理由があれば、副作用を伴ってもよい。 再代入できる変数var も用意されている
  12. 12. Scalaで覚えておきたい用語② 式と文 式…文との最大の違いは、評価された値を返すこ と。Scalaでは、意味のある値を返す式を用いて、 副作用のない状態をできるかぎり目指す。 文…一つ以上の式や関数呼び出しで作られる、手 続き構造の単位で、定義全体としては値を持たな い。Scalaでは文よりも式を多く利用する構文が採 用されている。
  13. 13. 文法紹介
  14. 14. for式 for 式は、Javaのfor 文と同様、反復処理に利用す ることができる。Scalaならではの特徴として、意 味のある値を結果値として生み出す。 Scalaでも、 while 式を反復処理に使うことができ る。
  15. 15. Java風サンプル //while式のサンプル var i = 1 while (i <= 4) { println("Iteration " + i) i += 1 } while 式は、Scalaでは避けた方がよい。 while 式 は、値を返すが、意味のないUnit 型の値である() 値を返すため。また、 while 式を使うと、通常var を利用することになり、副作用を伴い、Scalaメリ ットを失うことにつながる。 while 式を使う場合は、 for 式が使うことができな いかを検討するのがよい。
  16. 16. Scalaサンプル //for式のサンプル for (i <- 1 to 4) println("Iteration " + i) for 式では、 Range 型、配列など、あらゆるコレク ションを処理できる。 i <- 1 to 4 という構文は、ジェネレーターと呼ば れる。 反復処理を1回実行するたびに、 i という名前の新 しいval が要素の値によって初期化される。 i の型も、整数型とコンパイラが推論して、実行さ れる。
  17. 17. ポイント 変数var からの脱却 反復処理など定形文で、 var を利用しない書き方 に、慣れる。 val を使うことで、副作用のない書き方にし、 Scalaであるべきとされる書き方に取り組む。
  18. 18. match式 match 式は、Javaのswitch 文と同様、いくつかの選 択肢から1つを選ぶといった処理を記述できる。 val firstArg = if (args.length > 0) args(0) else "" val friend = firstArg match { case "salt" => "pepper" case "chips" => "salasa" case "eggs" => "bacon" case _ => "huh?" } println(friend) _ は、ワイルドカード。あらゆるオブジェクトにマ ッチする。
  19. 19. Scalaのmatch 式とJavaのswitch 文の 違い 分岐する選択肢の多様性 switch 文では、基本的に、整数型やenum 定数しか、 個々の選択肢に利用することができない。 match 式で は、あらゆる型の定数および、その他のものを選択肢 に利用することができる。事実、上記コードでは、文 字列を選択肢に利用している。
  20. 20. breake の暗黙指定 Scalaでは、Javaのswitch 文で使うようなbreake を 個々の選択肢の最後で使わない。 breake が暗黙のうちに指定されているためである。 そのため、選択肢から下の制御構文に制御が落ちな い。 「制御が落ちない」、「選択肢の記述が短くなる」と いうメリットがある。
  21. 21. 結果値の生成 match 式とswitch 文での、もっとも大きな違いは、 match 式が、結果値を生成することである。 サンプルでは、match式の処理結果は、変数friend に、格納されている。 結果値を生成できることで、 食品を選択する 選択されたものを表示する という、やりたいことを分けて、実装することができ る。
  22. 22. ポイント if 式とmatch 式の使い分け match式を覚えると、意図的にif 式を使うこと を避けたりする傾向がある。 真偽値を返すだけであれば、 match 式ではなく、 if 式を使う方がよい。 もちろん、分岐が複数あれば、 match 式を利用す る。
  23. 23. +αの要素 Scalaを理解するなら、sbtを理解する必要がある! 開発環境は、IntelliJ IDEAがおすすめ!
  24. 24. インターンシップについて インターンシップ自体は、まだ未実施。 インターンシップに興味のある学生さんは、ぜ ひ、お声がけを!
  25. 25. おわりに 私自身も、まだまだScala初級者です。 Scalaは、怖くないので、一緒に習得して、レベル アップしていきましょう! まずは、もくもく会で、学びを深めましょう! 9月は、さだまさしコンパイラーをきっかけに、 Scalaに興味を持った方が、上級者に助けられ て、さだまさしコンパイラーを実行することが できました! 「Scalaのコップ本で結婚できる」 という、都市伝 説は本物です。
  26. 26. 参考資料 Scalaスケーラブルプログラミング第2版 Scalaファンクショナルデザイン―関数型プログラ ミングの設計と理解 やさしいScala入門―平明な例と演習問題で学ぶ Learning Scala: Practical Functional Programming for the JVM https://dwango.github.io/scala_text/ https://ja.wikipedia.org/wiki/Scala
  27. 27. ありがとうございました

×