SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

.NET開発者向け新関数型言語 「F#」入門

新関数型言語「F#」の概要とVisual Studioへのインストール

  • X ポスト
  • このエントリーをはてなブックマークに追加

(パラレル)データベースの例

 上記のリストから分かるように、.NET Framework v2.0以降のフレームワーク全体にF#からアクセスすることができます。今度は、SQL Serverデータベースのデータを読み取る単純なデータベースアプリケーションを作成することを考えてみましょう。既にお分かりでしょうが、通常、これを実現するにはADO.NETを使用するのが最適です。そこで、System.Data.SqlClient名前空間のconnectioncommandreaderなどのクラスを使うことになります。

 昔からあるおなじみのNorthwindデータベースからデータを読み取るコード例を次に示します。

let connStr = "Data Source=.;Initial Catalog=Northwind;\
               Integrated Security=True;"
let conn = new System.Data.SqlClient.SqlConnection(connStr)
let sql = "SELECT [employeeid], [firstname], [lastname]\
           FROM [employees]"
let cmd = new System.Data.SqlClient.SqlCommand(sql, conn)
conn.Open()
let reader = cmd.ExecuteReader()
reader.Read()
printfn "Name = %s %s" (reader.GetString(1)) (reader.GetString(2))
reader.Close()
cmd.Dispose()
conn.Dispose()

 この場合も、F#ではADO.NETを使って極めて直接的な方法でデータにアクセスできます。お分かりのように、C#コードをF#コードに変換するのは簡単です。作成する必要があるクラスとメソッドの呼び出しが変わらないためです。

 多少の計算を追加すると、いろいろと面白くなってきます。例えば、消費税込みの製品の価格を計算する必要があるものとします。データベースからデータを取得するには、例えば、LINQクエリを使って2つの値配列を取得できます。1つは価格の配列で、もう1つは対応する価格の税率の配列です。

let prices = [100.0; 200.0; 50.0]
let taxPercents = [5.0; 4.0; 7.0]

 この2つの配列を使用すると、正しい価格を計算するcalculateTaxという関数を簡単に定義できます。その後、この2つのリストに対してList.map2を実行します(map2は、パラメータを1つではなく2つ受け取る場合のメソッドです)。

let calculateTax price tax = price * (1.0 + (tax/100.0))
let results = List.map2 calculateTax prices taxPercents
printfn "results = %A" results

 上のコードを実行すると、resultsという新しい配列が返され、その値は[105.0; 208.0; 53.5]になります。もちろんこのコードで何も問題はないのですが、この計算を複数のスレッドで行い、最新のマルチコアプロセッサを活用したいならば、必ずしも十分ではありません。F#では、これを実に簡単に実現できます。

 F#は組み込みの並列処理をサポートしており、asyncキーワードが用意されています。税金を並列処理で計算する場合は、非同期コンテキストにList.map2メソッド呼び出しを埋め込みます。

let results =
   Async.Run (Async.Parallel [
   async { return List.map2 calculateTax prices taxPercents } ])

 必要なのはこれだけです。配列の要素が3つしかない場合は、スレッドのオーバーヘッドがあるため、並列処理で税金を計算すると実際にはかえって時間がかかってしまいます。しかし、製品の個数が300,000の場合は、違いが明らかになってきます。

次のページ
Visual StudioへのF#のインストール

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Jani Jarvinen(Jani Jarvinen)

フィンランドのソフトウェア開発トレーナー兼コンサルタント。Microsoft C# MVPの受賞者で、投稿も多数。ソフトウェア開発に関する著書も3冊出版している。ITpro.fiというフィンランドのソフトウェア開発エキスパートグループのグループリーダー。ブログのアドレスはhttp://www.saunalahti.fi/janij/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3381 2009/01/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング