Rozpoczynanie pracy z językiem F# w programie Visual Studio Code

Język F# można napisać w programie Visual Studio Code za pomocą wtyczki Ionide, aby uzyskać doskonałe środowisko międzyplatformowe, uproszczone zintegrowane środowisko projektowe (IDE) z funkcją IntelliSense i refaktoryzacją kodu. Odwiedź Ionide.io , aby dowiedzieć się więcej na temat wtyczki.

Aby rozpocząć, upewnij się, że masz poprawnie zainstalowany język F# i wtyczkę Ionide.

Tworzenie pierwszego projektu za pomocą Ionide

Aby utworzyć nowy projekt języka F#, otwórz wiersz polecenia i utwórz nowy projekt przy użyciu interfejsu wiersza polecenia platformy .NET:

dotnet new console -lang "F#" -o FirstIonideProject

Po zakończeniu zmień katalog na projekt i otwórz program Visual Studio Code:

cd FirstIonideProject
code .

Po załadowaniu projektu w programie Visual Studio Code powinno zostać wyświetlone okienko Eksplorator rozwiązań języka F# po lewej stronie okna. Oznacza to, że aplikacja Ionide pomyślnie załadowała właśnie utworzony projekt. Możesz napisać kod w edytorze przed tym punktem w czasie, ale gdy tak się stanie, wszystko zakończyło się ładowanie.

Pisanie pierwszego skryptu

Po skonfigurowaniu programu Visual Studio Code do używania skryptów platformy .NET Core przejdź do widoku Eksploratora w programie Visual Studio Code i utwórz nowy plik. Nadaj mu nazwę MyFirstScript.fsx.

Teraz dodaj do niego następujący kod:

let toPigLatin (word: string) =
    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"

Ta funkcja konwertuje słowo na formę Pig Latin. Następnym krokiem jest ocena przy użyciu interfejsu F# Interactive (FSI).

Wyróżnij całą funkcję (powinna mieć długość 11 wierszy). Po jej podświetleniu przytrzymaj klawisz Alt i naciśnij klawisz Enter. W dolnej części ekranu zostanie wyświetlone okno terminalu, które powinno wyglądać podobnie do następującego:

Example of F# Interactive output with Ionide

Zrobiło to trzy rzeczy:

  1. Proces fsI został uruchomiony.
  2. Wysłał on kod wyróżniony do procesu FSI.
  3. Proces FSI ocenił wysłany kod.

Ponieważ to, co zostało wysłane, było funkcją , można teraz wywołać tę funkcję za pomocą fsI! W oknie interaktywnym wpisz następujące polecenie:

toPigLatin "banana";;

Wynik powinien być następujący:

val it: string = "ananabay"

Teraz spróbujmy z samogłoską jako pierwszą literą. Wprowadź następujące informacje:

toPigLatin "apple";;

Wynik powinien być następujący:

val it: string = "appleyay"

Wygląda na to, że funkcja działa zgodnie z oczekiwaniami. Gratulacje. Właśnie napisałeś swoją pierwszą funkcję języka F# w programie Visual Studio Code i oceniliśmy ją za pomocą fsI!

Uwaga

Jak można zauważyć, wiersze w fsI są przerywane za pomocą ;;. Dzieje się tak, ponieważ interfejs FSI umożliwia wprowadzanie wielu wierszy. Na ;; końcu interfejs FSI informuje o zakończeniu kodu.

Wyjaśnienie kodu

Jeśli nie masz pewności co do tego, co w rzeczywistości robi kod, oto krok po kroku.

Jak widać, jest funkcją, toPigLatin która przyjmuje słowo jako dane wejściowe i konwertuje je na reprezentację Pig-Latin tego słowa. Reguły dotyczące tego są następujące:

Jeśli pierwszy znak w słowie zaczyna się od samogłoski, dodaj wyraz "yay" na końcu słowa. Jeśli nie zaczyna się od samogłoski, przenieś ten pierwszy znak na koniec słowa i dodaj do niego znak "ay".

Być może w fsI zauważysz następujące kwestie:

val toPigLatin: word: string -> string

Oznacza to, że jest to funkcja, toPigLatin która przyjmuje string element jako dane wejściowe (o nazwie word), i zwraca inny stringelement . Jest to nazywane podpisem typu funkcji , podstawowym elementem języka F#, który jest kluczem do zrozumienia kodu F#. Zauważysz to również po umieszczeniu wskaźnika myszy na funkcji w programie Visual Studio Code.

W treści funkcji zauważysz dwie odrębne części:

  1. Funkcja wewnętrzna o nazwie isVowel, która określa, czy dany znak (c) jest samogłoską, sprawdzając, czy pasuje do jednego z podanych wzorców za pomocą dopasowywania wzorca:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. Wyrażenie if..then..else sprawdzające, czy pierwszy znak jest cyfrą, i tworzy wartość zwracaną z znaków wejściowych na podstawie tego, czy pierwszy znak był znakiem samogłoski, czy nie:

    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"
    

Przepływ toPigLatin jest zatem:

Sprawdź, czy pierwszy znak wyrazu wejściowego jest samogłoską. Jeśli tak jest, dołącz "yay" na końcu słowa. W przeciwnym razie przenieś ten pierwszy znak na koniec słowa i dodaj do niego znak "ay".

Jest jedna ostatnia rzecz, którą należy zauważyć: w języku F#nie ma jawnej instrukcji zwracanej z funkcji. Dzieje się tak, ponieważ język F# jest oparty na wyrażeniach, a ostatnie wyrażenie obliczane w treści funkcji określa wartość zwracaną tej funkcji. Ponieważ if..then..else sama jest wyrażeniem, ocena treści then bloku lub treści else bloku określa wartość zwracaną przez toPigLatin funkcję.

Przekształcanie aplikacji konsolowej w generator Pig Latin

W poprzednich sekcjach w tym artykule przedstawiono typowy pierwszy krok w pisaniu kodu języka F#: pisanie funkcji początkowej i wykonywanie jej interaktywnie za pomocą fsI. Jest to nazywane programowaniem opartym na języku REPL, gdzie REPL oznacza "Read-Evaluate-Print Loop". Jest to doskonały sposób na eksperymentowanie z funkcjami, dopóki nie będziesz mieć czegoś do pracy.

Następnym krokiem programowania opartego na środowisku REPL jest przeniesienie działającego kodu do pliku implementacji języka F#. Następnie można go skompilować za pomocą kompilatora języka F# w zestawie, który można wykonać.

Aby rozpocząć, otwórz utworzony wcześniej plik Program.fs za pomocą interfejsu wiersza polecenia platformy .NET. Zauważysz, że jakiś kod już tam znajduje się.

Następnie utwórz nową module nazwę PigLatin i skopiuj toPigLatin utworzoną wcześniej funkcję w następujący sposób:

module PigLatin =
    let toPigLatin (word: string) =
        let isVowel (c: char) =
            match c with
            | 'a' | 'e' | 'i' | 'o' | 'u'
            | 'A' | 'E' | 'I' | 'O' | 'U' -> true
            |_ -> false
        
        if isVowel word[0] then
            word + "yay"
        else
            word[1..] + string word[0] + "ay"

Ten moduł powinien znajdować się powyżej main funkcji i poniżej deklaracji open System . Kolejność deklaracji ma znaczenie w języku F#, dlatego należy zdefiniować funkcję przed wywołaniem jej w pliku.

Teraz w main funkcji wywołaj funkcję generatora Pig Latin na argumentach:

[<EntryPoint>]
let main args =
    for arg in args do
        let newArg = PigLatin.toPigLatin arg
        printfn "%s in Pig Latin is: %s" arg newArg

    0

Teraz możesz uruchomić aplikację konsolową z poziomu wiersza polecenia:

dotnet run apple banana

Zobaczysz, że zwraca ten sam wynik co plik skryptu, ale tym razem jako uruchomiony program!

Rozwiązywanie problemów z jonide

Poniżej przedstawiono kilka sposobów rozwiązywania niektórych problemów, które mogą wystąpić:

  1. Aby uzyskać funkcje edytowania kodu Ionide, pliki F# należy zapisać na dysku i wewnątrz folderu, który jest otwarty w obszarze roboczym programu Visual Studio Code.
  2. Jeśli wprowadzono zmiany w systemie lub zainstalowano wymagania wstępne Ionide za pomocą otwartego programu Visual Studio Code, uruchom ponownie program Visual Studio Code.
  3. Jeśli masz nieprawidłowe znaki w katalogach projektu, Ionide może nie działać. Zmień nazwę katalogów projektów, jeśli tak jest.
  4. Jeśli żadne z poleceń Ionide nie działa, sprawdź powiązania kluczy programu Visual Studio Code, aby sprawdzić, czy zostały one zastąpione przez przypadek.
  5. Jeśli Ionide jest uszkodzona na maszynie i żaden z powyższych nie rozwiązał problemu, spróbuj usunąć ionide-fsharp katalog na maszynie i ponownie zainstalować pakiet wtyczek.
  6. Jeśli ładowanie projektu nie powiodło się (Eksplorator rozwiązań języka F#to pokaże), kliknij prawym przyciskiem myszy ten projekt i kliknij pozycję Zobacz szczegóły, aby uzyskać więcej informacji diagnostycznych.

Ionide to projekt typu open source utworzony i obsługiwany przez członków społeczności języka F#. Zgłoś problemy i możesz bezpłatnie współtworzyć plik ionide-vscode-fsharp w repozytorium GitHub.

Możesz również poprosić o dalszą pomoc od deweloperów Ionide i społeczności języka F# w kanale Ionide Gitter.

Następne kroki

Aby dowiedzieć się więcej na temat języka F# i funkcji języka, zapoznaj się z przewodnikiem po języku F#.