Scala

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

More than 1 year has passed since last update.


はじめに

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


ドキュメント

https://www.scala-lang.org/api/2.12.5/index.html

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



List#foldLeft

https://www.scala-lang.org/api/2.12.5/scala/collection/immutable/List.html

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

https://www.scala-lang.org/api/2.12.5/scala/collection/immutable/List.html#fold[A1%3E:A](z:A1)(op:(A1,A1)=%3EA1):A1

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

http://www.scala-lang.org/api/2.12.4/scala/Option.html

sealed abstract class Option[+A] extends Product with Serializable



  • sealed : 同一ファイル内のクラス/トレイトしか継承出来ない


  • abstract: 具体的な実装をしない


  • Option[+A]: 変位指定(共変)での型パラメータ


    • Aか、そのサブタイプのみ指定可能

    • この型パラメータは主に戻り値に使う。引数型に使用出来ない(制約突破条件あり)

    • 共変についてはこちらや、こちらも理解を助けてくれます(感謝)

    • むずいとても




Option#getOrElse

https://www.scala-lang.org/api/2.12.5/scala/Option.html#getOrElse[B%3E:A](default:=%3EB):B

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: