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
を使わずに関数を定義(?)してみる。
で(合ってるか不安だけど)
をサポート(?) しているので関数を
として扱うことのできる。
なので、関数を変数に格納することができる。(変数に束縛することができる(?))
ってことで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
を使って行こうと思う