LoginSignup
1
2

More than 3 years have passed since last update.

『Demo of FOUNDATIONS OF FUNCTIONAL PROGRAMMING IN SCALA』学んだことまとめ

Last updated at Posted at 2020-08-03

概要

『Demo of FOUNDATIONS OF FUNCTIONAL PROGRAMMING IN SCALA』で学習した内容を備忘録としてまとめる。

Val関数とDef関数

Val関数とDef関数の違い

  • Val関数はデータ構造を持つオブジェクト(型はFunction0~Function22)
  • Def関数はメソッド
  • Def関数は引数に名前をつけることができ、Val関数はできない(型のみ指定できる)
Val関数
// 引数から得られる情報量が少ない(「Int型の値を3つ引数に取り、Date型の値を作成する」ことしかわからない)
val createDate: (Int, Int, Int) => Date = {
    // do something
}
Def関数
// 引数から得られる情報量が多い(「年、月、日を受け取って、その日付をDate型の値として作成する」ことまでわかる)
def createDate(year: Int, month: Int, dayOfMonth: Int): Date = {
    // do something
}

// 引数の名前を明示すれば、呼び出し時の引数の順番を変えることができる
val christmas = createDate(dayOfMonth = 25, month = 12, year = 2020)

関数を定義する際は、基本的にはDef関数を使用する

Def関数からVal関数への変換

  • 方法1
    末尾にアンダースコアを付ける

  • 方法2
    引数の型と数、戻り値の型が同じ場合、コンパイラが自動で変換する

方法1
def createDate(year: Int, month: Int, dayOfMonth: Int): Date = {
    // do something
}

val valFunc: (Int, Int, Int) => Date = createDate _
方法2
def createDate(year: Int, month: Int, dayOfMonth: Int): Date = {
    // do something
}

// 引数の型と数、戻り値の型が変数valFuncの型と一致している
val valFunc: (Int, Int, Int) => Date = createDate

高階関数

高階関数とは

関数を引数に取る関数

プロパティベーステスト

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2