scala

Scalaz の Tree で違いがあるかを判定する

※Treeのflattenの結果が同じ値ならば常に同じであることを前提としていて、実際そうなのかをちゃんと確認してないので少し怪しいところあり。 ここ1年くらい木構造に悩まされていますが、scalaz の Tree を使っていて、2つの木に違いが存在するかを判定した…

Scalaでの例外処理メモ

例外についてものすごく参考になった記事と、個人的メモ。 参考になった記事 明日から使える実践エラーハンドリング Scala界隈では有名ながくぞさんのSlideですね。私はこれを読んで初めて例外が何か理解できた気がしました。 他にもスライドはあります。 ht…

【Scala】Option 利用指針

Scalaでよく使うものに Option 型があると思います。Option 型は値が存在するかもしれないことを示す型です。Javaで値がないを表現するためには null を使うのが一般的でした。Java 8からは Optional 型 ができたようですが、古いJavaのプロダクトでは null …

Scala で Builder Pattern

ScalaでJava like なBuilder Patternを書く機会は自分の場合あまり無い(Static Factoryで事足りることが多い)のですが、少し古いJavaのプロダクトのリファクタをした際にBuilder Patternで生成処理を書き直したので、Scalaの場合はどうなるのか見ていこう…

Haskell 勉強メモ9

セクション 中置関数に対して、セクションという機能を使って部分適用をすることができる。 divideByTen :: (Floating a) => a -> a divideByTen = (/10) *Main> divideByTen 30 3.0 これは 30 / 10 と同義。 高階関数 関数を受け取り、2回適用する関数を書…

木勉強メモ

木構造の取扱はプログラマなら基本なのかもだけれど、アルゴリズムとデータ構造をちゃんと勉強したことなかったので、必要ベースで勉強していく。 用語 用語説明根(root)親を持たないノード。1つの木に対して1つ根。辺(edge)親から子へのリンク。葉(leaf)子…

Haskell 勉強メモ8

高階関数 Haskell は関数を引数にとったり、返り値として関数を返すことができる。このような関数を高階関数と呼ぶ。Scalaにもある。 カリー化関数 Haskellの全ての関数は、引数を1つだけ取る。今まで、複数引数を取っているように見えたものは全てカリー化…

Apache POI 調査

Excelを操作したいみたいな状況は割とよくある。Pythonとかのスクリプト言語だと結構対処法をが見つかるけど、Scalaだと、Java資産のApache POIくらいしかない上に情報もそんなにない(poi.scala のようなラッパーライブラリもあるようだけど、プロダクショ…

Haskell 勉強メモ6

再帰 関数型言語では再帰はよく出てくる。 最大値を求める関数を考えてみる。命令的に考えると、現在の最大値を保持する変数を用意し、リストの全ての要素についてループして、変数を更新していく形になる。Scalaで書いてみると def maximum(list: List[Int]…

Haskell 勉強メモ5

let式 let 式は変数を束縛する。 let 式自身も式。式であるとは、「値を持つ」ということ。 円柱の表面積を求める。 cylinder :: Double -> Double -> Double cylinder r h = let sideArea = 2 * pi * r * h topArea = pi * r ^ 2 in sideArea + 2 * topArea…

Haskell 勉強メモ2

明示的な型宣言 Haskellの型宣言は2行で書く模様。こういう書き方は初めて。 removeNonUppercase :: [Char] -> [Char] removeNonUppercase st = [c | c <- st, c `elem` ['A' .. 'Z']] *Main> removeNonUppercase("HelloWorld") "HW" addThree :: Int -> Int…

Haskell 勉強メモ 1

関数型プログラミングをちゃんとやろうと思って「すごいHaskellたのしく学ぼう!」を買って読み始めた。その勉強メモ。自分のメイン言語はScalaなので、気になったところを比較しながら見ていく。 内包表記 Haskellのリスト内包表記。集合の内包的記法の概念…

階層構造のデータから特定のプロパティを抽出して、フラットにする

json のような階層構造を持つデータから特定のプロパティを再帰的に探索して、平坦なリストにしたものを取得したい場面に出会ったのでメモする。 データ構造 case class Tree( value: Int, children: List[Tree] ) 木構造?というか、自身のリストを持つよう…

Slick の java.time 対応

普段 PlayFramework + Scala で開発していて、ORMには Slick を使うことが多い。Slickは version 3.3 から java.time をサポートするようになったのだが、MySQL の型との対応がひどく(ほとんどTEXTにマッピングされて使い物にならない)、DBにMySQLを使う場…

Scala で FizzBuzz

今更だけど、FizzBuzzやってみる。 「1から100までの数字を画面に表示する」「3の倍数のときは数字の代わりにFizzと表示する」「5の倍数のときは数字の代わりにBuzzと表示する」「15の倍数のときは数字の代わりにFizzBuzzと表示する」プログラム フィズバズ…

implicit class を利用して Seq (とか)にメソッドを生やす

case class の Seq に対するメソッドを生やしたい時どうするか。例えば、下記のような case class があるとする。 case class Range( min: Int, max: Int ) これの Seq つまり、Seq[Range] に対して、含まれるRangeの中から、最小の min と 最大の max を取…

catsのEitherTを使ってみる

普段Scalaを使っていると、Futureがたくさん出てくる。Futureは並行処理を簡単にしてくれる型だが、Eitherなどを使って例外をハンドリングしようと思うと結構面倒がある。普段PlayFrameworkを使っていると、DBとやりとりする層でFutureを生成したら、そのま…