Scalaめも #1

楽しい関数定義

環境

IntelliJ IDEA

関数定義

僕はpythonで初めて無名関数なるものを知ったのだけども、今回はScalaで無名関数書いてて楽しくなったのでメモる. あと、無名関数を使わずにただ関数をカリー化したやつもある。いろんな書き方があって楽しい。

まずは基本。

def add_basic(x: Int, y: Int) = x + y

add_basic(1, 2) // => 3

ここからあえてごちゃごちゃな書き方で書いてみる

def add_fn(x: Int) = (y: Int) => x + y

add_fn(1)(2)

def add_fn1 = (x: Int, y: Int) => x + y

add_fn1(1, 2)

def add_fn2(x: Int)(y: Int) =  x + y

add_fn2(1)(2)

うーん。キモい。ぶっちゃけこんなふうに書く必要ないなぁって思ったりするが。

で、ここからdefを使わずに関数を定義(?)してみる。

で(合ってるか不安だけど)

Scala

をサポート(?) しているので関数を

として扱うことのできる。

なので、関数を変数に格納することができる。(変数に束縛することができる(?))

ってことでvalで無名な関数を変数に束縛!

val add = ((x , y) => x + y): (Int, Int) => Int

add(1, 2)

val add1 = (x => y => x + y): Int => Int => Int

add1(1)(2)

val add2 = (x: Int) => (y: Int) => x + y

add2(1)(2)

val add3 = (x: Int, y: Int) => x + y

add3(1, 2)

型を書く場所が結構選べるっぽい。

でもまぁ関数を定義するときはdefで定義したほうが ぱっとみで関数と分かるしそのように書いたほうが良いとは思うので、 私は普通に書くときはdefを使って行こうと思う