yoshikit1996’s diary

日々勉強したことの備忘録です。

2018-08-01から1ヶ月間の記事一覧

IdeaでSBTプロジェクトをシンタックスハイライトする

plugins.sbtに↓を付け加えて、gen-ideaコマンドを打てば完了。 addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")sbt gen-ideaGitHub - mpeltonen/sbt-idea: A simple-build-tool (sbt) plugin/processor for creating IntelliJ IDEA project fi…

Javaのstaticメソッドに相当するもの

Javaのstaticメソッドは、Scalaのコンパニオンオブジェクトのメソッドに相当すると思う。Javaでstaticメソッドを使う場合、こんな↓感じだが、 public class Main { public static void main(String[] args) throws Exception { for(int i = 0; i < 10; i++){…

case classの性質

case classには、下記のような性質があります。 ボイラープレートが減る apply, unapply, equals, canEqual, hashCode, toString, copyメソッドが自動生成される。 不変データを扱うのに適している コンストラクタのパラメータが勝手にvalになる。クラスを作…

カリー化と部分適用の関係

カリー化 カーリー化とは、 カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること(あるいはその関数のこと…

共変(covariant)と反変(contravariant)

Scalaのプログラムで[+A]とか[-A]というやつが出てきますが、これは変位指定アノテーションと言います。次のプログラムにおいて、BがAを継承しているときに右辺を左辺に代入することができます。これを共変と言います。 val myClass: MyClass[A] = new MyCla…

Scalaのメソッドの括弧()と副作用

括弧を付けずに関数定義して、呼び出しで括弧をつけるとエラーになります。 def f() = println("Hello") // 括弧をつける def g = println("World") // 括弧をつけない f() f // g() // error: Unit does not take parameters g 作法として、副作用がある関…

Scalaの文字列結合のパフォーマンス

はじめに Scalaで StringBuilderによる文字列結合 foldLeftと+演算子による文字列結合 を実装して、パフォーマンスを比較してみました。 実行環境はpaiza.ioです。この記事は、下記記事に影響を受けて、作りました。 qiita.com 実装・実行時間 StringBuilder…

関数の末尾の値とブロック式

関数の末尾の式 Scalaの関数では末尾で評価された式が返却値になります。 object Main extends App{ println(add(2, 8)) def add(x :Int, y :Int) :Int = { 1 + 2 + 3 "hoge" x + y } } 結果は、"hoge"と表示されます。 ブロック式 中括弧{}で構成された式を…

Scalaで遅延評価されているかどうか確かめる

Scalaでは中括弧を使って次のようなプログラムを記述することができます。 object Main extends App{ val x = println("hoge"); } 中括弧{}の中は即座に評価されるので、次のような標準出力が得られます。 hogelazyキーワードを付け足すと次のようになります…

はじめてのOption型とEither型(Scala)

Option型 Option型とは有効な値(Some)なのか無効な値(None)なのか呼び出し元に委ねるラッパーです。 object Main extends App{ println(divide(10, 0)) println(divide(10, 2)) def divide(x :Int, y :Int): Option[Double] = { if(y == 0) None else Some(x…