SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Scalaやろうぜ!
                  by Abe Asami




12年12月27日木曜日
自己紹介

               Abe Asami きの子 (フリーエンジニア)
               http://nocono.net/
               Twitter: @aa7th
               使用言語:Java、C#など




12年12月27日木曜日
先日こんな発表をしてきました




12年12月27日木曜日
2012/11/24(土)
               第2回 関数型言語勉強会 大阪にて




                http://nocono.net/12

12年12月27日木曜日
その後




12年12月27日木曜日
あんまりはかどっていません




12年12月27日木曜日
また2日前から焦ってちょっと
                   頑張りました




12年12月27日木曜日
というわけで・・・
      初心者による初心者のためのScala講座
           はじまりはじまり




12年12月27日木曜日
Scalaって何?
               JVM言語

               オブジェクト指向であり関数型

               ポストJavaとして注目されている



12年12月27日木曜日
メリット
               Javaと比較して簡潔に記述できる
               (コード量が1/2∼1/3は減る)
               静的型付け、事前コンパイル
               Javaライブラリ利用可能
               並行処理に強い


12年12月27日木曜日
メリット
               Javaと比較して簡潔に記述できる
               (コード量が1/2∼1/3は減る)
               静的型付け、事前コンパイル
               Javaライブラリ利用可能
               並行処理に強い

                スケーラビリティが高い
12年12月27日木曜日
デメリット
               コンパイルが遅い
               エンジニアが少ない
               関数型についての学習コスト
               が高い



12年12月27日木曜日
関数型って?
        関数を値(リテラル)として扱う言語
               数学的な関数のこと


     「副作用」を極力避ける
               コンピュータの論理的な状態を変化させない!
               変数への代入を避けて定数を使用する

                        イミュータブル

12年12月27日木曜日
副作用がないと...

               変数に想定外の値がはいっていた!
               というような事態がない
               並行処理がこわくなくなる




12年12月27日木曜日
副作用がないと...

               変数に想定外の値がはいっていた!
               というような事態がない
               並行処理がこわくなくなる

                 バグが減少する

12年12月27日木曜日
とりあえずはじめてみましょう




12年12月27日木曜日
インストール
           http://www.scala-lang.org/downloads



         もしくはHomebrewで
               brew install scala




12年12月27日木曜日
REPLで実行

                $scala




12年12月27日木曜日
REPLで実行

               scala> val num = 5
               num: Int = 5




12年12月27日木曜日
変数と定数
               scala> val num = 5
               num: Int = 5


                val = 定数
                var = 変数




12年12月27日木曜日
型推論
               scala> val num = 5
               num: Int = 5



               型宣言しなくていい!




12年12月27日木曜日
基本型
                 scala> val num = 5
                 num: Int = 5


               Intクラス型
               コンパイル時にintに変換される




12年12月27日木曜日
セミコロン推論
               scala> val num = 5
               num: Int = 5



               セミコロンを省略できる




12年12月27日木曜日
次のJavaプログラムを
       初心者なりにScalaで書き換えてみました




12年12月27日木曜日
Java
        public class Sum {
            public static void main(String[] args) {
                int start = Integer.parseInt(args[0]);
                int end = Integer.parseInt(args[1]);

                   int sum = 0;
                   for (int num = start; num <= end; num++)
                       sum += num;

                   System.out.println(sum);
               }
        }




12年12月27日木曜日
Scala
               object Sum {
                 def main(args: Array[String]) {
                   val start = args(0).toInt
                   val end = args(1).toInt

                       var sum = 0
                       for (num <- start to end)
                         sum += num

                       println(sum)
                   }
               }




12年12月27日木曜日
Scala
                                      シングルトンクラス
               object Sum {
                 def main(args: Array[String]) {
                   val start = args(0).toInt
                   val end = args(1).toInt

                       var sum = 0
                       for (num <- start to end)
                         sum += num
                                             コレクション(Range)
                       println(sum)
                   }
               }




12年12月27日木曜日
まだ短くなる筈だ!




12年12月27日木曜日
var sum = 0
                   for (num <- start to end)
                     sum += num




               val sum = (0 /: (start to end)) (_+_)




12年12月27日木曜日
順を追って説明します




12年12月27日木曜日
var sum = 0
                        for (num <- start to end)
                          sum += num




               def add(x:Int, y:Int) : Int = {x + y}
               val sum = (start to end).foldLeft(0)(add)
                                      初期値


                                        リストの各要素に対して
                            ※引数が分割されている    行う処理




12年12月27日木曜日
def add(x:Int, y:Int) : Int = {x + y}
               val sum = (start to end).foldLeft(0)(add)




                                       戻り値の型省略      1行なので
                                                    中括弧省略
               def add(x:Int, y:Int) = x + y
               val sum = (start to end).foldLeft(0)(add)


         ・等号を省略すると戻り値無しとみなされる
         ・戻り値型の省略はほどほどに (分かりにくくなるかも)


12年12月27日木曜日
def add(x:Int, y:Int) = x + y
               val sum = (start to end).foldLeft(0)(add)



                                                 無名関数



    val sum = (start to end).foldLeft(0)((x, y) => x + y)




12年12月27日木曜日
val sum = (start to end).foldLeft(0)((x, y) => x + y)




                                            プレースホルダー


           val sum = (start to end).foldLeft(0)(_+_)


                    ※引数が1回しか使われない場合のみ




12年12月27日木曜日
val sum = (start to end).foldLeft(0)(_+_)




                                           foldLeftの別名


                 val sum = (start to end)./:(0)(_+_)




12年12月27日木曜日
val sum = (start to end)./:(0)(_+_)




               val sum = (0 /: (start to end)) (_+_)


                             演算子記法




12年12月27日木曜日
最終的にこうなりました




12年12月27日木曜日
Scala(最終版)

        object Sum {
          def main(args: Array[String]) {
            println((0 /: (args(0).toInt to args(1).toInt)) (_+_))
          }
        }

               追記:ここまでやると可読性が下がるので、
                  程々のところで止めておくのがよいとのことです。
                  というか、リストの合計を出すsum関数があるので、実際は
                  (args(0).toInt to args(1).toInt).sum
                  でOK!




12年12月27日木曜日
Before                                             After
  public class Sum {                                 object Sum {
      public static void main(String[] args) {         def main(args: Array[String]) {
          int start = Integer.parseInt(args[0]);         println((0 /: (args(0).toInt to args(1).toInt)) (_+_))
          int end = Integer.parseInt(args[1]);         }
                                                     }
          int sum = 0;
          for (int num = start; num <= end; num++)
              sum += num;

          System.out.println(sum);
      }
  }




12年12月27日木曜日
Before                                             After
  public class Sum {                                 object Sum {
      public static void main(String[] args) {         def main(args: Array[String]) {
          int start = Integer.parseInt(args[0]);         println((0 /: (args(0).toInt to args(1).toInt)) (_+_))
          int end = Integer.parseInt(args[1]);         }
                                                     }
          int sum = 0;
          for (int num = start; num <= end; num++)
              sum += num;

          System.out.println(sum);
      }
  }




                                 / ドヤァ...\




12年12月27日木曜日
どうやらリスト操作を覚えると
           割と簡単に関数型ちっくな書き方が
                できるようです




12年12月27日木曜日
リスト操作については
       この後@mumoshuさんのセッションにて!




12年12月27日木曜日
慣れないうちはこの書き方でも
                   良いと思います
                object Sum {
                  def main(args: Array[String]) {
                    val start = args(0).toInt
                    val end = args(1).toInt

                        var sum = 0
                        for (num <- start to end)
                          sum += num

                        println(sum)
                    }
                }



12年12月27日木曜日
無理せず楽しく慣れていきましょ!




12年12月27日木曜日
おすすめ書籍




                通称:コップ本

