Scala Tips / トレイトでクラス分割
Scalaプログラミングの便利さを日々体感しているわけですが、その重要な要素の一つがトレイト。トレイトは関数型言語のものではなく、オブジェクト指向プログラミングの技術ですが、そのあるなしはプログラミング・モデルに大きく影響します。Scalaにおけるクラス設計は、このトレイトの存在だけを意識するとしてもJavaのそれとは別ものということができます。トレイトには色々な用途がありますが、最近ボクが地味に多...
View ArticleScala Tips / トレイトと抽象クラス
クラスの多重継承の問題点は、クラスの継承関係が循環グラフになってしまった場合に、循環してかち合ってしまったクラスの扱いが非常に難しいということです。循環してかち合ってしまったクラスは一つにまとめたほうが良いのか、別管理にしておいた方が良いのか、用途によってどちらもあり得ます。これに付随して、初期化の順番やメソッド呼び出しの解決の順番など、プログラミングを複雑に解決が難しい難問があります。こういった問...
View ArticleゆるふわScalaプログラミング・振り返り(7)
11月30日に開催されたBPStudy#63で「Scalaプログラミング・マニアックス」について、「ゆるふわScalaプログラミング」 といった方向性で振り返りをしています。その7はトレイトです。Scalaプログラミング・マニアックス from Tomoharu...
View Articleメッセージ・フロー図
システム・アーキテクチャなどを記述するモデル図を作成する際に困るのが、データ・フローとコントロール・フローの使い分けです。同期処理のみで構成される処理の場合は、データ・フローとコントロール・フローが一致するケースが多くなります。この場合、データ・フローまたはコントロール・フローのどちらか一方を書いておけば十分です。しかしクラウド・アプリケーションのようにいたるところで非同期処理やバックグラウンド処理...
View ArticleScala 2.10
つい先日Scala 2.11がリリースされたばかりですが、タイトルの「Scala 2.10」は間違いではありません。一昨年の後半からとあるシステム開発に注力していたため時間が取れずブログ更新を中断していましたが、ようやく一段落してきたので、自分向けに技術情報の棚卸しをしていくという意味でもぼちぼち書いていきたいと思います。最近うれしかったことの一つはようやく製品開発にScala...
View ArticleかんたんScalaz/Boolean編
Scalaz 7を本格的に使い始めたので、Scalaz 7を包含したコーディング・イディオムの棚卸しをしています。Scala 2.10の基本機能とScalaz...
View ArticleかんたんScalaz/Booean論理記号
ScalazではBooleanに以下の論理演算子を追加しています。演算子意味別名Scala∧Conjunction, AND/\&&∨Disjunction, OR\/||!||Negation of Disjunction, NOR!&&Negation of Conjunction, NANDーー>Conditional<ーーInverse Conditional⇏Negational of...
View ArticleかんたんScalaz/Option編
かんたんScalazのOption編です。Scalaプログラミングでは、Optionはキーとなる重要なオブジェクトで、Optionの取り回し方の優劣がプログラミングの精度・効率に大きく作用します。ScalazでもOption向けに多くの機能を用意しています。「かんたんScalaz」ということでScalazが提供しているMonadやMonoidといった難しい概念を抜きにして便利に使えるOptionの機...
View ArticleかんたんScalaz/Option編 SomeとNone
Optionを使う場合にSomeやNoneを作成する処理は当然ながら頻出です。scala> val a = Some(5)val a = Some(5)a: Some[Int] = Some(5)scala> val b = Noneval b = Noneb: None.type =...
View Article実用Scalaz/Option + Monoid
OptionはScalaプログラミングのキーパーツであり、Optionの捌き方の巧拙がScalaプログラミングの効率に直結します。これと同様にMonoidはScalazプログラミングのキーパーツということができるかと思います。Monoidの捌き方の巧拙がScalazプログラミング、さらにはMonadicプログラミングの効率に直結することになるでしょう。そして、ScalazのおいてOptionは代表的...
View ArticleScala Tips/ライブラリ選択(2014年6月バージョン)
どのようなプログラミング言語を使っても、本格的な応用では基本ライブラリだけでニーズが満たせるということはなく、用途に応じて外部ライブラリを併用することになります。Scalaプログラミングをする上で、ボク的に常に使用するライブラリというのがだいたい固まって来たのでまとめてみました。scalaz以下の理由で手放せないライブラリになっています。「かんたんScalaz」としてご紹介している各種の便利機能型ク...
View Article実務者のためのかんたんScalaz
一昨年からEverforthに参画してScalaを使ってとあるシステム開発を行いつつ、クラウドアプリケーションの開発技法について整備してきましたが、ある程度方向性が見えてきたので、札幌の開発部隊に情報展開するための勉強会を企画しました。クラウドアプリケーションの開発は、ちょうど業務アプリケーション開発にオブジェクト指向技術が導入された時と同じようなパラダイムシフトが起きることになると予想されます。新...
View Article関数型プログラミング技術マップ2014
来週の月曜(7月7日)に札幌で「実務者のためのかんたんScalaz」という勉強会を予定しています。この勉強会は、クラウドアプリケーション開発の基本技術の情報展開を目的としたもので、以下の勉強会をシリーズで行っていく予定です。実務者のためのかんたんScalaプログラミング実務者のためのかんたんScala入出力プログラミング実務者のためのかんたんScala設計実務者のためのかんたんオブジェクト指向分析/...
View ArticleOperationalモナド
おぼろげな記憶ではFreeモナドが話題になったのが一昨々年、Operationalモナドは一昨年だったと思うので、いまさらの感もありますが、ScalazでOperationalモナドが簡単に使えることが判明したのでメモしておきます。Freeモナドは、FunctorをMonad化することができるモナドですが、以下の性質を持ったインタープリターのDSLを簡単に作れることで知られています。トランポリン化に...
View ArticleOperationalモナドの合成
ScalazでOperationalモナドが簡単に使えることが分かったので、次の段階としてxuweiさんの書かれた「CoproductとInjectを使ったFree Monadの合成とExtensible...
View ArticleScalaz 7.1の非互換項目
プロダクトで使っているScalazをscalaz 7.0.6からScalaz 7.1に上げたわけですが(Operational Monad)、その際に判明したScalaz...
View Article