F ile etkileşimli programlama#

F# Etkileşimli (dotnet fsi) konsolunda F# kodunu etkileşimli olarak çalıştırmak veya F# betiklerini yürütmek için kullanılır. Başka bir deyişle, F# etkileşimli F# için bir REPL (Okuma, Değerlendirme, Yazdırma Döngüsü) yürütür.

Konsoldan F# Etkileşimli çalıştırmak için dotnet fsi çalıştırın. Herhangi bir dotnet fsi .NET SDK'sı içinde bulabilirsiniz.

Kullanılabilir komut satırı seçenekleri hakkında daha fazla bilgi için bkz. F# Etkileşimli seçenekleri.

Kodu doğrudan F# Etkileşimli

Bir F# Etkileşimli REPL (read-eval-print döngüsü) olduğundan, kodu etkileşimli olarak yürütebilirsiniz. Komut satırı yürüttkten sonra etkileşimli bir oturum örneği dotnet fsi aşağıdaki gibidir:

Microsoft (R) F# Interactive version 11.0.0.0 for F# 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> let square x = x *  x;;
val square : x:int -> int

> square 12;;
val it : int = 144

> printfn "Hello, FSI!"
- ;;
Hello, FSI!
val it : unit = ()

şu iki ana şeyi fark vardır:

  1. Tüm kodun değerlendirilecek şekilde çift noktalı virgülle ( ;; ) sonlandırılmaları gerekir
  2. Kod değerlendirilir ve bir değerde it depolanır. Etkileşimli olarak it başvur başvurarak.

F# Etkileşimli, çok satırlı girişi de destekler. Gönderimi sonlandırmak için çift noktalı virgül ( ) ;; gerekir. Aşağıdaki kod parçacığının içine yapıştırıldı ve aşağıdaki kod parçacığı tarafından değerlendirildi F# Etkileşimli:

> let getOddSquares xs =
-     xs
-     |> List.filter (fun x -> x % 2 <> 0)
-     |> List.map (fun x -> x * x)
-
- printfn "%A" (getOddSquares [1..10]);;
[1; 9; 25; 49; 81]
val getOddSquares : xs:int list -> int list
val it : unit = ()

>

Kodun biçimlendirmesi korunur ve girişi sonlandıran çift noktalı virgül ( ;; ) vardır. F# Etkileşimli kodu değerlendirip sonuçları yazdırdı!

F ile betik#

Kodlarda etkileşimli F# Etkileşimli, harika bir öğrenme aracı olabilir, ancak hızlı bir şekilde normal bir düzenleyicide kod yazmak kadar üretken olmadığını bulursunuz. Normal kod düzenlemeyi desteklemek için F# betikleri yazabilirsiniz.

Betikler .fsx dosya uzantısını kullanır. Kaynak kodu derlemek ve daha sonra derlenmiş derlemeyi çalıştırmak yerine dotnet fsi çalıştırabilir ve F# kaynak kodu betiği dosya adını belirtebilirsiniz; F# etkileşimli kodu okur ve gerçek zamanlı olarak yürütür. Örneğin, adlı aşağıdaki betiği göz önünde Script.fsx kullanın:

let getOddSquares xs =
    xs
    |> List.filter (fun x -> x % 2 <> 0)
    |> List.map (fun x -> x * x)

printfn "%A" (getOddSquares [1..10])

Bu dosya makinenize oluşturulduğunda ile çalıştırabilirsiniz ve dotnet fsi çıkışı doğrudan terminal pencerenize görebilirsiniz:

dotnet fsi Script.fsx
[1; 9; 25; 49; 81]

F# betiği, Visual Studio , Visual Studio Codeve Mac için Visual Studio.

F# Etkileşimli'daki paketlere F# Etkileşimli

Not

Paket yönetim sistemi genişletilebilir.

F# Etkileşimli söz dizimi ve isteğe NuGet #r "nuget:" paketlere başvurulma desteği sunar:

#r "nuget: Newtonsoft.Json"
open Newtonsoft.Json

let data = {| Name = "Don Syme"; Occupation = "F# Creator" |}
JsonConvert.SerializeObject(data)

Sürüm belirtilmezse, kullanılabilir en yüksek önizleme dışı paket alınır. Belirli bir sürüme başvuru yapmak için sürümü virgülle tanıtabilirsiniz. Bu, bir paketin önizleme sürümüne başvururken kullanışlı olabilir. Örneğin, DiffSharp'ınönizleme sürümünü kullanarak bu betiği düşünün:

#r "nuget: DiffSharp-lite, 1.0.0-preview-328097867"
open DiffSharp

