Aracılığıyla paylaş


İzlenecek Yol: Uygulama Oluşturma, Hata Ayıklama ve Dağıtma için Visual F# Kullanma

Bu izlenecek yollar size F#'ı Visual Studio 2010 ile .NET Framework 4 kullanma deneyimini tanıtır.

Bu örnekte, başlangıç olarak geçmiş ABD hazine faiz oranı çözümleme veri örneği ile Visual Studio 2010 kullanarak F# uygulaması yazmayı öğreneceksiniz. F# etkileşimli pencereyi kullanarak bazı hızlı veri çözümlemesine başlayacaksınız sonra verileri çözümlemek için kod yazın ve test edin ve daha sonra diğer .NET dilleriyle F# kod tümleştirmeyi keşfetmek için C# ön uç ekleyin.

Önkoşullar

Bu anlatımı tamamlamak için aşağıdaki bileşenlere ihtiyacınız vardır:

  • Visual Studio 2010

Not

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler. Daha fazla bilgi için bkz: Visual Studio Ayarlar.

F# komut dosyası oluşturmak için

  1. Önce bir F# komut dosyası oluşturun. Dosya menüsünde Yeni'nin üzerine gelin, ardından Dosya seçeneğini tıklatın. Yeni Dosya iletişim kutusunda, Yüklü Şablonlar listesinden Komut Dosyası ve sonra F# Komut Dosyası'nı seçin. Dosyayı oluşturmak için 'ı tıklayın ve dosyayı RateAnalysis.fsx olarak kaydedin.

  2. .NET ve F# API'lerini ABD Federal Merkez internet sitesinden verilere erişmek için kullanın. Aşağıdaki kodu yazın.

    open System.Net
    open System.IO
    
    let url = sprintf "http://www.federalreserve.gov/releases/h15/data/business_day/H15_TCMNOM_Y10.txt"
    let req = WebRequest.Create(url, Timeout = 10000000)
    let resp = req.GetResponse()
    let stream = resp.GetResponseStream()
    let reader = new StreamReader(stream)
    let csv = reader.ReadToEnd()
    

    Aşağıdakilere dikkat edin:

    • Dizeler ve anahtar sözcükler renklendirilmiştir.

    • Tamamlama listeleri her noktayı (.) yazdıktan sonra ortaya çıkar.

    • Klavye kısayolu CTRL+SPACE veya tanımlayıcı ortasında CTRL+J kullanarak Visual Studio'ya yöntem adları ve diğer tanımlayıcıları tamamlatabilirsiniz. CTRL+J kullandığınızda tamamlanma listesi görüntülenir.

    • Fare işaretçisini herhangi bir tanımlayıcı kodu üzerinde tuttuğunuzda, o tanımlayıcı hakkında bilgi içeren araç ipucu görürsünüz.

    • İmleç WebRequest içindeyken F1 tuşuna basarsanız beklenen belgeler gözükür.

    • İmleç let içindeyken F1 tuşuna basarsanız beklenen belgeler gözükür.

    • Varsayılan olarak, mscorlib.dll, System.dll ve System.Windows.Forms.dll tür ve isim uzaylarına başvurulur.

    • Burada ayarlanan Timeout değeri oluşturucu bağımsız değişkeni değil bir özelliktir. F# bu anlamda özellik değerlerini ayarlamanıza olanak sağlar.

    • Örnekte URL'i bir tarayıcıya kopyalarsanız, virgülle ayrılmış tarih ve ABD Federal Merkez tarafından yayımlanan faiz oranlarını içeren değerler listesini görürsünüz.

  3. Şimdi F# Etkileşimi kullanarak kodu çalıştırın. Tüm kodu (fare kullanarak veya CTRL+A tuşlarına basarak) seçin ve sağ tıklayın daha sonra Etkileşime Gönder'i tıklayın. (Alternatif olarak, ALT+ENTER tuşlarına basın.)

    • Hala görünür olmadıysa, F# Etkileşim penceresi ortaya çıkar.

    • Kod başarıyla çalıştırılır.

    • Aşağıdakiler F# Etkileşim penceresinde görünür.

      val url : string =
        "http://www.federalreserve.gov/releases/h15/data/business_day/"+[18 chars]
      val req : System.Net.WebRequest
      val resp : System.Net.WebResponse
      val stream : System.IO.Stream
      val reader : System.IO.StreamReader
      val csv : string =
        "  ,Instrument,"U.S. government securities/Treasury constant m"+[224452 chars]
      
      >
      
  4. Ardından, F# Etkileşimi kullanarak verileri inceleyin. F# Etkileşim istemine cvs;; yazın ve sonra ENTER tuşuna basın. csv.Length;; yazın ve ENTER tuşuna basın. Aşağıdakilere dikkat edin:

    • Mevcut veri.

    • F# Etkileşim burda gösterildiği gibi csv dizesinin değerini ve uzunluğunu görüntüler.

      07/10/2009, 3.32
      07/13/2009, 3.38
      07/14/2009, 3.50
      07/15/2009, 3.63
      "
      > csv.Length;;
      val it : int = 224513
      
    • Aşağıdaki internet erişimi F# Etkileşim penceresini gösterir.

      F# Etkileşim Penceresi

      F# Etkileşimli Penceresi

  5. Şimdi, CSV (Virgül ile ayrılmış değerler) verilerini ayrıştırmak için F# kodu yazacaksınız. Bir CSV dosyası virgülle ayrılmış değerler içerdiği için bu şekilde adlandırılır. Kod Düzenleyicisi'ne aşağıdaki kodu ekleyin. Her satırı ekledikçe, kısmi sonuçları görmek için bu bölüme eklenen kodu seçin ve ALT+ENTER tuşlarına basın. Aşağıdakilere dikkat edin:

    • IntelliSense iç içe karmaşık ifadelerin ortasında bile nokta yazdıktan sonra yararlı bilgiler sağlar.

    • Kod tamamlanmamış (veya yanlış) olduğunda, kırmızı dalgalı alt çizgiler kod içinde sözdizimsel ve anlamsal hataların olduğunu belirtir.

    • Dikey çizgi işleci (|>) kullanarak ardışık düzen oluşturun. Dikey çizgi işleci bir ifadeden dönen değeri alır ve sonraki satırdaki işlev için bağımsız değişken olarak kullanır. Ardışık düzen ve F# Etkileşim bilgi işlem kodunun kolayca kısmi olarak çalıştırılmasına izin verir.

    let interest = 
        csv.Split([|'\n'|])
        |> Seq.skip 8
        |> Seq.map (fun line -> line.Trim())
        |> Seq.filter (fun line -> not (line.EndsWith("ND")))
        |> Seq.filter (fun line -> not (line.Length = 0))
        |> Seq.map (fun line -> line.Split([|','|]))
        |> Seq.map ( fun values ->
            System.DateTime.Parse(values.[0]),
            float values.[1])
    
  6. Şimdi bu işlevselliğe bir ad verin. Değişmez değer dizesini biçim dizesi yapmak için url tanımından 10'u kaldırın ve %d ile değiştirin. Biçim dizesinden sonra maturity ekleyin. Bu yeni satır dışında tüm kodu seçin ve SEKME tuşuna basın. Girintili blok kodun üstüne let loadRates maturity = ekleyin. Girintili bloğunun sonuna interest ekleyin. Aşağıdakilere dikkat edin:

    Kod şimdi aşağıdakine benzer.

    open System.Net
    open System.IO
    
    let loadRates maturity = 
        let url = sprintf "http://www.federalreserve.gov/releases/h15/data/business_day/H15_TCMNOM_Y%d.txt" maturity
        let req = WebRequest.Create(url, Timeout = 10000000)
        let resp = req.GetResponse()
        let stream = resp.GetResponseStream()
        let reader = new StreamReader(stream)
        let csv = reader.ReadToEnd()
    
        let interest = 
            csv.Split([|'\n'|])
            |> Seq.skip 8
            |> Seq.map (fun line -> line.Trim())
            |> Seq.filter (fun line -> not (line.EndsWith("ND")))
            |> Seq.filter (fun line -> not (line.Length = 0))
            |> Seq.map (fun line -> line.Split([|','|]))
            |> Seq.map ( fun values ->
                System.DateTime.Parse(values.[0]),
                float values.[1])
        interest
    
  7. Şimdi yeni girişler üzerinde bu işlevselliği kullanın. Tüm kodu seçin ve F# Etkileşimi kullanarak çalıştırmak için ALT+ENTER tuşlarına basın. F# Etkileşim isteminde diğer vade oranları üzerinde yeni loadRates işlevini çağırın: Yıl cinsinde 1, 2 ve 5. Aşağıdakilere dikkat edin:

    • Önceki tanımlar F# Etkileşim içinde kaybolmaz ancak yeni tanımlar kullanılabilir.

    • Karmaşık yapılandırılmış veriler özel yazdırma işlevselliği tarafından işlenir.

