LoginSignup
3
1

More than 5 years have passed since last update.

ScalaのAPIドキュメントが難しいのでバラして理解しようという試み

Last updated at Posted at 2018-04-15

はじめに

ScalaのAPIドキュメントが、初見で記号の羅列にしか見えなかったので、代表的なクラスやメソッドを調べてみました。ここではメソッド定義のそれぞれが何なのかだけで、メソッド自体の機能や詳しいことは書いてません。

ドキュメント

Option, Intなどのコアタイプはscalaリンクに、List, Vectorなどは scala.collection.immutableのリンクにあります。

List#foldLeft

def foldLeft[B](z: B)(op: (B, A)  B): B
  • [B] : 型パラメータ
    • B型(StringやIntあるいはその他なにか、だがメソッド内では共通であること)
  • (z: B) : 第一引数
    • zというB型のを受け取る
  • (op: (B, A) ⇒ B) : 第二引数
    • opという 「タプルの(B型の値, A型の値)を受け取ってB型の値を返す」”関数”
  • メソッド(引数)(引数)という引数の渡し方はカリー化という手法
  • :B : 戻り値の型

使用例: Listの要素を全部足す

scala> List(1,2,3,4).foldLeft(0) { (z,x) => z + x }
res148: Int = 10

scala> List(1,2,3,4).foldLeft(0) { _ + _ }
res149: Int = 10

List#map

final def map[B](f: (A)  B): List[B]
  • [B] : 型パラメータ
    • B型(StringやIntあるいはその他なにか、だがメソッド内では共通であること)
  • (f: (A) => B) : 第一引数

  • : List[B] : 戻り値の型(List[B]型)

使用例: Listの各要素に10を足す

scala> List(1, 2, 3).map(_ + 10)
res170: List[Int] = List(11, 12, 13)

Option

sealed abstract class Option[+A] extends Product with Serializable
  • sealed : 同一ファイル内のクラス/トレイトしか継承出来ない
  • abstract: 具体的な実装をしない
  • Option[+A]: 変位指定(共変)での型パラメータ
    • Aか、そのサブタイプのみ指定可能
    • この型パラメータは主に戻り値に使う。引数型に使用出来ない(制約突破条件あり)
    • 共変についてはこちらや、こちらも理解を助けてくれます(感謝)
    • むずいとても

Option#getOrElse

final def getOrElse[B >: A](default:  B): B
  • final def : オーバーライド不可
  • [B >: A] : 型パラメータ(下限境界あり)
    • BはAのスーパータイプでなければならない。B = Aはok。
    • A、は Option(引数で渡される値の型)
    • 詳しくはこちら
  • (default: ⇒ B) : 第一引数。
    • => B は 名前渡し(call-by-name)という書き方
    • 関数でも普通の値でも渡せる。また、実際に使われるまで評価されない
    • 詳しくはこちら
  • : B : 戻り値の型

使用例:

// 値が取れればそれを
scala> Option("foo").getOrElse("bar")
res175: String = foo

// なければbarを
scala> None.getOrElse("bar")
res176: String = bar

いやー

むずいっす。

:beginner: なので間違ってたら :bow:

3
1
0

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
3
1