Archive for the ‘F#’ Category

  1. Hello, Connector/NET(F#) World!

    Posted on 4月 5th, 2013 by cx20

    Connector/NET(F#)

    Connector/NET は、.NET ベースの MySQL 接続用 API である。
    以下は F# による Connector/NET ライブラリを使用した MySQL への接続例となっている。

    ソースコード(JScript.NET + Connector/NET + MySQL)

    open System;
    open MySql.Data.MySqlClient;
     
    let conStr = "server=localhost;user id=root;password=P@ssW0rd"
    let con = new MySqlConnection(conStr)
    let sqlStr = "SELECT 'Hello, Connector/NET World' AS Message"
    let cmd = new MySqlCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> fsc Hello.fs -r:MySql.Data.dll

    実行結果

    MESSAGE
    ---------------------
    Hello, Connector/NET World!
  2. Hello, ODP.NET(F#) World!

    Posted on 9月 9th, 2012 by cx20

    ODP.NET(F#)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(F# + ODP.NET + Oracle)

    open System;
    open Oracle.DataAccess.Client;
     
    let conStr = "Data Source=ORCL;User ID=scott;Password=tiger;"
    let con = new OracleConnection(conStr)
    let sqlStr = "SELECT 'Hello, ODP.NET World' AS Message FROM DUAL"
    let cmd = new OracleCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> fsc -r:Oracle.DataAccess.dll Hello.fs

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  3. Hello, ADO.NET(F#) World!

    Posted on 9月 8th, 2012 by cx20

    ADO.NET(F#)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(F# + ADO.NET + OLE DB + Jet データベース)

    open System;
    open System.Data.OleDb;
     
    let conStr = "Provider=Microsoft.Jet.OLEDB.4.0;
                  Data Source=.hello.mdb;"
    let con = new OleDbConnection(conStr)
    let sqlStr = "SELECT 'Hello, ADO.NET World' AS Message"
    let cmd = new OleDbCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    ソースコード(F# + ADO.NET + OLE DB + ACE データベース)

    open System;
    open System.Data.OleDb;
     
    let conStr = "Provider=Microsoft.ACE.OLEDB.12.0;
                  Data Source=.hello.accdb;"
    let con = new OleDbConnection(conStr)
    let sqlStr = "SELECT 'Hello, ADO.NET World' AS Message"
    let cmd = new OleDbCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    ソースコード(F# + ADO.NET + SQL Server)

    open System;
    open System.Data.SqlClient;
     
    let conStr = "SERVER=(local);
                   DATABASE=master;
                   UID=sa;PWD=P@ssW0rd;"
    let con = new SqlConnection(conStr)
    let sqlStr = "SELECT 'Hello, ADO.NET World' AS Message"
    let cmd = new SqlCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    ソースコード(F# + ADO.NET + Oracle)

    open System;
    open System.Data.OracleClient;
     
    let conStr = "Data Source=ORCL;User ID=scott;Password=tiger;"
    let con = new OracleConnection(conStr)
    let sqlStr = "SELECT 'Hello, ADO.NET World' AS Message FROM DUAL"
    let cmd = new OracleCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    ソースコード(F# + ADO.NET + ODBC + MySQL)

    open System;
    open System.Data.Odbc;
     
    let conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    let con = new OdbcConnection(conStr)
    let sqlStr = "SELECT 'Hello, ADO.NET World' AS Message"
    let cmd = new OdbcCommand(sqlStr, con)
    con.Open()
    let reader = cmd.ExecuteReader()
    while reader.Read() do
        printfn "%s" (reader.GetName(0))
        printfn "---------------------" 
        printfn "%s" (reader.GetString(0))
    reader.Close()
    con.Close()

    コンパイル方法(32bit OLE DB 使用時)

    C:¥> fsc Hello.fs --platform:x86

    コンパイル方法(上記以外)

    C:¥> fsc Hello.fs

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  4. Hello, Windows Forms(F#) World!

    Posted on 6月 3rd, 2012 by cx20

    Windows Forms(F#)

    Windows フォーム(Windows Forms)は .NET Framework におけるユーザーインターフェイス基盤である。Windows アプリケーションにおけるウィンドウやダイアログに対応する。
    以下は F# における Windows フォーム の例となっている。

    ソースコード

    open System
    open System.Drawing
    open System.Windows.Forms
     
    type HelloForm() as this =
        inherit Form()
     
        do
            this.Size <- new Size( 640, 480 )
            this.Text <- "Hello, World!"
            let label1 = new Label()
            label1.Size <- new Size( 320, 20 )
            label1.Text <- "Hello, Windows Forms(F#) World!"
            do this.Controls.Add(label1)
     
    let form = new HelloForm()
    do Application.Run(form)

    コンパイル方法

    C:¥> fsc --target:winexe Hello.fs

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Windows Forms(F#) World!           |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. Hello, COM(F#) World!

    Posted on 5月 19th, 2012 by cx20

    COM(F#)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は F# による COM クライアント(事前バインディングならびに実行時バインディング)の例となっている。

    ソースコード(事前バインディング)

    open System
    open System.Runtime.InteropServices
    open Shell32
     
    let shell = new Shell32.ShellClass() 
    let vRootFolder = Shell32.ShellSpecialFolderConstants.ssfWINDOWS
    let folder = shell.BrowseForFolder( 0, "Hello, COM(F#) World!", 0, vRootFolder )
    if folder <> null then Marshal.ReleaseComObject( folder ) |> ignore
    Marshal.ReleaseComObject( shell ) |> ignore

    コンパイル方法(事前バインディング)

    C:¥> SET PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin;%PATH%
    C:¥> tlbimp %SystemRoot%\system32\shell32.dll /out:Shell32.dll
    C:¥> fsc -r:Shell32.dll Hello.fs

    ソースコード(実行時バインディング)

    open System
    open System.Reflection
    open System.Runtime.InteropServices
     
    let objType = Type.GetTypeFromProgID("Shell.Application")
    let shell = Activator.CreateInstance(objType)
    let param = [| (0 :> Object); ("Hello, COM(F#) World!" :> Object); (0 :> Object); (36 :> Object) |]
    let folder = shell.GetType().InvokeMember("BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param )
    if folder <> null then Marshal.ReleaseComObject( folder ) |> ignore
    Marshal.ReleaseComObject( shell ) |> ignore

    コンパイル方法(実行時バインディング)

    C:¥> fsc Hello.fs

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(F#) Wolrd!                  |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  6. Hello, Win32 API(F#) World!

    Posted on 4月 25th, 2012 by cx20

    Win32 API(F#)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は F# にて DllImport 属性を用いた呼出し例である。

    ソースコード

    open System
    open System.Runtime.InteropServices
     
    [<DllImport("user32.dll")>]
    extern int MessageBox( UInt32 hWnd, String lpText, String lpCaption, UInt32 uType)
     
    let x = MessageBox( 0u, "Hello, Win32 API(F#) World!", "Hello, World!", 0u )

    コンパイル方法

    C:¥> fsc Hello.fs

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(F#) World!
    ---------------------------
    OK   
    ---------------------------
  7. Hello, F# World!

    Posted on 12月 15th, 2011 by cx20

    F#

    F# はマイクロソフトが開発した関数型プログラミング言語である。
    OCaml(Objective Caml)の構文が使える他、ライブラリに .NET Framework が使用できる。
    C# 同様に、UNIX 環境向けの .NET Framework 互換プロジェクト「Mono」により他の OS でも動作させることができる。

    ソースコード

    printfn "Hello, F# World!"

    ソースコード(.NET ライブラリを使用した場合)

    open System
    Console.WriteLine("Hello, F# World!")

    コンパイル&実行方法(Mono)

    $ fsc hello.fs
    $ mono hello.exe
    

    コンパイル&実行方法(.NET Framework)

    C:¥> fsc hello.fs
    C:¥> hello
    

    実行結果

    Hello, F# World!