Udostępnij za pośrednictwem


Wprowadzenie do języka F# w programie Visual Studio Code

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

Notatka

Przed rozpoczęciem upewnij się, że zainstalowano zarówno F#, jak 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 pisać kod w edytorze do tego momentu, ale gdy to się stanie, wszystko jest już załadowane.

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 wyraz na formę Pig Latin. Następnym krokiem jest ocena w środowisku F# Interactive (FSI).

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

pl-PL: Przykład interaktywnego wyjścia F# z Ionide

Zrobiło to trzy rzeczy:

  1. Rozpoczął się proces FSI.
  2. Kod, który wyróżniłeś, został wysłany do procesu FSI.
  3. Proces FSI ocenił wysłany kod.

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

toPigLatin "banana";;

Powinien zostać wyświetlony następujący wynik:

val it: string = "ananabay"

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

toPigLatin "apple";;

Powinien zostać wyświetlony następujący wynik:

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!

Notatka

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 informuje FSI 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ć, toPigLatin jest funkcją, która przyjmuje słowo jako dane wejściowe i konwertuje je na Pig-Latin reprezentację 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".

Możliwe, że zauważyłeś następujące kwestie w FSI:

val toPigLatin: word: string -> string

Oznacza to, że toPigLatin jest funkcją, która przyjmuje string jako dane wejściowe (nazywane word) i zwraca inny string. Jest to nazywane sygnaturą 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 isVowelokreśla, czy dany znak (c) jest samogłoską, sprawdzając, czy pasuje do jednego z podanych wzorców za pośrednictwem Pattern Matching:

    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, które sprawdza, czy pierwszy znak jest znakiem samogłoski, 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 zwracania 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 jest wyrażeniem, ocena treści bloku then lub treści bloku else określa wartość zwracaną przez funkcję toPigLatin.

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 funkcjonalnością, dopóki nie zadziała cokolwiek.

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# do biblioteki, którą można uruchomić.

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

Następnie utwórz nową module o nazwie PigLatin i skopiuj utworzoną wcześniej funkcję toPigLatin 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 funkcji main 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 funkcji main 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 elementów nie rozwiązał problemu, spróbuj usunąć katalog ionide-fsharp na maszynie i ponownie zainstalować pakiet wtyczek.
  6. Jeśli ładowanie projektu nie powiodło się (Zostanie wyświetlony Eksplorator rozwiązań języka F#), kliknij prawym przyciskiem myszy ten projekt i kliknij 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łaszaj problemy i współtwórz w repozytorium GitHub ionide-vscode-fsharp . Więcej informacji znajdziesz na 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, zobacz Przewodnik po języku F#.