SlideShare a Scribd company logo
1 of 25
Download to read offline
Ruby使いのための



     Scalaで学ぶ
関数型プログラミング
      Presented by おおかゆか
自己紹介
       おおかゆか (id: oukayuka)
フリーランスのWebプログラマ。
元々はPHPerでしたが、最近はもっぱらRails案件を
生業に活動中。
Scalaに手を出したのは、ほんの3ヶ月ほど前。
エンジニアがお金について考えるためのrake:money
という勉強会を主宰してます。月1の頻度で都内にて
開催しているので、興味があればどうぞ。
  http://groups.google.co.jp/group/rakemoney
≪注意≫
Scalaって何?という方は、これを読
む前にまず
    「Ruby使いのための
      Scalaのススメ」
をご一読ください。
☞http://ja.verbmode.net/2009/10/03/
  recommend_of_scala_for_rubyist
よいRuby使いになるために
Rubyは「acceptable Lisp」とか「MatzLisp」と
揶揄されることもあるくらい、Lispからの影響
が強い言語である。
Ruby使いがより一歩ステップアップするため
にLispを学ぼうとはよく言われるところ。
Eric Raymond も Paul Grahamも、ことあるご
とにLispを薦めてくる。
しかしMatzも認めるように、Lispは普通の人
には扱いきれない習得コストの高い言語。
そこでScalaですよ
それでもScalaなら…、Scalaならきっと何とかしてく
れる。というのも、Scalaは最もRubyに似た関数型
言語だから。
Rubyと同じくALGOL系の文法を持つScalaは、関
数型言語のエッセンスを全て備えながら、Rubyと
同じく徹底したオブジェクト指向言語でもある。
Scalaこそが、Ruby使いが関数型プログラミングを
学ぶのに最も適した言語と言えよう。
Scalaを学べば、きっとよりよいRuby使いになれる
はずである…たぶん。
➀ まずはScala
    の文法の基礎
    から

  魔法少女Scalaちゃん ©2009 熊ジェット
1-1. 変数の定義
 ≪使ったらある意味負け≫          ≪Scalaちゃん推奨≫

■var(変数)型          ■val(値)型
var 変数名:型=値        val 変数名:型=値

例)                 例)
> var n: Int = 1   > val n: Int = 1
☞n: Int = 1        ☞n: Int = 1
                              再代入できない!
> n = 3            > n = 3
☞n: Int = 3        ☞error:
                   reassginment to val
1-2. 代表的な型
数値     > val n: Int = 1
       ☞n: Int = 1

文字列    > val str: String = ”hoge”
       ☞str: java.lang.String = hoge

シンボル > val sym: Symbol = 'piyo
       ☞sym: Symbol = 'piyo

リスト    > val l: List[Int] = List(1,2,3)
       ☞l: List[Int] = List(1,2,3)
1-3. 関数の定義
def 関数名(引数名:型, …):返り値の型 = {
   処理内容
}

例)
> def max(x: Int, y: Int): Int = {
|    if (x < y) y else x
| }
> max(8, 3)
☞res1: Int = 8
1-4. 型推論
変数や関数の返り値の型宣言は、コンパイラ
が推測できる限りにおいて省略できる!
            省略
例)
> val i = 4
☞i: Int = 4

> val d = List(0.1, 1.2, 3.4)
☞d: List[Double] = List(0.1, 1.2, 3.4)

> def hello = ”Hello, World!”
☞hello: java.lang.String
1-5. 制御構文(1) - if
if (条件文1) 値1 else if (条件文2) 値2 …
else 値3
              必ず値を返すことに注意!

例)
> if (str.size < 3) {
|   ”It's short.”
| } else if (str.size < 6) {
|   ”Not so long.”
| } else ”It's long.”
☞res1: java.lang.String = It's long.
1-6. 制御構文(2) - for
for (ブロック引数 <- コレクション; …) 処理内容
for (ブロック引数 <- コレクション; …) yield 値

例)
> for (i <- 1 to 9) print(i + ” ”)
☞1 2 3 4 5 6 7 8 9

> for (i <- (1 to 9).toList) yield i + 1
☞res1: List[Int] = List(2,3,4,5,6,7,8,9,10)

> for (i <- 1 to 2; j <- 1 to 3) print("[" + i +
"," + j + "]")                    外2回、内3回の
☞[1,1][1,2][1,3][2,1][2,2][2,3] 二重ループ
➁
      関数型プログラ
      ミングいくよー


    魔法少女Scalaちゃん ©2009 熊ジェット
