【Scala】Scala ~ 基本編 / カリー化 ~

■ はじめに

Scalaの本をみて、やっと「カリー化」の意味が分かったのでメモ。
(ただ、まだ、実際のメリットがいまいち分からない)

目次

【1】カリー化(currying)
 補足
【2】サンプル
 例1:Hello world
【3】メリット・デメリット

【1】カリー化(currying)

* 引数が元の関数の最初の引数で、残りの引数を取って結果を返す関数を返す
とか
* 複数の引数を持つ関数を、いくつかの関数の組み合わる仕組み

... って言っても意味が分からないので、サンプルを見た方がいい、、、

補足

* Haskell Brooks Curry さんが考案したものだから、「Curry」

* 他の言語でも使用される
 => JavaScript/TypeScript などなど

【2】サンプル

例1:Hello world

import scala.io.Source
import java.nio.file.{Paths, Files}
import java.nio.charset.StandardCharsets

object  Hello {
  def main(args: Array[String]): Unit = {
    val hi = sayHello("Hi")_
    // println(hi) // この時点は、まだ関数(Hello$$$Lambda$14/0x0000000100065840@727803de)
    val hiWithName = hi("Mike")
    // println(hiWithName) // この時点は、まだ関数(Hello$$$Lambda$19/0x000000010009d840@df27fae)
    val all = hiWithName("!!!")
    println(all) // Hi, Mike!!!
  }

  def sayHello(greeting: String)(name: String)(end: String): String = {
    return s"${greeting}, ${name}${end}"
  }
}

【3】メリット・デメリット

1)メリット

* プログラムの共通化を図り、堅牢で安全なプログラムを作る

https://kdotdev.com/kdotdev/monkey_curry

2)デメリット

* デバッグが難しくなる

https://qiita.com/bonten999/items/9dd44a2b0a550ac1166e

関連記事

Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331