Strona główna » Kursy » Kurs C# » Dosłowne Teksty
 

Dosłowne Teksty

Cel

Nowi programiści mogą borykać się z problemem zapisania ścieżki w zmiennej typu string. Problemem okazują się tutaj znaki specjalne, które pozwalają na sformatowanie przechowywanego tekstu. W tym artykule zostanie wyjaśnione jak przekazać do zmiennej typu string dokładnie to co chcemy w niej zapisać.

Implementacja

Ścieżka

Znaki specjalne takie jak znak nowej linii ("\n") czy tabulator ("\t") są rozpoznawane poprzez zastosowanie znaku backslash "\". Jest to bardzo wygodny sposób formatowania wypisywanego tekstu, ale powoduje on kłopoty podczas zapisywania ścieżki. Przykładowo chcąc do zmiennej typu string przypisać wartość "C:\Dokument.txt" to środowisko natychmiast zgłasza błąd. Jest to spowodowane faktem, że po znaku "\" stoi znak "D" i nie zostaje on rozpoznany jako jakikolwiek znak specjalny.

Twórcy języka C# przewidzieli taki scenariusz i wprowadzili do języka przedrostek "@", który należy ustawić przed samym tekstem. Dla kompilatora będzie to sygnał, że cokolwiek zostało zapisane pomiędzy cudzysłowami powinno zostać potraktowane dosłownie (ang. verbatim). To pozwala na zapisanie ścieżki w wygodny sposób:

  1.   string sciezka = @"C:\Dokument.txt";

Warto tutaj zaznaczyć, że "@" nie zapisuje jakieś specjalnej wersji do zmiennej, a jedynie zamienia odpowiednie znaki. W ścieżce problemem są backslashe. W dosłownym tekście zostaną one automatycznie zamienione na podwójny backslash. Dla powyższego przypadku użycia tekst zostanie przechowany jako:

  1. C:\\Dokument.txt

Tekst wielolinijkowy

Dosłowne traktowanie tekstu dotyczy również znaków nowej linii wstawionych w środek tekstu. Dzięki temu możliwe jest uzyskanie tekstów wielolinijkowych bez dzielenia go na odpowiednie fragmenty i wstawianie znaku nowej linii. Oto przykład przypisania do zmiennej tekstu złożonego z trzech linijek.

  1.   string multi = @"Linijka1
  2.     Linijka2
  3.     Linian>jka3";
  4.   Console.WriteLine(multi);

Niestety tekst wypisze się prawdopodobnie inaczej niż można by przypuszczać...

  1. Linijka 1
  2.         Linijka 2
  3.         Linijka 3

Choć może to być zaskakujące to program wypisał prawidłowo. Otóż każdy znak jest traktowany dosłownie, więc wszystkie wcięcia w kodzie (czy to tabulatory czy spacje), które znajduję się w przypisywanym tekście też są traktowane jako znak do zapisania. Podsumowując, aby uniknąć nieoczekiwanych wcięć należy pamiętać, aby tekst wyrównać do samej początki linijki. Niestety przez to kod jest mniej czytelny.

Wartości w tekście

W specyfikacji języka C# 6.0 dodano jeszcze jeden przedrostek, który można ustawić przed tekstem. Jest nim "$". Pozwala to na wstawienie do tekstu dowolnej wartości (stałej, albo zmiennej). Wstawianą wartość należy umieścić wewnątrz nawiasów klamrowych. Przykładowo, aby wyświetlić przykład obliczania sumy 1 i 2 należy wpisać:

  1.   string oblicz = $"1 + 2 = {1 + 2}";
  2.   Console.WriteLine(oblicz);

Wyrażenie wewnątrz nawiasów klamrowych zostanie obliczone i w to miejsce zostanie wpisany wynik. Wypisując ten tekst na kosnolę otrzymamy:

  1. 1 + 2 = 3

Zmienne w tekście

Inną możliwością jest wstawienie w tekst wartości zmiennej, albo nawet wyrażenia, które jest obliczane na podstawie zmiennej. Jest to bardzo wygodne narzędzie, które pozwala w prosty sposób sformatować dane do wypisania. W poniższym przykładzie zostały zadeklarowane dwie zmienne, a następnie wartości zmiennych jak też ich suma zostają zapisane do tekstu.

  1.   int a = 2;
  2.   int b = 3;
  3.   string suma = $"{a} + {b} = {a + b}";
  4.   Console.WriteLine(suma);

Wynik jest analogiczny do uzyskanego w poprzednim przykładzie.

  1. 2 + 3 = 5

Zadania

Zadanie 1

Napisz prosty kalkulator, który wczyta od użytkownika dwie wartości oraz znak operacji do wykonania. Program powinien wspierać cztery podstawowe operacje dodawanie "+", odejmowanie "-", dzielenie "/" oraz mnożenie "*". Skorzystaj z poznanych możliwości formatowania tekstu w celu wypisania wyniku. Przetestuj działanie napisanego programu.