12年12月27日木曜日
お役立ちサイト
  「Coursera」(英語)
       https://www.coursera.org/



 「Hishidama s Scala Memo」
       http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html


  「Scala Cookbook」
       http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html




12年12月27日木曜日
お役立ちサイト
     「刺激を求める技術者に捧げるScala講座(ITPro)」
          http://itpro.nikkeibp.co.jp/article/COLUMN/20080613/308019/




      「Scala入門(@IT)」
          http://www.atmarkit.co.jp/fjava/index/index_scala.html




12年12月27日木曜日
ご清聴ありがとうございましたm(_ _)m




12年12月27日木曜日

Weitere ähnliche Inhalte

Andere mochten auch

PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選しますKoyo Yamamori
 
2012 BYOiPad Parent Information Evening 2
2012 BYOiPad Parent Information Evening 22012 BYOiPad Parent Information Evening 2
2012 BYOiPad Parent Information Evening 2jarruzza
 
WebStandards-Basic 4.box
WebStandards-Basic 4.boxWebStandards-Basic 4.box
WebStandards-Basic 4.boxEulsoo Jung
 
151121_お台場海苔づくり説明会
151121_お台場海苔づくり説明会151121_お台場海苔づくり説明会
151121_お台場海苔づくり説明会Koyo Yamamori
 
Municipalities and Districts Brochure
Municipalities and Districts Brochure Municipalities and Districts Brochure
Municipalities and Districts Brochure Henry Ka
 
150430 教育学特殊XIV 第3講
150430 教育学特殊XIV 第3講150430 教育学特殊XIV 第3講
150430 教育学特殊XIV 第3講Koyo Yamamori
 
Cách mới để món cá sốt cà ri ngon bất ngờ
Cách mới để món cá sốt cà ri ngon bất ngờCách mới để món cá sốt cà ri ngon bất ngờ
Cách mới để món cá sốt cà ri ngon bất ngờCác Món Ăn Ngon
 
For chiropractic to progress it no longer needs Philosophy?
For chiropractic to progress it no longer needs Philosophy?For chiropractic to progress it no longer needs Philosophy?
For chiropractic to progress it no longer needs Philosophy?Braddon Atkinson
 
FloBoard SlideShare
FloBoard SlideShareFloBoard SlideShare
FloBoard SlideShareFloBoard
 
150929 教育評価論(三田)第1講
150929 教育評価論(三田)第1講150929 教育評価論(三田)第1講
150929 教育評価論(三田)第1講Koyo Yamamori
 
150430 教育学特殊14 レクチャーパケットの表紙
150430 教育学特殊14 レクチャーパケットの表紙150430 教育学特殊14 レクチャーパケットの表紙
150430 教育学特殊14 レクチャーパケットの表紙Koyo Yamamori
 
Anteprima modulo 3
Anteprima modulo 3Anteprima modulo 3
Anteprima modulo 3eAgisco
 
Благотворительный фонд "Красивые дети в красивом мире"
Благотворительный фонд "Красивые дети в красивом мире"Благотворительный фонд "Красивые дети в красивом мире"
Благотворительный фонд "Красивые дети в красивом мире"Любовь Полякова
 

Andere mochten auch (20)

PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します
150428 慶応の学生に読ませようと作ったビブリオ あまりにも多すぎるので精選します
 
Mike baker imagenes
Mike baker imagenesMike baker imagenes
Mike baker imagenes
 
HTML5 & CSS3
HTML5 & CSS3HTML5 & CSS3
HTML5 & CSS3
 
2012 BYOiPad Parent Information Evening 2
2012 BYOiPad Parent Information Evening 22012 BYOiPad Parent Information Evening 2
2012 BYOiPad Parent Information Evening 2
 
WebStandards-Basic 4.box
WebStandards-Basic 4.boxWebStandards-Basic 4.box
WebStandards-Basic 4.box
 
151121_お台場海苔づくり説明会
151121_お台場海苔づくり説明会151121_お台場海苔づくり説明会
151121_お台場海苔づくり説明会
 
Municipalities and Districts Brochure
Municipalities and Districts Brochure Municipalities and Districts Brochure
Municipalities and Districts Brochure
 
Cua đồng rang me
Cua đồng rang meCua đồng rang me
Cua đồng rang me
 
150430 教育学特殊XIV 第3講
150430 教育学特殊XIV 第3講150430 教育学特殊XIV 第3講
150430 教育学特殊XIV 第3講
 
Cách mới để món cá sốt cà ri ngon bất ngờ
Cách mới để món cá sốt cà ri ngon bất ngờCách mới để món cá sốt cà ri ngon bất ngờ
Cách mới để món cá sốt cà ri ngon bất ngờ
 
For chiropractic to progress it no longer needs Philosophy?
For chiropractic to progress it no longer needs Philosophy?For chiropractic to progress it no longer needs Philosophy?
For chiropractic to progress it no longer needs Philosophy?
 
FloBoard SlideShare
FloBoard SlideShareFloBoard SlideShare
FloBoard SlideShare
 
150929 教育評価論(三田)第1講
150929 教育評価論(三田)第1講150929 教育評価論(三田)第1講
150929 教育評価論(三田)第1講
 
Charts
ChartsCharts
Charts
 
Edema tx
Edema txEdema tx
Edema tx
 
150430 教育学特殊14 レクチャーパケットの表紙
150430 教育学特殊14 レクチャーパケットの表紙150430 教育学特殊14 レクチャーパケットの表紙
150430 教育学特殊14 レクチャーパケットの表紙
 
Regal
RegalRegal
Regal
 
Anteprima modulo 3
Anteprima modulo 3Anteprima modulo 3
Anteprima modulo 3
 
Благотворительный фонд "Красивые дети в красивом мире"
Благотворительный фонд "Красивые дети в красивом мире"Благотворительный фонд "Красивые дети в красивом мире"
Благотворительный фонд "Красивые дети в красивом мире"
 

Mehr von Asami Abe

ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでAsami Abe
 
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介Asami Abe
 
関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介Asami Abe
 
makeのススメ
makeのススメmakeのススメ
makeのススメAsami Abe
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門Asami Abe
 
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Asami Abe
 
フリーランスエンジニアになって1年が経ちました - 俺聞け4
フリーランスエンジニアになって1年が経ちました - 俺聞け4フリーランスエンジニアになって1年が経ちました - 俺聞け4
フリーランスエンジニアになって1年が経ちました - 俺聞け4Asami Abe
 
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kb
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kbSkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kb
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kbAsami Abe
 
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)Asami Abe
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
Play2+Scala事始め
Play2+Scala事始めPlay2+Scala事始め
Play2+Scala事始めAsami Abe
 
【俺聞け5】私とflashとhtml5&java script
【俺聞け5】私とflashとhtml5&java script【俺聞け5】私とflashとhtml5&java script
【俺聞け5】私とflashとhtml5&java scriptAsami Abe
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!Asami Abe
 

Mehr von Asami Abe (14)

ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
 
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介【ScalaMatsuri2016】関西のScalaコミュニティ紹介
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
 
関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介
 
makeのススメ
makeのススメmakeのススメ
makeのススメ
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
 
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
 
フリーランスエンジニアになって1年が経ちました - 俺聞け4
フリーランスエンジニアになって1年が経ちました - 俺聞け4フリーランスエンジニアになって1年が経ちました - 俺聞け4
フリーランスエンジニアになって1年が経ちました - 俺聞け4
 
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kb
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kbSkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kb
SkinnyFrameworkやろうぜ!(+ScalaMatsuriレポート) #scala_kb
 
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)
Introduction of Scala Kansai Beginners (ScalaMatsuri2014LT)
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Play2+Scala事始め
Play2+Scala事始めPlay2+Scala事始め
Play2+Scala事始め
 
