28 Jun 2014, 11:55

[Coursera]Scala作者直伝の講座!Functional Programming Principles in Scalaを受けた

Courseraを利用して、Scalaの勉強をしました。

[//www.youtube.com/embed/tSCNZvv7ti4]

講座の感想

Scala言語作者の、Martion Odersky直々の講義であるところがまずスゴい。

Scalaを通じて、関数型の考え方を学ぶという内容。

  • Week One: Programming paradigms; overview of functional programming and the Scala programming language.
  • Week Two: Defining and using functions, recursion and non-termination, working with functions as values, reasoning by reduction.
  • Week Three: Defining and using immutable objects, review of inheritance and dynamic binding.
  • Week Four: Types and Pattern Matching
  • Week Five: Working with Lists
  • Week Six: Collections and Combinatorial Search
  • Week Seven: Lazy Evaluation

ついこの前に受けた以下の講座とかぶる部分もたくさんあった。

Lectureの内容も適度な量で、Assignmentの量もそれほど多くはない印象。 すごく時間がかかるというわけではなかった。 ただし、Assignmentの締切りに毎回間に合わなくてすべて遅れて提出・・・これが無念。

また、考え方がなれていないので、概念の理解はすこし時間がかかった。 いわゆるコップ本と呼ばれている以下の参考書を片手にガンバッタ。

Scalaの感想

講義の内容をそのまま引用してしまうが、 以下のような関数型の概念は、OOPの世界にいる自分にとってはとっても新鮮だった。

Functional programming provides a coherent set of notations and

  • methods based on higher-order functions,(高階関数)
  • case classes and pattern matching,(パターンマッチング)
  • immutable collections, absence of mutable state(イミュータブル)
  • flexible evaluation strategies:strict/lazy/by name(遅延評価)

A useful toolkit for every programmer. A different way of thinking about programs.

仕事ではRubyをつかっているが、 講座を受ける中でRubyが関数型言語の特性をたくさんもっていることに気がついたりした。

関数型の考え方を身につければ、Rubyも饒舌になれる。

関数型の考え方をはやく身につけて、 プログラミングの表現の幅をもっともっと広げたいと思った。

Scalaは美しい

<div class="outline-text-3" id="text-2-1">
  <p>
    Scalaに触れて一番驚いたのは、表現の簡潔さだ。
  </p>

  <p>
    Scalaではワンラインで表現できてしまう場面がたくさんある。 あまりに一行に詰め込みすぎるのも読みづらいので、 適度にインデントすると5行くらいになる。
  </p>

  <p>
    たった、5行である!一般的にScalaのコード量はJavaの半分になると言われているらしい!
  </p>

  <p>
    はじめにこれを聞いたときは、懐疑的だったけれども、今となっては納得である。
  </p>
</div>

これからどうするか

Scalaはとても気に入った。

講座が終わってしまったが、Scalaはこれからも折に触れて触っていきたい。 正直なところ、2ヶ月の講座だけではまだScalaを身につけたといえる自信がない。 力を伸ばすためにも、いろいろな場面でScalaを書いていこうと思う。

スクリプト言語としてのScala

<div class="outline-text-3" id="text-3-1">
  <p>
    Scalaはスクリプトとしても実行できる。 まずは、簡単なスクリプトを書くときにScalaを選択しようと思う。
  </p>

  <p>
    Scalaをスクリプトとして利用する最大の問題点は、起動にかかる時間だ。 ScalaはJVM上で動作するので、JVMの起動に時間がかかる。
  </p>

  <p>
    しかし、今はそれを我慢してでもScala力をみにつけたい。
  </p>
</div>

ほかの関数型言語も

<div class="outline-text-3" id="text-3-2">
  <p>
    自分が次に挑戦しようと考えてことは、Emacs Lispを身につけること。
  </p>

  <p>
    どういうわけか、最近とてもEmacsが気に入っている。 自分でもEmacs Lispがかけたらいいなと思う。
  </p>

  <p>
    Lispということで、同じ関数型でもScalaとは毛色がまた違うのだが、 それも新しい価値観に触れるということで、いいことだ。
  </p>
</div>