今年も何か新しい言語に触ってみたいと思っていたところに、ちょうど入門コースのある勉強会があったので、参加してきました。
みんなで一斉に進めていきましょう形式ではなく、各自好きなことをやる集まりです。時間も夕方のLT以外は特に予定なく。
自分はF#の最初の一歩から始めたかったため、主催の七誌さんがビギナー向けとして用意してくださっていた資料を見ながら進めました。到着が17時、場所を閉めるのが20時、その間約3時間の参加でした。
環境のセットアップ (VS2012 ExpressでF# + Windowsフォームが遊べるまで)
無料のExpressでは、F#を使うまでに追加の作業が必要でした。F#を推進する気なら、最初から使えるようにしておけばいいのに…
環境としてはここまで。チュートリアルでは、C#の入門編でやっているようにWindowsフォームを表示させて遊びたいのですが、Visual F#のプロジェクトはライブラリとチュートリアルしか選択肢がありません。実用的には、ライブラリの利用のみが提示されている状態。
そこで、「F#のチュートリアルプロジェクトを作成し、元から書いてあるコードを抹消する」という方法により、F#でWindowsフォームの使えるプロジェクト構成を安直に入手することが出来る、と教わりました。
はじめての えふしゃーぷ
リバーシ(オセロ)のサンプルをいじって、ネット上の文法のリファレンスを見ながら、途中パワーユーザーの方のLTを挟んで、実質90分ほどかけて、なんとか自分で関数が書ける程度にまで進みました。(いきなりリファクタリングっぽいところから入る性分もどうかと思いますが…)
以下がそのコードです…と丸ごと貼るには少々長かったのでリンクのみ。
→
https://gist.github.com/moccos/4967078
- 自作の関数を書いた
- enumっぽいもの(?)を使った
- if式、match式を覚えた
- for構文を使った
- 配列を使い始めた (まだよくわかっていない気がする)
こんな状態です。石をひっくり返すロジックがないので、まだリバーシではなく石置きですね。
間違えたところ
- 関数の引数に型指定するとき、カッコをけちって失敗
- 関数呼び出すときに、引数足りなくて失敗
後者、C言語やJavaならば「そんな関数/メソッドないよ」というコンパイルエラーが出るところですが、F#は部分適用が効くので、違った形でエラーが現れます。boolを返す関数 myfunc x y を用いて if (myfunc 1) then ... と書くと、「boolじゃなくてint->boolがあるので型がおかしいよ」と言われるわけです。
ここでmyfuncの返り値を真っ先に疑ってしまいました。関数型言語そこそこに使っているのに、これは恥ずかしい…(゚Д゚)
雑感
わりと無難な感じでF#の第一歩を踏み出せたような気がします。F#でいきなり何か作るのは難しくても、C#のプロジェクトの一部にF#のライブラリを混ぜ込むような感じで、徐々に浸食していけるように頑張ります。
言語自体については…mutableな変数が簡単に定義でき、クラスの概念があるので、Scalaと似たような立ち位置になるのでしょうか。JVMに対する.NET、Javaに対するC#、Scalaに対するF#、と。
ML系の言語が初めてなので、不慣れな文法や演算子にびっくりしながら進めてました。Erlangのときも、文法にはなかなか馴染めなかったので、新しい流儀に入るときはこんなものでしょうかね。全く抵抗を感じさせなかったScalaのすごさを改めて感じました。