2-1. 高階関数
Rubyのmapやsortメソッドのように、関数を引数に
とる関数のこと。
例)
> List(1,2,3).map(n => n + 1)
☞res1: List[Int] = List(2,3,4)

> List(1,2,3,4,5).filter(n => n % 2 == 0)
☞res2: List[Int] = List(2, 4)
                            魔法の「_」(アンダーバー)
> List(1,2,3,4).map(_ * 2)
☞res3: List[Int] = List(2,4,6,8)
2-2. クロージャ
名前を定義せずに作成した関数のこと。「無名関
数」とも言う。変数に代入可。
(引数:型,…) => 値

例)
> val sq = (n: Int) => Math.pow(n, 2).toInt
> sq(6)           定義したクロージャ
☞res1: Int = 36 を変数sqに代入

> List(1,2,3,4,5).map(sq)
☞res2: List[Int] = List(1,4,9,16,25)
2-3. 関数と変数は等価
例)
> val half = (n: Int) => n / 2
☞half: (Int) => Int = <function>

> half(14)
☞res1: Int => 7

> def quartize(n: Int) = n / 4
> val quarter = quartize _
> quarter(20)                    仮引数を「_」で表記
☞res1: Int => 5                  (_)のカッコは省略可
2-4. パターンマッチング(1)
引数 match {
  case パターン1 => 処理1 or 値1
           :
  case _ => 処理x or 値x
}

例)
> val str = ”world”
> str match {
|   case ”world” => println(”Hello!”)
|   case _ => ()
| }
☞Hello!       その他のケースは「_」にマッチ
2-5. パターンマッチング(2)
例)
> List(1,2,3) match {
|   case List(a, b, c) => a + b + c
|   case _ => 0
}                     変数a,b,cに値を束縛
☞res1: Int = 6

> val v: Any = ”hoge” 型のマッチ
> v match {
|   case i: Int    => i * 100
|   case s: String => s.size
| }
☞res2: Int = 4
2-6. 再帰関数
例)                              ループ型
> def sumLoop(n: Int) = {
|   var total = 0
|   for (i <- 1 to n) total += i
|   total
| }
                               再帰型
> def sumRecursive(n: Int): Int = n match {
|   case 1 => 1                       返り値の型宣言
                                      が必要!
|   case _ => n + sumRecursive(n - 1)
| }
> (sumLoop(10), sumRecursive(10))
☞res1: (Int, Int) = (55,55)
2-7. カリー化
複数の引数をとる関数を、引数が「元の関数の最初
の引数」で返り値が「元の関数の残りの引数をとり結
果を返す関数」であるような関数にすること。
例)
> def multi(n: Int)(m: Int) = m * n
> multi(6)(9)
☞res1: Int = 54

> def multiTwo = multi(2)_
> multiTwo(5)                引数nに2を代入
                             mはそのまま仮引数
☞res2: Int = 10              として渡す
2-8. 遅延評価
オブジェクトのフィールドの評価を、初期化時ではなく
参照時に行うようにする。
例)
> class SchrodingerCat {
|   lazy val status = {
|     println("Here open a box..."); "Alive!"
|   }
| }    まだstatusが評価されてない

> val cat = new SchrodingerCat
> cat.status              ここで初めてstatusが評価される!
☞Here open a box...
☞res1: java.lang.String = Alive!
➌        せめて、Ruby
                っ
               ぽ
         第参最終章
                く

    魔法少女Scalaちゃん ©2009 熊ジェット
3-1. Implicit Conversion
Rubyはオープンクラスなので既存のクラスを自由に上書
きできる。しかしScalaは厳密な静的型付け言語のため同
じことはできない。しかし暗黙の型変換を使えば、おおよ
              暗黙の型変換
その場合その目的を達成できる。
例)
> class Cat
> class Man { def greet = ”Hello!” }
> implicit def cat2man(c: Cat): Man = new Man

> val cat = new Cat 瞬間的にCatオブジェクトが
                    Manオブジェクトに変身!
> cat.greet
☞res1: java.lang.String = Hello!
3-2. Structural Subtyping
Scalaでダックタイピングっぽいことをやるための仕組み。
      ダックタイピング
