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:
Zrobiło to trzy rzeczy:
- Rozpoczął się proces FSI.
- Kod, który wyróżniłeś, został wysłany do procesu FSI.
- Proces FSI ocenił wysłany kod.
Ponieważ to, co zostało wysłane, to funkcja
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:
Funkcja wewnętrzna o nazwie
isVowel
okreś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
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ć:
- 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.
- 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.
- 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.
- 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.
- 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. - 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#.