2014年5月27日火曜日

Functional Programming Principles in Scala (Week 4: Types and Pattern Matching)

==== Lectures ====
Lecture 4.1 - Functions as Objects
関数リテラルもbuilt-in機能ではなくて、trait Function1等を実装したanonymous classのapply methodのabbreviation。
引数の数に合わせてFunction22まで存在する。
?? tupleも22個までだった様な気がするが、22に何か特別な意味がある??
def f は function value ではない。
eta expression

Lecture 4.2 - Objects Everywhere
pure object oriented language
全てがobject
booleanや整数も通常のclassで定義出来るところが新鮮だった。
宣言的なプログラミング。
そのtypeに関する制約を満たすものが求めたいtypeになる。
漸化式的、再帰的に定義すれば無限集合も扱える。

Lecture 4.3 - Subtyping and Generics
T >: L <: Uで TはLのsuperでUのsub typeに制限出来る。

Lecture 4.4 - Variance (Optional)
Liskov Substitution Principle - 代わりに使えるかどうかがポイント。
NilはList[Nothing]のobject。全てのList[]に代入出来るが、引数では型を指定しないと使えない。

Lecture 4.5 - Decomposition
通常のOOの機能では、parserを作るのはかなり煩雑。
isInstanceの様なdowncast的な操作を使わないと簡単にならない。

Lecture 4.6 - Pattern Matching
pattern matchingはfunctional program languageでは一般的。
constructor pattern が recursive に使えると言うのはとても強力。
実装としてはunapply() methodが呼ばれる。

Lecture 4.7 - Lists
Listはrecursive、Arrayはflat。
(a :: (b :: (c :: Nil)))のstructure
complexity(計算量)はsubstitution(置き換え)の回数で決まる。

==== Assignments ====
[Huffman Coding]
今回は一回目で満点の20/20獲得できた。
sbtのstyleCheckで"Cyclomatic complexity exceeds 10"がでて99/100になった。
複雑なpattern matchをやめて簡素化したら回避できた。

==== Etc. ====
今週はLectureの分量が多い。約2時間分ある。
何故か4.2と4.3の順番が逆に登録されていたが?

==== Log ====
2014/5/20 Assignments 01:00
2014/5/21 Assignments 03:30
2014/5/21 Assignments 02:00
2014/5/26 Lecture 01:00
2014/5/26 Lecture 01:00

0 件のコメント:

コメントを投稿