ScalaのHello World でも関数型プログラミング全然わかんない

Scalaの開発環境導入

新しい事をやりたい!ってことで関数型プログラミングというものをやってみようと思った。
とりあえず僕が最もよく使っている言語Javaに仕様が近いscalaを使ってみよう。

我々がJavaで開発する際には避けて通れないIDEであるEclipseにプラグインがあるそうなのでそれをインストールしよう。

http://scala-ide.org/

ここにあるらしい。

僕はEclipseのJunoを使っている。そしてScalaの最新版は2.10.0らしいので
http://download.scala-ide.org/sdk/e38/scala210/dev/site/
というリポジトリからプラグインをDLできそうだ。

Eclipseのヘルプ ⇒ 新規ソフトウェアのインストールに上記URLを追加して適当にインストールをする。

Javaで開発をするとき、EclipseであればマシンにJDKやSREを入れなくともEclipse自体にJDKなどが入っているためそのままで開発や実行ができる。
という事はおそらくScalaをapt-getなどでインストールしなくとも実行ができるであろう!

プラグインをインストールできたので、Scalaプロジェクトを新規作成をする。
ちゃんとプロジェクト内にはScalaライブラリにビルドパスが通っている。
個別にScalaをインストールせずともEclipse無いではちゃんと動くようだ。

さて、Java野郎だったらここでクラスを追加するだろうが、ScalaではObjectとやらを追加するそうだ。
ObjectはJavaとは意味が違って、メンバがすべてstaticなクラスのようなものらしい。

object Test {
 def main(args: Array[String]): Unit = {
   println("Hello world")
 }
}

とりあえずTestオブジェクトを追加して、Hello Worldを書いてみた。

関数型プログラミングとはなんだ?

Scalaの利点は以下のようなものらしい。
JVMで実行できるということで、Java使いにはとっつきやすい。
Javaのライブラリも流用可能。
そしてJavaでは行数が多くかかった処理でもかなり簡潔に書けるらしい。

そういう細かい例は沢山聞くが、そもそもScalaとはオブジェクト指向と関数型プログラミングのマルチパラダイム言語だそうだ。
まずは僕にとっては未知の領域である関数型プログラミングについてしらなければならない。

しかしWikipediaを見たけれど、全くわからない。
関数といえばC言語の関数やJavaのメソッドを思い浮かべるがそれとは全然違うらしい。
数学の関数の意味で使われているそうだ。
数学のことが全くわからないが、関数についてWikipediaで調べてみた。

…「関数という言葉はライプニッツによって導入された」
おおライプニッツね!哲学科を卒業した僕にとってはおなじみだ。
数学では微分積分での功績があるが、哲学ではモナドロジーなどが有名だ。

モナド?そういえば関数型プログラミングの文脈でもこの単語をみたことがある。

なるほど…どうやら関数型という考え方にはライプニッツが関係しているようだ。
そう、オブジェクト指向がプラトンのイデア論で説明されるようにね。

よし!さらにwikipediaにたよってモナド(プログラミング)を調べてみよう!!
…「モナドの名称は、圏論のモナド(モノイド+トライアド)に基づいており、ライプニッツのモナド(単子論)とは無関係である。」
なんと!関係ないのかよ!

とりあえず、現時点でわかったことは
手続き型言語とは全然違うらしい。
手続き型というのは一つ一つコンピュータに命令を出して、条件によって変数や戻り値を変えていくというスタイルだけれど
それとは全然違う。そういわれても全く想像がつかない。

関数型プログラミングでは変数は不変らしい。(追記:不変なら変数じゃなくて定数か)
Scalaでもvalで定義されたものは変えられないそうだ。

関数型プログラミングの関数では、同じ引数を与えたら必ず同じ戻り値になるそうだ。

僕はJavaやC# C++ JavaScript VB などをやってきたけれど、
これらの言語とは思想がどうやら全く違うようだ。
こりゃ習得までの道が長そうだな。

ScalaはJavaに似たスタイルで書くことは問題なくできる。
でもせっかくなのだから違う思想にも触れてみたい。

少しずつ関数型プログラミングの思想について学んでいこうとおもう。

スポンサードリンク

関連コンテンツ