なんか、がりっちにScalaの話しろって言われたので
やります。

自己紹介

でじこちゃんかわいいガチ勢です
ご確認ください。

ふぁっ!?50分!?

LT枠じゃないの!?

今年も

よろしく

お願いしまScala

プログラミング言語Scalaの紹介と、

Scalaを学ぶこと、利用することのメリットを

などをお話します。

アジェンダ

  • 自己紹介
  • なぜScalaなのか
  • Scalaの紹介
  • Scalaでできること
  • Scalaことはじめ

アジェンダ

  • ScalaとAndroid
  • ライブコーディング

なぜScalaなのか?

なぜ関数型言語を学ぶの?

2つのなぜ?

  • なぜ関数型言語を学ぶ?
  • なぜScala学ぶ?

1つずつ説明します。

なぜ関数型言語なの?

  • 「手続き型言語」とは大きく異るパラダイム
  • 「手続き型言語」への導入

    • LINQ(C#)
    • Lambda(Java8)
    • Blocks(C,Objective-C)
  • 書いてて気持ちいい

なんで関数型言語なの?

  • 副作用が無い

    • 非同期処理も怖くない
    • 多人数開発も怖くない
  • 独自のデータ構造、処理

    • 複雑な処理を完結に
  • 書いてて気持ちいい

なぜScalaなの?

なぜScalaなの?

  • better Javaの側面

    • ある程度低い学習コスト
    • はじめての関数型言語として
  • JVM言語

    • これから先の実用性
  • 書いてて気持ちいい

まとめ

  • なぜ言語を学ぶのか?

    • 明日のために
  • なぜ関数型言語なのか

    • これから期待される
  • なぜScalaなのか?

    • こらから来る

書いてて気持ちいい

Scalaの紹介

Scalaの紹介

  • どういう言語なの?
  • どういうところで使うの?
  • どういう人におすすめ?

どういう言語なの?

  • 関数型言語
  • クラスベースのオブジェクト指向
  • JVMで動く

どういう言語なの?

  • Javaがつらいと思った人に人気です
  • ちなみに開発者はJavaのジェネリクスの開発者です
  • そう、Better Java

どういうところで使うの?

  • ScalaとはScalable languageに由来する言葉
  • 小さなものから大きなものまで
  • 幅広く使えます

小さなScala

  • スクリプト言語としてのScala

    • Ruby、Perlのように、スクリプトっぽく実行できる
  • 文字列操作も強いので、簡単なスクリプトもすぐ書ける
  • 標準I/Oもらくらく

大きなScala

  • コンパイラ言語としてのScala

    • Javaのバイトコードを吐き出します
  • クラスベースのオブジェクト指向

    • 大規模開発
  • 強力なビルドツール
  • フレームワークの提供

どういう人におすすめ?

  • プログラマも
  • マネージャーも

プログラマのためのScala

  • プログラマなら取っ付き易い文法
  • 初めての関数型言語として
  • ここから初める関数型言語

上流工程とScala

  • 関数型言語の台頭で、システムの設計に変化がくる
  • その時になって慌てないために
  • Java8がくるぞぉ・・・

いつはじめるの?

Scalaにできること

この世界を取り囲むScala

  • サーバーサイドでの採用実績が増えつつある
  • バッチとかならすぐ作れる
  • デーモン化も余裕
  • このスライドもScalaのツール

こんなところにScalaが

  • サーバーサイドのScala
  • ツールとしてのScala

サーバーサイドのScala

サーバーサイドのScala

  • Playframework
  • フルスタックフレームワーク
  • Javaのフレームワーク(だった)
  • 2.xからScalaを本格サポート
  • 今や立場逆転・・・

サーバーサイドのScala

ScalaでDSP作ってみた from Jiro Hiraiwa

サーバーサイドのScala

  • numa08.net
  • twitter,fourcquareの採用実績など
  • ググると結構出る

ツールとしてのScala

  • conscript
  • Scala製のツールのインストールができる
  • Scalaでツールを作れる

ツールとしてのScala

  • pciture show

    • スライドを作るやつ
  • giter8

    • Scalaのプロジェクトのひな形を作るやつ
  • halley

    • 某所から画像をダウンロードするツール

まとめ

  • Scalaはサーバーサイドでも使える
  • Scalaはツールとしても使える
  • ツールを作るためのツールも結構整ってる

Scala事始め

Scala事始め

  • 読むといい本
  • 揃えると良いツール
  • あとなんか

読むといい本

Guide to ScalaーScalaプログラミング入門

  • kindleで100円のやつ
  • 初めてScalaを触るのにちょうどいい内容
  • サクッと参照するのに便利

オブジェクト指向プログラマが次に読む本 -Scalaで学ぶ関数脳入門

  • Javaとかの経験者向け
  • Scalaの機能をひたすら解説

Scala逆引きレシピ

  • 逆引き形式でScalaの機能を解説
  • ある程度慣れてきたら読む
  • Kindleもあるよ

Scalaスケーラブルプログラミング第2版

  • 通称「コップ」本
  • Scalaの全てを知りたいならこれ
  • 最初に読む本じゃないかな

Play Framework 2徹底入門

  • JavaのPlayframeworkの本
  • テンプレートエンジン、ビルドツールとかScalaでも役立つ
  • 現在唯一nPlay関連の和書

Scalaの環境作り

Scalaの環境作り

  • エディタとコンパイラだけは辛い
  • 適切な開発環境を整えよう

時代はVim

ScalaIDE for eclipse

  • Eclipseベースの開発環境
  • JavaとScalaを同時に
  • コード補完、関数/変数の定義箇所へジャンプ
  • デバッガ

IntelliJ IDEA

  • 13からScalaサポート!
  • コード補完、クイックFix
  • VCSと連携、ビルドツールSBTサポート
  • Playframeworkをサポート

sbt

sbt

  • Scala Build Tool
  • すっごい べんりな つーる
  • ScalaとJavaのためのビルドツール

sbt

  • 参照の解決
  • テストの実行
  • 各種プラグインで機能強化
  • IDEはこれをベースにプロジェクトを作る

まとめ

  • kindleの本読むといいと思う
  • 便利なIDEもあるよ
  • sbt便利

ScalaとAndroid

ScalaでAndroidの開発できるの!?

  • jvmな言語だし
  • Scalaでできたら楽になる?
  • 夢は夢のままがいいかもしれない・・・

それから時が経って・・・

真:まとめ

  • やっぱり苦行っぽいです
  • Scaloid注目です

ライブコーディング

ライブコーディング

  • ようやくScalaのコードが出ます

お題

  • 新入女子社員を助けるやつ

新入女子社員を助けるやつ

新入女子社員を助けるやつ

ECサイト内の2つの異なる商品(値段は同じでも構わない)を購入し、
その合計価格が指定の価格以内で最大になる組み合せを探してください。

新入女子社員を助けるやつ

4 3  // 商品の総数は4個、キャンペーン日数は3日
8000 // 商品1の値段
4000 // 商品2の値段
9000 // 商品3の値段
6000 // 商品4の値段
3000 // 1日目のキャンペーン設定金額
14000 // 2日目のキャンペーン設定金額
10000 // 3日目のキャンペーン設定金額

新入女子社員を助けるやつ

0 // 1日目のキャンペーン設定金額(3000)
//に最も近い組み合せが無い場合0を出力
14000 // 2日目のキャンペーン設定金額(14000)
//に最も近い組み合せの合計金額
10000 // 3日目のキャンペーン設定金額(10000)
//に最も近い組み合せの合計金額

ライブコーディング