付録 Scala
なぜ付録を特定のプログラミング言語に割くのか?多くの言語でのプログラミングの経験とFPの経験を組み合わせることで、どの言語でも機能的概念を表現することは可能だが、機能的思考や表現により自然に適した言語があることを学んだ。
注
事実上どのような言語でも関数式の概念を表現することは可能だが、部分的あるいは完全に関数式をサポートするように設計された言語であれば、FPの本質を学び、理解することが容易になる。
このような理由から、私はいくつかの異なる言語での式を紹介することにし、様々なツールや機能を使って関数的概念をどのように表現するかを見てもらうことにした。しかし、関数型概念の美しさと有用性を十分に理解するためには、それらを念頭に置いて設計された言語で表現されたものを見る必要がある、というのが私の心からの信念である。
純粋に、多くの点で典型的な関数型言語であるHaskellを選ぶこともできたが、実用性を優先したほうがいいと思った。そこで私は、ハイブリッド言語であるScalaを選んだ。Scalaのプロデューサーのマーティン・オーデルスキーは、関数型コードとオブジェクト指向コードを同じように作成できる言語を求めていた。
注
Scalaはハイブリッド言語だ。オブジェクト指向と関数型の両方のパラダイムをサポートするように設計されている。
この本には他の言語の例もある。しかし、「最も関数的な」トピックのいくつかは、Scala式の例にこだわることになる。なぜなら、これらの概念を他の言語で表現するために必要なコードばかりでは、この本のメイン目標である、構文にとらわれすぎずに関数的な考え方を学ぶ方法から注意がそれてしまうからだ。また、このScala入門書を注意深く読み進めることで、おそらく最初は明らかではない別の利点が得られることも付け加えておきたい(これは意見として明確に示すべきだろう)。それは、関数的に考えることを始められるということだ。いわば、概念は言語に「組み込まれている」のだ。
チップ
もしこのScala入門書を読みたくない場合でも、この本を読めば実りあるものになるだろう。
前提条件
私はあなたのプログラミングの知識について、、いくつかの仮定をしている。プログラミングをしばらくやっていれば、一般化される概念については知っていると思う。OOPのクラスについて知っていると仮定する。また、関数とは何か、メソッドとは何かを知っていると仮定する。明確にしておくが、メソッドとは特定のクラスに関連づけられた関数のことである。それ以外は同じである。ほとんどすべてのプログラミング言語に例外があるからだ。最後に、for ループ、while ループ、case文など、通常のプログラミング構文には慣れていると仮定する。
概要
まずScala言語について説明しよう。Scalaは静的型付け言語で、関数型プログラミングとオブジェクト指向プログラミングの両方をサポートしている。純粋関数、高階関数、遅延評価、パターンマッチング、不変性、currying、そして非常に表現力豊かな型システムをサポートしている。これらの用語のいくつかを説明しよう:
- 静的に型付けされる
-
つまり、言語内の各データは、それがどのようなデータであるかを示す独自のデータ型を持っている。例えば、文字列、整数、カスタム型などである。
- 関数型プログラミング
-
純粋関数、不変性データ、カテゴリー理論の構造を使うプログラミングスタイル。
- オブジェクト指向プログラミング
-
、ドメインをオブジェクトの集合としてモデル化するプログラミングのスタイル。各オブジェクトは実行可能なメソッドor演算子のセットを持つ。 ...