「型から始めるプログラミング」の編集履歴(バックアップ)一覧はこちら
型から始めるプログラミング - (2013/12/15 (日) 22:44:17) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
型に導かれて
静的な強い型を持った関数型プログラミングにある程度馴染んでくると、次第に「コンパイルを通ったものは大抵動く」という不思議な感覚を持つようになります。この感じは手続き型プログラミングしかやったことがない人にはなかなか伝わらないもので、そんな話をしても大体「そんなわけあるわけないwww」というような反応を受け、こちらもうまく伝えられずモゾモゾすることになりがちです。
もちろん「コンパイル通ればできてる」というのが正しくない、というのは分かりきったことなのですが、「コンパイルを通った時点で動いたものに何の問題もなかった」という事象の確率がかなり高いのもまた統計的なデータこそないものの皆様肌で感じているのではないかと思います。
今回は課題として、CSVを読みこみいくつかのチェックと変換をして別のファイルに書きだすプログラムを書いてみましょう。
作ってみるプログラムの機能はこんなものです。
+ CSVから一行を読みこみ、カンマで区切って前後のダブルクォーテーションや空白を削除し、文字列の配列を作る
+ 配列の特定の項目について、
-空白ならば0とする
-特定の項目と足し合わせる
-
*型から始めるプログラミング
**型に導かれて
静的な強い型を持った関数型プログラミングにある程度馴染んでくると、次第に「コンパイルを通ったものは大抵動く」という不思議な感覚を持つようになります。この感じは手続き型プログラミングしかやったことがない人にはなかなか伝わらないもので、そんな話をしても大体「そんなわけあるわけないwww」というような反応を受け、こちらもうまく伝えられずモゾモゾすることになりがちです。
もちろん「コンパイル通ればできてる」というのが正しくない、というのは分かりきったことなのですが、「コンパイルを通った時点で動いたものに何の問題もなかった」という事象の確率がかなり高いのもまた統計的なデータこそないものの皆様肌で感じているのではないかと思います。
こういう「コンパイル通ったと思ったら動いた」というプログラムは、僕の経験では「大がかりな型」を想定することからスタートすることで持たされることが多い気がします。
今回は課題として、CSVを読みこみいくつかのチェックと変換をして別のファイルに書きだすプログラムを書きながら、「大がかりな型」からプログラムを作っていく過程を見ていただきましょう。
**作るもの
作ってみるプログラムの機能はこんなものです。
+ CSVから一行を読みこみ、カンマで区切って前後のダブルクォーテーションや空白を削除し、文字列の配列を作る
+ 配列の特定の項目について、
-空白ならば0とする
-特定の項目間で何らかの計算をする
-条件を満たしていない場合は例外を出す(本当はログを出した方がいいのですが、今回の主旨からはずれるので)
-結果として出来上がったデータをCSVとして保存する。
手続き型プログラミングでも普通に作れそうなものですが、ここはF#なりに、「大がかりな型」をベースにプログラミングをしていくことにします。
*