F# kullanarak bileşen geliştirmek için

  • Oluşturduğunuz işlevselliği göstermek için bir kitaplık projesi oluşturun. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'yi tıklayın. Yeni Proje iletişim kutusunda, Yüklü şablonlar listesinden Visual F#'ı ve sonra yeni bir kitaplık projesi oluşturmak için F# Kitaplığı'nı seçin. Projeye RateAnalysis adını verin. RateAnalysis.fsx'te daha önce oluşturduğunuz kodu kopyalayın ve Module1.fs'e yapıştırın. Module1.fs'teki modül tanımını Module1'dan RateLoader'a değiştirin. Çözüm Gezgini'nde Module1.fs'ı RateLoader.fs olarak yeniden adlandırın. Aşağıdakilere dikkat edin:

    • Varsayılan F# Kitaplık şablonu uzantısı .fs olan bir kod dosyası ile uzantısı .fsx olan bir komut dosyası sağlar. Kitaplık kodunuzu etkileşimli olarak test etmek için komut dosyasını kullanabilirsiniz.

Aşağıdaki internet erişimi F#'da kullanılabilir birçok seçeneği Yeni Proje iletişim kutusunda gösterir. F# Kitaplık proje şablonu seçilir.

F# şablon seçenekleri

F# Kitaplığı seçili olan Yeni Proje İletişim Kutusu

  1. Şimdi istenen işlevselliği sunan bir F# sınıfı oluşturun. Çözüm Gezgini'nde projeye sağ tıklayın, Ekle üzerine gelin ve Yeni Öğe'yi tıklayın. Yeni Öğe Ekle iletişim kutusunda F# Kaynak Dosya'sını seçin. Dosyayı Analyzer.fs olarak adlandırın. Çözüm Gezgini'nde Script.fsx'e sağ tıklayın ve sonra Move Down'u tıklayın. (Alternatif olarak, ALT+AŞAĞI OK tuşuna basın.) Aşağıdaki kodu Analyzer.fs'e yapıştırın.

    module RateAnalysis.Analyzer
    
    open RateLoader
    
    /// Provides analysis of historical interest rate data.
    type Analyzer(ratesAndDates) = 
        let rates = 
            ratesAndDates
            |> Seq.map snd
    
        /// Construct Analyzer objects for each maturity category.
        static member GetAnalyzers(maturities) = 
            maturities
            |> Seq.map loadRates
            |> Seq.map (fun ratesAndDates -> new Analyzer(ratesAndDates))
    
        member sa.Min =
            let date, minRate = (Seq.minBy (fun (_, rate) -> rate) ratesAndDates)
            (minRate, date.ToString("d"))
    
        member sa.Max = 
            let date, maxRate = (Seq.maxBy (fun (_, rate) -> rate) ratesAndDates)
            (maxRate, date.ToString("d"))
    
        member sa.Current =
            rates |> List.ofSeq |> List.rev |> List.head 
    

    Aşağıdakilere dikkat edin:

    • F# nesne yönelimli programlama kavramlarını destekler. F# Dili Başvuru Kaynaklarında diğer ilgili konular hakkında daha fazla bilgi için bkz. Sınıflar (F #), Kalıtım (F #).
  2. Şimdi XML belge açıklaması oluşturun. Çözüm Gezgini'nde projeye sağ tıklayın ve sonra Özellikler'i tıklayın. Yapı sekmesinde, sayfanın altındaki XML Belge Dosyası onay kutusunu seçin. Aşağıdakilere dikkat edin:

    • XML belgelerini herhangi bir F# derleyicisi için oluşturabilirsiniz.

    • Varsayılan olarak, XML belgeleri çıktı yolunda oluşturulur.

  3. Projeyi oluşturmak için CTRL+SHIFT+B veya F6 tuşuna basın. Aşağıdakilere dikkat edin:

    • Proje başarıyla oluşturulur.

    • Hata listesi penceresinde hiçbir hata gözükmez.

    • Çıktı dizini .dll, .pdb ve .xml dosyalarını içerir.

    • Çıkış penceresi aşağıdakileri görüntüler:

      ------ Build started: Project: RateAnalysis, Configuration: Debug Any CPU ------
          C:\Program Files (x86)\Microsoft F#\v4.0\fsc.exe -o:obj\Debug\RateAnalysis.exe -g --debug:full --noframework --define:DEBUG --define:TRACE --optimize- --tailcalls- -r:"C:\Program Files (x86)\Microsoft F#\v4.0\FSharp.Core.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" --target:exe --warn:3 --warnaserror:76 --vserrors --utf8output --fullpaths --flaterrors Program.fs RateLoader.fs ValueAnalyzer.fs 
          RateAnalysis -> C:\Users\ghogen\Documents\Visual Studio 10\Projects\RateAnalysis\RateAnalysis\bin\Debug\RateAnalysis.exe
      ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
      
  4. C# istemci uygulaması eklemek için çözüm düğümüne sağ tıklayın, Ekle üzerine gelin ve Yeni Proje'yi tıklayın. Yeni Proje Ekle iletişim kutusunda Yüklü Şablonlar listesinden Visual C#'ı ve sonra Konsolu Uygulaması'nı seçin. Diğer Diller düğümünü genişletmeniz gerekebilir. CSharpDriver projesini adlandırın. Bu projenin Başvuru Kaynakları'na sağ tıklayın ve sonra Başvuru Ekle'yi tıklayın. Add Reference iletişim kutusunun Projeler sekmesinde RateAnalysis'i seçin ve Tamam'ı tıklayın. CSharpDriver proje düğümüne sağ tıklayın ve Başlangıç Projesi Yap'ı tıklayın. C# uygulamasının Main yöntem gövdesine aşağıdaki kodu yazın. Aşağıdakilere dikkat edin:

    • C# ve F#'a gelen veya C# ve F#'tan giden proje için proje başvurularını ekleyebilirsiniz.

    • Tanımlı F# isim uzayları ve türleri C#'tan herhangi başka bir tür gibi kullanılabilir.

    • F# belge açıklamaları C# IntelliSense'de mevcuttur.

    • C#, F# API'sinden dönen değerler dizisine erişebilir. Diziler .NET Framework 4 Tuple değerleridir.

    var maturities = new[] { 1, 2, 5, 10 };
    var analyzers = RateAnalysis.Analyzer.Analyzer.GetAnalyzers(maturities);
    
    foreach (var item in analyzers)
    {
        Console.WriteLine("Min = {0}, \t Max = {1}, \t Current = {2}", item.Min, item.Max, item.Current);
    }
    Console.WriteLine("Press Enter to exit.");
    Console.ReadLine();
    
  5. Uygulamada hata ayıklamak için, uygulama başlatmak için F11 tuşuna basın, uygulamayı hata ayıklayıcıda başlatın ve çalıştırılan kodda ilk satıra gidin. GetAnalyzers üyesinin gövdesindeki F# koduna gelinceye kadar birkaç kez daha F11 tuşuna basın. Aşağıdakilere dikkat edin:

    • C# kodundan kolayca F# koduna geçebilirsiniz.

    • Her F# ifadesi hata ayıklayıcıda bir adımdır.

    • Yerel penceresi maturities değerlerini gösterir.

    • Uygulamanın geri kalan değerlendirilmesinde F11 tuşuna basmaya devam edin.

    • Imleç Çalıştır, Sonraki Deyimi Ayarla, Kesme Noktası Ekle, Gözcü Ekle ve Çözüme Git gibi komutlar beklenen şekilde çalışır.

