takafumi blog

日々の勉強メモ

Scala

scala: jmhでreifnedのパフォーマンスを(適当に)調べてみる

環境 Scala 2.13.8 ちょっと気になってrefinedのPositiveなどに比べて、requireで契約的に正数を縛る場合、どのくらいのパフォーマンス差があるか調べてみた。 コードはだいぶ適当だが以下 package bench import cats.implicits._ import eu.timepit.refined…

Scala3で弱適合性(= Week Conformance)の削除で問題が発生するコードについて

環境 Scala 2.13.8 Scala 3.1.1 scala3で削除される機能の一つに「弱適合性(= Week Conformance)」というのがある。 docs.scala-lang.org しかし説明を読み、コードを書いてみても実際に何が問題になるのかが最初よく分からなかった。 ここではscala2からsca…

Scalaでもtry-catchを使う方がよい事もある

環境 Scala 2.13.6 Scalaだと例外を常にTryで処理しがちなので、反省メモ。 もちろん単純に例外出す可能性ある個所をTryで包むのは問題ない。 困るのはTry[Either[L, R]] みたいなネストを避けたい時。 refinedとかでよくある。 例えば以下は単純にStringをE…

【Scala】giter8でプロジェクトのテンプレートを作る

環境 Scala 2.13.0 [1] giter8のテンプレートを用意 $ sbt new foundweekends/giter8.g8 [info] Loading settings for project global-plugins from metals.sbt ... [info] Loading global plugins from /home/takafumi/.sbt/1.0/plugins [info] Set current…

【Scala】【ScalikeJDBC】 Config設定方法