【俺聞け5】私とflashとhtml5&java script
【俺聞け5】私とflashとhtml5&java script【俺聞け5】私とflashとhtml5&java script
【俺聞け5】私とflashとhtml5&java script
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!
 

20121222 scalaビギナーズ

  • 1. Scalaやろうぜ! by Abe Asami 12年12月27日木曜日
  • 2. 自己紹介 Abe Asami きの子 (フリーエンジニア) http://nocono.net/ Twitter: @aa7th 使用言語:Java、C#など 12年12月27日木曜日
  • 4. 2012/11/24(土) 第2回 関数型言語勉強会 大阪にて http://nocono.net/12 12年12月27日木曜日
  • 7. また2日前から焦ってちょっと 頑張りました 12年12月27日木曜日
  • 8. というわけで・・・ 初心者による初心者のためのScala講座 はじまりはじまり 12年12月27日木曜日
  • 9. Scalaって何? JVM言語 オブジェクト指向であり関数型 ポストJavaとして注目されている 12年12月27日木曜日
  • 10. メリット Javaと比較して簡潔に記述できる (コード量が1/2∼1/3は減る) 静的型付け、事前コンパイル Javaライブラリ利用可能 並行処理に強い 12年12月27日木曜日
  • 11. メリット Javaと比較して簡潔に記述できる (コード量が1/2∼1/3は減る) 静的型付け、事前コンパイル Javaライブラリ利用可能 並行処理に強い スケーラビリティが高い 12年12月27日木曜日
  • 12. デメリット コンパイルが遅い エンジニアが少ない 関数型についての学習コスト が高い 12年12月27日木曜日
  • 13. 関数型って? 関数を値(リテラル)として扱う言語 数学的な関数のこと 「副作用」を極力避ける コンピュータの論理的な状態を変化させない! 変数への代入を避けて定数を使用する イミュータブル 12年12月27日木曜日
  • 14. 副作用がないと... 変数に想定外の値がはいっていた! というような事態がない 並行処理がこわくなくなる 12年12月27日木曜日
  • 15. 副作用がないと... 変数に想定外の値がはいっていた! というような事態がない 並行処理がこわくなくなる バグが減少する 12年12月27日木曜日
  • 17. インストール http://www.scala-lang.org/downloads もしくはHomebrewで brew install scala 12年12月27日木曜日
  • 18. REPLで実行 $scala 12年12月27日木曜日
  • 19. REPLで実行 scala> val num = 5 num: Int = 5 12年12月27日木曜日
  • 20. 変数と定数 scala> val num = 5 num: Int = 5 val = 定数 var = 変数 12年12月27日木曜日
  • 21. 型推論 scala> val num = 5 num: Int = 5 型宣言しなくていい! 12年12月27日木曜日
  • 22. 基本型 scala> val num = 5 num: Int = 5 Intクラス型 コンパイル時にintに変換される 12年12月27日木曜日
  • 23. セミコロン推論 scala> val num = 5 num: Int = 5 セミコロンを省略できる 12年12月27日木曜日
  • 24. 次のJavaプログラムを 初心者なりにScalaで書き換えてみました 12年12月27日木曜日
  • 25. Java public class Sum { public static void main(String[] args) { int start = Integer.parseInt(args[0]); int end = Integer.parseInt(args[1]); int sum = 0; for (int num = start; num <= end; num++) sum += num; System.out.println(sum); } } 12年12月27日木曜日
  • 26. Scala object Sum { def main(args: Array[String]) { val start = args(0).toInt val end = args(1).toInt var sum = 0 for (num <- start to end) sum += num println(sum) } } 12年12月27日木曜日
  • 27. Scala シングルトンクラス object Sum { def main(args: Array[String]) { val start = args(0).toInt val end = args(1).toInt var sum = 0 for (num <- start to end) sum += num コレクション(Range) println(sum) } } 12年12月27日木曜日
  • 29. var sum = 0 for (num <- start to end) sum += num val sum = (0 /: (start to end)) (_+_) 12年12月27日木曜日
  • 31. var sum = 0 for (num <- start to end) sum += num def add(x:Int, y:Int) : Int = {x + y} val sum = (start to end).foldLeft(0)(add) 初期値 リストの各要素に対して ※引数が分割されている 行う処理 12年12月27日木曜日
  • 32. def add(x:Int, y:Int) : Int = {x + y} val sum = (start to end).foldLeft(0)(add) 戻り値の型省略 1行なので 中括弧省略 def add(x:Int, y:Int) = x + y val sum = (start to end).foldLeft(0)(add) ・等号を省略すると戻り値無しとみなされる ・戻り値型の省略はほどほどに (分かりにくくなるかも) 12年12月27日木曜日
  • 33. def add(x:Int, y:Int) = x + y val sum = (start to end).foldLeft(0)(add) 無名関数 val sum = (start to end).foldLeft(0)((x, y) => x + y) 12年12月27日木曜日
  • 34. val sum = (start to end).foldLeft(0)((x, y) => x + y) プレースホルダー val sum = (start to end).foldLeft(0)(_+_) ※引数が1回しか使われない場合のみ 12年12月27日木曜日
  • 35. val sum = (start to end).foldLeft(0)(_+_) foldLeftの別名 val sum = (start to end)./:(0)(_+_) 12年12月27日木曜日
  • 36. val sum = (start to end)./:(0)(_+_) val sum = (0 /: (start to end)) (_+_) 演算子記法 12年12月27日木曜日
  • 38. Scala(最終版) object Sum { def main(args: Array[String]) { println((0 /: (args(0).toInt to args(1).toInt)) (_+_)) } } 追記:ここまでやると可読性が下がるので、    程々のところで止めておくのがよいとのことです。    というか、リストの合計を出すsum関数があるので、実際は    (args(0).toInt to args(1).toInt).sum    でOK! 12年12月27日木曜日
  • 39. Before After public class Sum { object Sum { public static void main(String[] args) { def main(args: Array[String]) { int start = Integer.parseInt(args[0]); println((0 /: (args(0).toInt to args(1).toInt)) (_+_)) int end = Integer.parseInt(args[1]); } } int sum = 0; for (int num = start; num <= end; num++) sum += num; System.out.println(sum); } } 12年12月27日木曜日
  • 40. Before After public class Sum { object Sum { public static void main(String[] args) { def main(args: Array[String]) { int start = Integer.parseInt(args[0]); println((0 /: (args(0).toInt to args(1).toInt)) (_+_)) int end = Integer.parseInt(args[1]); } } int sum = 0; for (int num = start; num <= end; num++) sum += num; System.out.println(sum); } } / ドヤァ...\ 12年12月27日木曜日
  • 41. どうやらリスト操作を覚えると 割と簡単に関数型ちっくな書き方が できるようです 12年12月27日木曜日
  • 42. リスト操作については この後@mumoshuさんのセッションにて! 12年12月27日木曜日
  • 43. 慣れないうちはこの書き方でも 良いと思います object Sum { def main(args: Array[String]) { val start = args(0).toInt val end = args(1).toInt var sum = 0 for (num <- start to end) sum += num println(sum) } } 12年12月27日木曜日
  • 45. おすすめ書籍 通称:コップ本 12年12月27日木曜日
  • 46. お役立ちサイト 「Coursera」(英語) https://www.coursera.org/ 「Hishidama s Scala Memo」 http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html 「Scala Cookbook」 http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html 12年12月27日木曜日
  • 47. お役立ちサイト 「刺激を求める技術者に捧げるScala講座(ITPro)」 http://itpro.nikkeibp.co.jp/article/COLUMN/20080613/308019/ 「Scala入門(@IT)」 http://www.atmarkit.co.jp/fjava/index/index_scala.html 12年12月27日木曜日