// A 1D tensor
let t1 = dsharp.tensor [ 0.0 .. 0.2 .. 1.0 ]

// A 2x2 tensor
let t2 = dsharp.tensor [ [ 0; 1 ]; [ 2; 2 ] ]

// Define a scalar-to-scalar function
let f (x: Tensor) = sin (sqrt x)

printfn $"{f (dsharp.tensor 1.2)}"

Paket kaynağı belirtme

Komutuyla bir paket kaynağı da #i belirtebilirsiniz. Aşağıdaki örnek uzak ve yerel bir kaynak belirtir:

#i "nuget: https://my-remote-package-source/index.json"
#i """nuget: C:\path\to\my\local\source"""

Bu, bir betikte eklenen uzak ve/veya yerel kaynakları da dikkate almak için altta yer alan çözümleme altyapısına söyler.

Bir betikte istediğiniz kadar paket başvurusu belirtabilirsiniz.

Not

Şu anda çerçeve başvurularını kullanan betikler için bir sınırlama vardır (örneğin veya Microsoft.NET.Sdk.Web Microsoft.NET.Sdk.WindowsDesktop ). Satürn, Giraffe ve WinForms gibi paketler kullanılamaz. Bu, 9417 numaralı sorunda iz ediliyor.

F# etkileşimli disk üzerinde derlemelere başvuru

Alternatif olarak, diskte bir derlemeniz varsa ve bir betikte buna başvuru yapmak isterseniz, bir derleme belirtmek için #r söz dizimi kullanabilirsiniz. içine derlenmiş bir projede aşağıdaki kodu göz önünde MyAssembly.dll bulundurabilirsiniz:

// MyAssembly.fs
module MyAssembly
let myFunction x y = x + 2 * y

Derlenin, şöyle adlı bir dosyada buna Script.fsx başvurabilirsiniz:

#r "path/to/MyAssembly.dll"

printfn $"{MyAssembly.myFunction 10 40}"

Çıktı aşağıdaki şekilde olacaktır:

dotnet fsi Script.fsx
90

Bir betikte istediğiniz kadar derleme başvurusu belirtsiniz.

Diğer betikleri yükleme

Betik oluşturma, farklı görevler için farklı betikler kullanmak genellikle yararlı olabilir. Bazen kodu bir betikten başka bir betikte yeniden kullanmak istiyor olabilirsiniz. İçeriğini dosyanıza kopyalamak yerine ile yüklayıp #load değerlendirebilirsiniz.

Aşağıdakilere Script1.fsx dikkat:

let square x = x * x

Ve tüketen Script2.fsx dosya:

#load "Script1.fsx"
open Script1

printfn $"%d{square 12}"

Şu şekilde Script2.fsx değerlendirin:

dotnet fsi Script2.fsx
144

Bir betikte #load istediğiniz kadar yönerge belirtesiniz.

Not

Bildirim open Script1 gereklidir. Bunun nedeni, F# betiğinde yapıların içinde yer alan betik dosyasının adı olan üst düzey bir modülde derlenmiş durumdadır. Betik dosyası gibi küçük harfli bir ada sahipse, örtük modül adı otomatik olarak büyük harfle yazılır ve script3.fsx bunu kullansanız open Script3 gerekir. Bir loadable-script'in modüllerin belirli bir ad alanı içinde yapılarını tanımlaması için modül bildirimi ad alanı abilirsiniz, örneğin:

module MyScriptLibrary

fsiF# kodunda nesnesini kullanma

F# betikleri, oturum açma fsi oturumunu temsil eden özel F# Etkileşimli erişime sahip olur. Çıktı biçimlendirmesi gibi şeyleri özelleştirmenize olanak sağlar. Komut satırı bağımsız değişkenlerine de bu şekilde erişebilirsiniz.

Aşağıdaki örnekte, komut satırı bağımsız değişkenlerini nasıl alı ve kullanabileceğiniz gösterir:

let args = fsi.CommandLineArgs

for arg in args do
    printfn $"{arg}"

Değerlendirilerek tüm bağımsız değişkenleri yazdırır. İlk bağımsız değişken her zaman değerlendirilen betiğin adıdır:

dotnet fsi Script1.fsx hello world from fsi
Script1.fsx
hello
world
from
fsi

Aynı bağımsız değişkenlere System.Environment.GetCommandLineArgs() erişmek için de kullanabilirsiniz.

F# Etkileşimli yönerge başvurusu

Daha #r önce görülen ve yönergeleri yalnızca #load F# Etkileşimli. Yalnızca F# Etkileşimli'de kullanılabilen birkaç yönerge F# Etkileşimli:

Yönergesi Description
#r "nuget:..." Bir pakete NuGet
#r "assembly-name.dll" Diskte bir derlemeye başvurur
#load "file-name.fsx" Bir kaynak dosyayı okur, derler ve çalıştırır.
#help Kullanılabilir yönergelerle ilgili bilgileri görüntüler.
#I Tırnak işaretleri içinde bir derleme arama yolu belirtir.
#quit Bir oturum F# Etkileşimli sonlandırılır.
#time "on" veya #time "off" Tek başına, #time performans bilgilerini görüntülemeye ilişkin iki durumlu düğmeyi de görüntüler. olduğunda, F# Etkileşimli, yorumlandır ve yürütülen her kod bölümü için gerçek zamanlı, CPU süresi ve çöp "on" toplama bilgilerini ölçür.

Dosya veya yolları tek bir F# Etkileşimli dize değişmez değeri beklenir. Bu nedenle, dosyalar ve yollar tırnak işaretleri içinde olmalıdır ve normal kaçış karakterleri geçerlidir. Bir yolu içeren bir dizeyi F# Etkileşimli dizeyi tam dize olarak yorumlamaya neden olmak @ için karakterini kullanabilirsiniz. Bu, F# Etkileşimli karakterleri yoksaymamalarını sağlar.

Etkileşimli ve derlenmiş ön işlemci yönergeleri

Etkileşimli olarak veya betik F# Etkileşimli kodu derlemek için INTERACTIVE simgesi tanımlanır. Derleyicide kod derlerken COMPILED simgesi tanımlanır. Bu nedenle, kodun derlenmiş ve etkileşimli modlarda farklı olması gerekirse, hangisinin kullan gerektiğini belirlemek üzere koşullu derleme için bu önişlemci yönergelerini kullanabilirsiniz. Örneğin:

#if INTERACTIVE
// Some code that executes only in FSI
// ...
#endif

F# Etkileşimli'de Visual Studio

Bu F# Etkileşimli çalıştırmak Visual Studio, F# Etkileşimli etiketli uygun araç çubuğu düğmesine tıklayabilirsiniz veya Ctrl+Alt+F tuşlarını kullanabilirsiniz. Bunu yapmak etkileşimli pencereyi açar ve oturum açma sırasında F# Etkileşimli açılır. Etkileşimli pencerede çalıştırmak istediğiniz kodu da seçerek Alt+Enter tuş bileşimine basabilirsiniz. F# Etkileşimli, F# Etkileşimli etiketli bir araç penceresinde başlatılır. Bu tuş bileşimini kullanırken düzenleyici penceresinin odakta olduğundan emin olun.

konsolunu veya konsolunu Visual Studio komut istemi görüntülenir ve yorumlayıcı girişinizi bekler. Kodu bir kod dosyasında olduğu gibi girebilirsiniz. Kodu derlemek ve yürütmek için, bir satırı veya birkaç giriş satırı sonlandırmak için iki noktalı virgül (;;) girin.

F# Etkileşimli derlemeyi dener ve başarılı olursa kodu yürütür ve derlediği türlerin ve değerlerin imzasını yazdırır. Hatalar oluşursa yorumlayıcı hata iletilerini yazdırır.

Aynı oturumda girilen kodun daha önce girilen herhangi bir yapıya erişimi vardır, bu nedenle program kurabilirsiniz. Araç penceresindeki kapsamlı bir arabellek, gerekirse kodu bir dosyaya kopyalamaya olanak sağlar.

Visual Studio F# Etkileşimli projenizin bağımsız olarak çalıştırabilirsiniz; bu nedenle, işlevin kodunu etkileşimli pencereye kopyalamadıkça F# Etkileşimli'de projeniz içinde tanımlanan yapıları kullanılamaz.

Ayarları ayarlayarak F# Etkileşimli komut satırı bağımsız değişkenlerini (seçenekler) kontrol edebilirsiniz. Araçlar menüsünde Seçenekler... öğesini seçin ve ardından F# Araçları'ı genişletin. Değiştirebilirsiniz iki ayar, F# Etkileşimli seçenekleri ve 64 bit F# Etkileşimli ayarıdır. Bu ayar yalnızca 64 bit makinede F# Etkileşimli çalışıyorsanız uygun olur. Bu ayar, 32 bit veya 64 bit işlem olarak çalıştırıp çalıştırmayacaklarını belirlemek için makine mimarisini kullanan fsi.exe veya fsianycpu.exe'nin ayrılmış 64 bit sürümünü çalıştırmak isteyip istemediklerini belirler.

Başlık Açıklama
F# Etkileşimli Seçenekleri Komut satırı söz dizimi ve komut satırı F# Etkileşimli seçenekleri fsi.exe.