環境 Scala 2.11.8 ScalikeJDBC 2.5.0 基本的にはこの内容 Configuration - ScalikeJDBC scalikejdbc-conifg, application.confは設定方法によって必要 build.sbt libraryDependencies ++= Seq( "org.scalikejdbc" %% "scalikejdbc" % "2.5.0", "org.scalike…

【Scala】 sealedとパターンマッチ

環境 Scala 2.11.8 シールドクラス(トレイト)を継承したサブクラスは、すべて同一のソースファイルに定義される。 そしてシールドクラスをパターンマッチに使用されると、match式の網羅性をコンパイラがチェックできる。 sealedなし このときはcaseのパター…

【Scala】 sbt, activatorのproxy設定

環境 Scala 2.11.8 CentOS7.0 sbtやactivatorを実行してmoduleをダウンロードしてくるときに、proxyで引っかかる時の対策。 内部で実行されるjavaコマンドがproxyで引っかかってるので、起動スクリプトを編集する手もあるが、以下の環境変数を設定する事で解…

【Scala】 空Listの表記

環境 Scala 2.11.8 CentOS7.0 なんか忘れるのでメモ scala> val l1: List[Int] = Nil l1: List[Int] = List() scala> val l2 = Nil:List[Int] l2: List[Int] = List() scala> val l3 = List.empty[Int] l3: List[Int] = List() scala> val l4 = List[Int]() …

【Play Framework】 PlayFramework最新版をインストール

環境 Play Framework 2.4.6 CentOS7.0 インストール java,javacがなければ、インストールしておく。 $ # インストール $ cd /usr/local/src $ sudo wget https://downloads.typesafe.com/typesafe-activator/1.3.7/typesafe-activator-1.3.7-minimal.zip $ s…

【Scala】 変位パラメータの境界「下限境界」「上限境界」

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ ■ 下限境界、上限境界(第19章) 簡単にいうと、型パラメーターに制限をつける機能 ▽下限境界 型パラメータが、どのサブクラスまで許可されるかを示す ▽上限境界 型パラメータ…

【Scala】 変位アノテーション「非変」「共変」「反変」

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ ■ 変位アノテーション(第19章) 例えば class Foo(foo: AnyRef){} というクラスがあったとき、引数fooにはAnyRefとそのサブ型は全て受け入れられる。 scala> val f1 = new Fo…

【Scala】 正規表現のパターンマッチ

環境 Scala 2.11.6 CentOS7.0 パターンマッチに正規表現を使える。 グルーピングしている部分にマッチする。 scala> val r = """^(\d{4})-(\d{2})-(\d{2})$""".r r: scala.util.matching.Regex = ^(\d{4})-(\d{2})-(\d{2})$ scala> "2015-08-19" match { | c…

【Scala】 正規表現による文字列検索

環境 Scala 2.11.6 CentOS7.0 matches シンプル。ただし部分一致ではなく全体一致のみ。 scala> val target = "abcdefghijklmnopqrstuvwxyz" target: String = abcdefghijklmnopqrstuvwxyz scala> target matches """mno""" res1: Boolean = false scala> ta…

【Scala】 Applicationトレイト (Appトレイト)

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ ■ Application(App)トレイト(第4章) 通常Scalaアプリケーションはシングルトンオブジェクトのdef mainが実行される。 例 object Foo { def main(args: Array[string]):Unit …

【Scala】 アクセス修飾子と限定子

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ ■ アクセス修飾子と限定子(第14章) アクセス修飾子 修飾子 アクセス範囲 private 非公開メンバー。メンバーを含むクラス、オブジェクト内のみ。Javaと異なりインナークラス…

【Scala】REPLで複数行の貼り付け

環境 Scala 2.11.6 CentOS7.0 Scala REPLで複数行のコマンドを貼る。 :paste と打ってから、貼り付ければOK。 終了はCtrl + D。 今まで知らないでエライ苦労していた。 他にも:helpと打てば使えるコマンドがイロイロある。 scala> :help All commands can be…

【Scala】for式の括弧と、セミコロン推論

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第07章まで ■ for式の括弧と、セミコロン推論 P.134 「もしそうしたいなら、ジェネレータとフィルターは、括弧(...)ではなく中括弧{...}で囲んでもよい。中括弧で囲む…

正規表現の名前付きグループ

環境 CentOS 7.0 Perl 5.16 PHP 5.6 Java 1.8.0nbsp;scala 2.11.6 恥ずかしながら、正規表現のグループに名前を付けれる事を今まで知らなかった。 ・・・という事で幾つかの言語の書き方を調べてみた。 結果は全部 abc, 123, def abc, 123, def で上が、通常…

Scala マップ / Map

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ マップ / Map Scalaの集合は 順序が存在しない 重複を許可しない ミュータブルとイミュータブルが両方存在する 基本はイミュータブル である。 ▽初期化 …

Scala 集合 / Set

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ 集合 / Set Scalaの集合は 順序が存在しない 重複を許可しない ミュータブルとイミュータブルが両方存在する 基本はイミュータブル 異なる型を要素に追…

Scala タプル

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ タプル Scalaのタプルは インデックスは1から始まる 順序が存在する。 要素は型が異なるものを使える ※タプルとして型は決まる。例えば一度(Int, Int)と…

Scala リスト / List

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ リスト / List Scalaのリストは インデックスは0から始まる 常にイミュータブル。初期化時以外は要素を変更できない。 ※値の追加、や連結は常に新しいリ…

Scala 配列 / Array

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ 配列 / Array Scalaの配列は インデックスは0から始まる 配列要素の型は決まっている である。 ▽初期化 scala> val ar1 = new Array[String](5) ar1: Ar…

Scala mainメソッド定義とコンパイル

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ main定義とコンパイル mainメソッドの定義 アプリケーションのエントリーポイント、Javaでいうmainメソッドの定義。 // Something.scala import Anythin…

Scala シングルトンオブジェクト(singleton objects)

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ シングルトンオブジェクト(singleton objects) Scalaは、Javaと違いクラスが静的メンバーを持たない。 その代わりにシングルトンオブジェクトを定義する…

Scalaまとめ

Scalaを勉強したときの記事まとめ ■Scalaスケーラブルプログラミング(コップ本) 読了:第17章まで 関数定義 関数リテラル メソッドパラメータ1個のときの省略記法 Warningメモ シングルトンオブジェクト mainメソッド定義とコンパイル 配列/Array リスト/Lis…

Sacala Warningメモ

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ Warning 結果型がUnitのときに、最終行でUnit以外の型を返す式を評価している scala> def f() { "this String gets lost"} <console>:7: warning: a pure express</console>…

Scala メソッドパラメータ1個のときの省略記法

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第03章まで ■ メソッドパラメータ1個のときの省略記法 for(i <- 0 to 2) の「0 to 2」の部分は (0).to(2) の省略形。 Scalaではメソッドのパラメータが1つのとき、ド…

Scala 関数リテラル

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第03章まで ■ 関数リテラル args.foreach(arg: String) => println(arg)) arg:Stringの:Stringは型推論。 ちなみに引数1個なら args.foreach(println) でも同じ。 注…

Scala 関数定義

環境 Scala 2.11.6 CentOS7.0 「Scalaスケーラブルプログラミング」(コップ本)メモ 読了:第04章まで ■ 関数定義 def helloworld(s1: String, s2: String): String = { s1 + ", " + s2 } 上記はそれぞれ def 引数 hellowold 関数名 (s1: String, s2: String)…