F# uygulamasını dağıtmak için:

  1. Bu adımda, projeyi farklı bir .NET Framework sürümünü hedeflemek için ayarlayacaksınız. Çözüm Gezgini'nde F# RateAnalysis projesine sağ tıklayın ve sonra Özellikler'i tıklayın. Uygulama sekmesinde Hedef Framework ayarını .NET Framework 3.5 olarak değiştirin. Aşağıdakilere dikkat edin:

    • F# farklı .NET Framework sürümlerini hedeflemenizi sağlar.

    • Hedef Framework'u değiştirmek projeyi yeniden yüklemeyi gerektirir.

    • Hedef Framework'u değiştirdikten sonra Başvuru Ekle iletişim kutusundaki bazı derleyici başvuruları etkin değildir ve kullanılamaz.

  2. C# projesinde, .NET Framework 3.0 ve 3.5 sürümlerini de hedeflediğiniz zaman kullanmanız gereken ve .NET Framework 2.0'ı hedefleyen FSharp.Core derleyici sürümü için bir başvuru eklemelisiniz. Çözüm Gezgini'nde Başvurular düğümünü sağ tıklayın ve Başvuru Ekle'yi tıklayın. .NET sekmesinde FSharp.Core sürüm 2.0.0.0'ı seçin ve Tamam'ı tıklayın. Çözümü yeniden oluşturun.

  3. Önkoşulları ayarlamak için CSharpDriver içindeki Özellikler düğümüne çift tıklayın. Üzerinde Yayınla sekmesinde Önkoşullar düğme ve de Önkoşullar onay kutusu için iletişim kutusunda seçin Microsoft Visual f # çalışma için.NET 2.0. Aşağıdakilere dikkat edin:

    • F # ayrı bir çalışma zamanı paketini vardır.net Framework.

    • f # kullanan uygulamalar dağıtırken bu çalışma zamanı paketini açıkça bir önkoşul olarak eklenmelidir.

    • İki çalışma zamanı paketleri vardır: .NET Framework 2.0, 3.0 ve 3.5 sürümü için 2.0 sürümü ve .NET Framework 4 için sürüm 4.0.

  4. ClickOnce kullanarak C# uygulaması dağıtma. CSharpDriver proje düğümüne sağ tıklayın ve Yayımla'yı tıklayın. Yayımla Sihirbazında Son'u tıklayın. Elde edilen CSharpDriver.application'ı çalıştırın. Aşağıdakilere dikkat edin:

    • Görsel f # çalışma zamanı paketini uygulama ile birlikte gelir.

    • Uygulamayı çalıştırmayı f # çalışma zamanı paketini yükler ve uygulamanın başarıyla yürütür.

Sonraki Adımlar

F# kodu yazmaya İzlenecek Yol: İlk f # programınızı'ı veya F# işlevleri hakkında öğrenmek için İlk Sınıf Değerleri (F #) olarak İşlevler'u okuyarak başlayın. F# dilini F # dil Başvuru okuyarak keşfedebilirsiniz.

Ayrıca bkz.

Diğer Kaynaklar

Visual F # İzlenecek Yollar

Örnekler ve izlenecek yollar (f #)