新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。もう新人じゃないかも…

関数型

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 19. Javaとの相互運用 ScalaとJava ScalaはJVM上で動作するため,JavaのライブラリのほとんどをそのままScalaから呼び出すことができる。 また,現状ではJavaの機能を利用せざるを…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 18. テスト ユニットテスト ここでは,ユニットテストを小さな単位で自動実行できるテストと定義して解説を行う。 ユニットテストを行う理由は大きく3つあげられる。 実装前に満た…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 17. Future/Promiseについて 非同期プログラミングにおいて,終了しているかどうかわからない処理結果を抽象化した型で,Futureは未来の結果を表し,Promiseは一度だけ,成功あるい…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 15. Implicit Scalaにはimplicit Conversion(暗黙の型変換)とimplicit parameter(暗黙のパラメータ)という機能がある。 この2つを使いこなすことで,Scalaでのプログラミングの…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 14. エラー処理 Scalaでのエラー処理は例外を使う方法と,Option/Either/Tryなどのデータ型を使う方法を状況に応じて使い分ける。 まずは扱う必要のあるエラーとエラー処理の性質に…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 13. ケースクラスとパターンマッチング パターンマッチングはCやJavaのswitch文に似ているが,より強力な機能である。 パターンマッチングの真価を発揮するには,ケースクラスによ…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 http://dwango.github.io/scala_text/index.htmldwango.github.io 12. Scalaのコレクションライブラリ Scalaには一度作成したら変更できないimmutableなコレクションと変更できる通常のmutableなコレクションがある。 Scalaで関数型プログラミング…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 dwango.github.io 11. 関数 Scalaの関数 Scalaの関数は,Function0〜22までのトレイトの無名サブクラスのインスタンスになる。 例えば,2つの整数を取って加算した値を返すadd関数は次のように定義される。 scala> val add = new Function2[Int, In…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 dwango.github.io 10. 型パラメータと変位指定 型パラメータ クラスは0個以上の型をパラメータとして取ることができる。 これは,クラスを作る時点では何の型か特定できない場合を表したいときに役立つ。 class クラス名[型パラメータ1, ... 型パラ…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 dwango.github.io 9. トレイト プログラムの分割(モジュール化)と組み立て(合成)は,オブジェクト指向プログラミングでも関数型プログラミングにおいても重要な設計の概念になる。 Scalaのオブジェクト指向プログラミングにおけるモジュール化…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 dwango.github.io 8. オブジェクト Scalaでは全ての値がオブジェクトであり,全てのメソッドは何らかのオブジェクトに所属している。 そのため,Javaのようにクラスに属するstaticフィールド/メソッドを作成することはできない。 その代わりといっ…

学習記録:ドワンゴ 新人向けScala研修テキスト

参考文献 dwango.github.io 7. クラス クラス定義 class クラス名 (コンストラクタ引数: コンストラクタ引数の型, ... ) { 0個以上のフィールド定義またはメソッド定義 } 例えば,点を表すクラスPointは以下のように定義できる。 class Point(_x: Int, _y: I…

学習記録:ドワンゴ 新人向けScala研修テキスト

あまりにサボっていたのでリハビリがてら。 参考文献 dwango.github.io 6. Scalaの制御構文 構文,式,文 構文:プログラムが構造を持つためのルール 式:プログラムの構成部分のうち,評価することで値になるもの 文:プログラムの構成部分のうち,評価して…

学習記録:ドワンゴ 新人向けScala研修テキスト

あまりにサボっていたのでリハビリがてら。 参考文献 dwango.github.io 4. sbtでプログラムをコンパイル・実行する 以下のディレクトリ構成でプログラムを作成する。 sandbox ├─ HelloWorld.scala └─ build.sbtHelloWorld.scalaは以下のとおり。 object Hell…

学習記録:Scala関数型デザイン 第8章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第8章:プロパティベースのテスト(続き) データ型と関数の選択 ジェネレータの意味とAPI Gen[A]がA型の値を生成する方法を知っている何かであることは既に確…

学習記録:Scala関数型デザイン 第8章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第8章:プロパティベースのテスト(続き) データ型と関数の選択 API:最初のコード テスト用のライブラリで使用するデータ型はどのようなものだろうか。 定義…

学習記録:Scala関数型デザイン 第8章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第8章:プロパティベースのテスト 本章では,プロパティベースのテストを可能にするためのシンプルながら強力なライブラリに取り組む。 こうしたライブラリの…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理(続き) コンビネータを最も汎用的な形式に改良する 関数型の設計は反復的な作業になる。APIを書き出し,プロトタイプを実装した…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理(続き) APIの代数 前節で示したように,必要な演算の型シグネチャを書き出し,型に従って実装を進めるだけでほとんどの場合上手…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理(続き) APIの改良 APIの設計と表現の選択の境界線はそれほど明白ではなく,2つの始点を流動的に切り替えながら, 疑問点が生じ…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理(続き) 表現の選択 ここまで考えてきた結果,APIの大まかなイメージは次のようになった。 // 直ちにa値が得られる計算を作成 de…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理(続き) データ型と関数の選択(続き) 並列計算の結合 unitとgetの組み合わせには落とし穴があることがわかったが,次にこれを…

学習記録:Scala関数型デザイン 第7章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第7章:純粋関数型の並列処理 CPUごとに複数のコアが搭載され,CPU自体が複数搭載されることも珍しくない現代のコンピュータでは, この並列処理能力を活用で…

学習記録:Scala関数型デザイン 第6章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第6章:純粋関数型の状態(続き) 状態アクションデータ型の一般化 前節で記述したunit, map, map2, flatMapなどはどの角度からも乱数ジェネレータに特化して…

学習記録:Scala関数型デザイン 第6章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第6章:純粋関数型の状態(続き) 状態の処理に適したAPI(続き) 状態アクションの結合 先ほど定義したmapは,殘念ながらintDoubleやdoubleIntを実装できるほ…

学習記録:Scala関数型デザイン 第6章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第6章:純粋関数型の状態(続き) 状態の処理に適したAPI ここまでの実装を振り返ると,どの関数でもRNG => (A, RNG)形式の型が使用されている。 この種の関数…

学習記録:Scala関数型デザイン 第6章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第6章:純粋関数型の状態 副作用を使った乱数の生成 本章では,乱数の生成を例に用いて,状態を操作する純粋関数型のプログラムを記述する方法について見てい…

学習記録:Scala関数型デザイン 第5章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第5章:正格と遅延 無限ストリームと余再帰 ここまで記述してきた関数は漸進的なので,無限ストリームにも対応します。 例えば,1の無限ストリームは以下のよ…

学習記録:Scala関数型デザイン 第5章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第5章:正格と遅延 プログラムの記述と評価の切り分け 関数型プログラミングの主なテーマの一つは関心の分離である。 処理の記述をそれらの実際の実行から切り…

学習記録:Scala関数型デザイン 第5章

参考文献 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド 第5章:正格と遅延 遅延リストの例 ここでは,例としてストリームでの一連の変換を,遅延を使って一回の処理にまとめる方法を示す。 trait Stream[+A] case ob…