例)
> class   Cat
> class   Duck {
| def     swim = ()
| def     quack = "Quaaa!"      Tはswimメソッドとquack
| }                             メソッドをもった型クラス


> def duckTest[T](x: T { def swim; def quack:
String }) = "You're a duck!"
> duckTest(new Duck)
☞res1: java.lang.String = You're a duck!
> duckTest(new Cat)
☞<console>: error: type mismatch
以上です。
   もっとScalaを詳しく
   知りたくなった人は、
   コップ本買ってね。
      『Scalaスケーラブルプログラミング』
      (通称:コップ本)



魔法少女Scalaちゃん ©2009 熊ジェット

More Related Content

What's hot

並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)x1 ichi
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLispKent Ohashi
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルなおき きしだ
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream APIdcomsolution
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascriptRyuma Tsukano
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオン60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオンHiroto Yamakawa
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4Shingo Inoue
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 

What's hot (20)

並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
Perfect python section5
Perfect python section5Perfect python section5
Perfect python section5
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
 
Functional Way
Functional WayFunctional Way
Functional Way
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオン60分で体験する Stream / Lambda
 ハンズオン
60分で体験する Stream / Lambda
 ハンズオン
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 

Viewers also liked

Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekKazuhiro Sera
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24Kazuhiro Sera
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 

Viewers also liked (6)

Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
Why Scala?
Why Scala?Why Scala?
Why Scala?
 

Similar to (Ruby使いのための)Scalaで学ぶ関数型プログラミング

プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語ScalaTanUkkii
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章Yuta Yokoi
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットTaisuke Oe
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
ゼロから始めるScala文法 (再)
ゼロから始めるScala文法 (再)ゼロから始めるScala文法 (再)
ゼロから始めるScala文法 (再)Suguru Hamazaki
 

Similar to (Ruby使いのための)Scalaで学ぶ関数型プログラミング (20)

プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Python opt
Python optPython opt
Python opt
 
Q13
Q13Q13
Q13
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
ゼロから始めるScala文法 (再)
ゼロから始めるScala文法 (再)ゼロから始めるScala文法 (再)
ゼロから始めるScala文法 (再)
 

More from Ouka Yuka

Forkwellはどこへ進むのか ―サービスの由来とこれからの展望―
Forkwellはどこへ進むのか ―サービスの由来とこれからの展望― Forkwellはどこへ進むのか ―サービスの由来とこれからの展望―
Forkwellはどこへ進むのか ―サービスの由来とこれからの展望― Ouka Yuka
 
エンジニアのスキルネットワークサービス Forkwell のご紹介
エンジニアのスキルネットワークサービス Forkwell のご紹介エンジニアのスキルネットワークサービス Forkwell のご紹介
エンジニアのスキルネットワークサービス Forkwell のご紹介Ouka Yuka
 
Scalaを遊ぶ!会 参加者募集のおしらせ。
Scalaを遊ぶ!会 参加者募集のおしらせ。Scalaを遊ぶ!会 参加者募集のおしらせ。
Scalaを遊ぶ!会 参加者募集のおしらせ。Ouka Yuka
 
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~Ouka Yuka
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメRuby使いのためのScalaのススメ
Ruby使いのためのScalaのススメOuka Yuka
 

More from Ouka Yuka (6)

Forkwellはどこへ進むのか ―サービスの由来とこれからの展望―
Forkwellはどこへ進むのか ―サービスの由来とこれからの展望― Forkwellはどこへ進むのか ―サービスの由来とこれからの展望―
Forkwellはどこへ進むのか ―サービスの由来とこれからの展望―
 
エンジニアのスキルネットワークサービス Forkwell のご紹介
エンジニアのスキルネットワークサービス Forkwell のご紹介エンジニアのスキルネットワークサービス Forkwell のご紹介
エンジニアのスキルネットワークサービス Forkwell のご紹介
 
Scalaを遊ぶ!会 参加者募集のおしらせ。
Scalaを遊ぶ!会 参加者募集のおしらせ。Scalaを遊ぶ!会 参加者募集のおしらせ。
Scalaを遊ぶ!会 参加者募集のおしらせ。
 
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~
rake:money拡大版@Ruby会議2010 ~Rubyエンジニアと企業の幸せな関係~
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメRuby使いのためのScalaのススメ
Ruby使いのためのScalaのススメ
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

(Ruby使いのための)Scalaで学ぶ関数型プログラミング