Jason. Cała informatyka w jednym miejscu!

Jeśli pytacie o praktykę właściwą z języka C#, to trafiliście na właściwy materiał! Dzisiaj odstawimy teorię na bok i zajmiemy się praktyką. Programowanie to nauka PRAKTYCZNA. Ten fach mi pokazał, że praktykę i teorię powinno się podzielić w stosunku 75/25. Niniejszy materiał zademonstruje Wam jak skompilować i uruchomić Wasz pierwszy program w języku C#. Będzie klasyka, czyli wypisywanie tekstu na strumień wyjściowy. Od czegoś trzeba zacząć :D.

PIERWSZY PROGRAM W JĘZYKU C# NIE BĘDZIE TYLKO "WITAŁ ŚWIATA"

"Hello, world!" w moim przykładzie tak szybko nie zawita, gdyż chcę pokazać odrobinę więcej niż wypisywanie tekstu. Większa część artykułu zostanie poświęcona tłumaczeniu w jaki sposób skompilować program w języku C# w różnych środowiskach. Pokażę Wam jak przejść przez proces kompilacji używając "Visual Studio 2019", "Visual Studio Code" oraz samego wiersza poleceń, bo każdy z Was może preferować inną drogę z nawyków, wygody bądź możliwości sprzętowych (znam ten ból kiedy instalując "Visual Studio", "żegnamy się" z kilkunastoma gigabajtami :D).

TWORZENIE NOWEGO PROJEKTU

Wystartujemy od utworzenia nowego projektu. W zależności od wybranego środowiska, odbywa się to w diametralnie inny sposób.

VISUAL STUDIO 2019

Od strony tego wszystkim znanego IDE, jest chyba najprościej utworzyć nowy projekt za pomocą krótkiej sekwencji pod tytułem "Next" :). Na początku klikamy nic bardziej wymownego jak "Utwórz nowy projekt". Po chwili załaduje się zawartość okna z przyciskami. Nas interesuje na tę chwilę C#, więc proponuję sobie włączyć u góry filtr "Wszystkie języki" i przełączyć się na "C#". Z racji tego, że są to dla niektórych z Was pierwsze kroki i pierwszy program w języku C# jaki przyjdzie Wam skompilować, zaznaczcie sobie jeszcze jeden filtr "Wszystkie typy projektów" na "Konsola". Powinny Wam zostać dwa szablony projektów.

Ja wybrałem "Aplikacja konsolowa", aby kompilowało się używając ".NET Core", z myślą o czytelnikach posiadających system operacyjny inny niż Windows. Po kliknięciu przycisku "Dalej", wystarczy nadać nazwę projektu, zmienić lokalizację na dowolną pożądaną i kliknąć "Dalej". Co zaś się tyczy struktury docelowej, zostawiam na ".NET Core 3.1 (Długoterminowe wsparcie)". Nie pozostaje nic innego jak kliknąć "Utwórz" i poczekać aż "Visual Studio 2019" zajmie się resztą.

Tworzenie projektu dla pierwszego programu w języku C# w "Visual Studio 2019"
Tworzenie projektu dla pierwszego programu w języku C# w "Visual Studio 2019" - część druga
Tworzenie projektu dla pierwszego programu w języku C# w "Visual Studio 2019" - część trzecia
Tworzenie projektu dla pierwszego programu w języku C# w "Visual Studio 2019" - część czwarta

Proces tworzenia projektu w "Visual Studio 2019" na pierwszy program w języku C#.

Jeżeli dysponujecie innym rocznikiem niż 2019, nie martwcie się ;). Różnice w procesie tworzenia projektu mogą okazać się tak nieznaczne, że poradzicie sobie samodzielnie w otrzymaniu tego samego efektu.

VISUAL STUDIO CODE

Aby móc utworzyć prawidłowo funkcjonujący projekt na "VSCode", wymagana jest instalacja wtyczki C# której twórcą jest nikt inny jak Microsoft, a wraz z nią rozpocznie się automatyczne doinstalowywanie implementacji ".NET Core" oraz debuggera. Kiedy dojdzie do finalizacji, profilaktycznie proponuję uruchomić ponownie cały program.

UWAGA! Posiadacze 32-bitowych systemów operacyjnych mogą mieć problemik przy instalacji debuggera. Mnie przynajmniej kiedyś wyskoczyło powiadomienie, że z debuggera nici z powodu 32 bitów zamiast 64. Nie panikujcie przedwcześnie - to było jakiś czas temu i może coś już z tym zrobili :).

Najłatwiej dla mnie jest utworzyć projekt w taki sposób. Przejść do pożądanego katalogu, w którym ma zostać umieszczony projekt ("Eksplorator plików"), utworzyć w nim nowy katalog o dowolnej nazwie i teraz najważniejsze, przeciągnąć go do otwartego okna "Visual Studio Code". Otwieramy terminal klikając kolejno "Terminal", "Nowy terminal". Wprowadzamy następującą komendę:

dotnet new console --name [nazwa projektu]

Po zatwierdzeniu Enterem, po chwili utworzy się nowy katalog o nazwie podanej po parametrze "name". Jeżeli Wam nie odpowiada katalog w katalogu (tak jak mnie), wystarczy sobie wyjąć zawartość (katalog "obj", plik noszący nazwę projektu z rozszerzeniem ".csproj" oraz plik źródłowy "Program") i skasować katalog. Tadam! Tworzenie projektu zakończone :D!

Po otwarciu pliku źródłowego, może wyskoczyć okienko o brakujących elementach niezbędnych do debugowania i budowania aplikacji. Wciśnijcie "Tak", gdyby padło takie pytanie.

Powiadomienie po utworzeniu projektu C# w "VSCode"

Powiadomienie o brakującym katalogu ".vscode" po utworzeniu projektu w "VSCode".

WIERSZ POLECEŃ

Tu jest krótka piłka, gdyż wiersz poleceń nie oferuje żadnego sposobu tworzenia całego projektu. Tworzycie sobie sami nowy katalog, plik z rozszerzeniem ".cs" i tyle. "Projekt" gotowy :).

NAJPROSTSZY KOD ŹRÓDŁOWY

Po utworzeniu projektu, możemy przystąpić do pracy właściwej. Zasada jest taka, że w przypadku gdy dyskutujemy o języku C#, rozszerzenie pliku powinno mieć postać ".cs" (jak pewna bardzo popularna gra sieciowa ;)). Jeżeli macie jakikolwiek dowolny kod wygenerowany automatycznie, to go skasujcie. Oto kod prezentowany w ramach przykładu na pierwszy program w języku C#. To może być to samo, tylko odjąłem dodatki, aby nie rozpraszały początkującym:

using System;

class Program
{
	static void Main(string[] args)
	{
		Console.WriteLine("Mój pierwszy program w języku C#");
	}
}

Rozpocznijmy analizę od samego środka.

TEKST W CUDZYSŁOWACH

Mamy tekst ujęty w cudzysłowy. Naukowo nazywa się "łańcuchem znaków". Każdy tekst, który ma być traktowany jako tekst, a nie jak część instrukcji kodu, TRZEBA ująć w cudzysłów! Określam to "tekstem" dla większego uproszczenia sprawy. Należy jednak wiedzieć, że pomiędzy cudzysłowami może też znaleźć się cyfra, spacja (nazywana "białym znakiem") i każdy inny znak z klawiatury. Wrócimy do tego później.

FUNKCJA I JEJ WYWOŁANIE

Nasz tekst jest "otoczony" przez parę nawiasów okrągłych i nazwę "Console.WriteLine". To jest wywołanie funkcji. Funkcja to podprogram, który stanowi wydzieloną część instrukcji do wykonania, celem odseparowania od siebie instrukcji niemających z daną operacją nic wspólnego, a także w celu możliwości wykonania tych samych instrukcji nieskończoną liczbę razy. Funkcja może przyjmować parametry formalne i po to są te nawiasy. Para nawiasów okrągłych jest "wizytówką" wywołania funkcji, znakiem rozpoznawczym. Bez względu na to, czy ona przyjmuje jakieś parametry formalne, czy nie, umieszczamy je ZAWSZE, jeśli to jest funkcja! W tym przypadku, funkcja "Console.WriteLine" przyjmuje jeden parametr w postaci łańcucha znaków.

ŚREDNIKI!

Skieruję Waszą uwagę na jeszcze jeden szczegół. Mianowicie, średnik. W języku C# (jak i w wielu innych językach programowania), każdą instrukcję kończymy średnikiem. To jest sygnał dla kompilatora w którym miejscu kończy się dana instrukcja. Tej zasady przestrzegamy rygorystycznie i kompilator Wam nie popuści, jeśli w którymś miejscu oczekiwał średnika i go nie znalazł.

FUNKCJA URUCHOMIENIOWA "MAIN"

Wreszcie można zająć się funkcją, od której zawsze zaczyna się każdy program. To jest funkcja "Main", nazywana także "funkcją uruchomieniową". To jest punkt startowy każdej aplikacji. W zależności od decyzji programisty, może posiadać jeden parametr formalny w postaci tablicy łańcuchów znaków, ale nie musi.

W przeciwieństwie do wcześniej omówionego wywołania funkcji, tutaj mamy definicję funkcji. Po czym to poznać? Po nagłówku (modyfikator dostępu + inne poboczne modyfikatory + nazwa + nawiasy okrągłe z parametrami formalnymi) oraz po klamerkach, które wyznaczają granicę dla treści funkcji. To co widzicie nad jej treścią otoczoną klamerkami, "static void", stanowi część nagłówka definicji funkcji w postaci modyfikatorów. To pierwsze to jest modyfikator statyczności, a "void" to oznaczenie typu (ewentualnie) zwracanej wartości. Zarówno pierwszy temat, jak i drugi, zostaną rozwinięte w osobnych materiałach. Nie wszystko naraz :D!

Zadam sobie jeszcze ten trud, aby wyjaśnić skąd się biorą te argumenty w "args". Jeśli wprowadzicie serię parametrów do programu ze strony wiersza poleceń (coś w stylu włączania kodów w starszych grach), to wszystko co zostanie wstawione zaraz po nazwie programu oddzielane spacją, jest parametrem tablicy "args", czyli parametru formalnego funkcji "Main".

KLASA

C# jest językiem wysokiego poziomu ukierunkowanym silnie na programowanie zorientowane obiektowo, choć to niejedyna możliwość pisania kodu. Pojęciem "klucz" tego paradygmatu jest klasa. Klasa jednym zdaniem jest szablonem dla tworzonych obiektów na jej podstawie, a na jej temat poświęcono odrębne materiały, gdyż to kolejny temat rzeka. Nawet w takim prostym programie, znajduje się klasa (przynajmniej w starszych wersjach C#). Musi się ona znajdować, aby doszło do prawidłowej kompilacji! Wynika to z zasad języka i nie ma opcji, żeby jakakolwiek funkcja znajdowała się na zewnątrz kodu jak w C i C++.

ZAUWAŻYŁEM JAKIŚ "NAMESPACE"

Jeszcze jedno, apropos składni. W wygenerowanym kodzie mogliście natrafić na coś takiego:

namespace [nazwa]

Nie przejmujcie się na dzień dobry co to jest i do czego to służy. To dopiero Wasz pierwszy program w języku C# (dla niektórych, oczywiście). Bezpiecznie będzie wiedzieć na początek, że ten "cosik" określany jest jako "przestrzeń nazw".

DYREKTYWA "USING"

Ostatnia rzecz to instrukcja dość napisać "nietypowa". Zanim napiszę co ona daje, pozwolę sobie najpierw zostawić prawidłowy termin, abyście mogli od razu poszukać o niej więcej informacji. To jest dyrektywa. Dyrektywa modyfikuje egzekwowanie (lub przebieg egzekwowania) instrukcji. Występuje wiele dyrektyw i nie czas poświęcać momenty życia na ich poznanie. Jedną z nich jest "using". W tym przypadku, "using" ma na celu "uzyskanie zezwolenia" na skorzystanie ze skróconych nazw funkcji znajdujących się w podanej przestrzeni nazw (bez podanego przedrostka). Gdyby jej nie było, to wówczas wywołanie funkcji "Console.WriteLine" zostałoby potraktowane jak błąd, gdyż wówczas kompilator nie wie o jaką funkcję nam chodzi. Wtedy poprawnie wyglądałoby to tak:

System.Console.WriteLine();

KOMPILACJA I URUCHAMIANIE NA PARĘ SPOSOBÓW

Macie przepisany ten kod? To teraz zajmiemy się kompilacją, czyli procesem dokonującym tłumaczenia kodu zapisanego w języku wysokiego poziomu (przyjaźniejszego dla człowieka) na kod maszynowy (przyjaźniejszy dla komputera), choć w przypadku języka C# na kod pośredni o czym już wspomniałem. I znowu, to się mocno różni w zależności od środowiska w jakim "siedzicie".

VISUAL STUDIO 2019

W przypadku "Visual Studio", wszystko sprowadza się do jednego kliknięcia myszą. Mając wciąż otwarty ten sam projekt, klikamy na górze przycisk o takiej samej nazwie jaką nosi projekt, z ikonką zielonej strzałki skierowanej w prawo. Tak jest najprościej i najszybciej ujrzeć efekt. To spowoduje jednoczesne skompilowanie "rozwiązania" (tak jest określany projekt w tym IDE) oraz uruchomienie programu. Wyskoczy wówczas okienko do złudzenia przypominające wiersz poleceń, a w nim, treść podanego łańcucha.

Kompilacja i uruchamianie pierwszego programu w języku C# w "Visual Studio 2019"

Przycisk przeznaczony do jednoczesnej kompilacji i uruchomienia aplikacji w "Visual Studio 2019".

VISUAL STUDIO CODE

W "VSCode" wcale nie wygląda to trudniej bowiem wystarczy otworzyć sobie terminal (jeśli zamknęliście poprzedni) za pomocą skrótu "Ctrl + Shift + tylda" albo wybrania opcji "Terminal", "Nowy terminal" i wprowadzić takie oto polecenie:

dotnet run [parametry do "args" oddzielane spacją]

To również jednocześnie skompiluje i uruchomi aplikację wyświetlając łańcuch na strumieniu wyjściowym, którym jest w tym przypadku nasz terminal. Całkiem nieźle jak na pierwszy program w języku C# ;). Dam Wam jeszcze dla ułatwienia pracy polecenie "cls", które wyczyści ekran terminala, gdyby powstał już w nim bałagan (na innych systemach niż Windows może odpowiadać za to inna komenda).

WIERSZ POLECEŃ

Dysponując jedynie wierszem poleceń, tu droga jest najbardziej wyboista. Nie tylko kompilację z uruchamianiem trzeba rozbić na dwie komendy, ale także upewnić się że możemy z tego kompilatora w ogóle skorzystać, bez babrania się w podawanie pełnych ścieżek do niego.

Spróbujcie na początek wpisać polecenie "csc" i zobaczyć efekt. Jeśli pojawią się takie oto wpisy:

Uruchamianie kompilatora "csc" w wierszu poleceń

Zrzut ekranu prawidłowo działającego kompilatora "csc".

wtedy jest kontakt z kompilatorem i możecie przejść do podpunktu z kompilacją. Jeżeli nie, zalecam edycję zmiennej środowiskowej. Jeżeli zainstalowaliście wtyczkę do "VSCode", wtedy możecie jeszcze skorzystać z komendy "dotnet", która ponoć jest przez wielu użytkowników uważana za nowszą metodę. Nie znam szczegółów, więc sugeruję posiłkować się forami.

MODYFIKACJA ZMIENNEJ ŚRODOWISKOWEJ

Z racji tego, że w czasie pisania tego artykułu dysponowałem systemem "Windows 10", pokażę jak to zrobić tutaj. Po przejściu do Menu Start i wpisanie "zmienne środowiskowe", pojawi się jedyna opcja: "Edytuj zmienne środowiskowe systemu". Wybieramy ją. Wyskoczy okienko, w którym klikamy bezpośrednio przycisk u dołu, "Zmienne środowiskowe". W zależności od tego, czy chcecie mieć wykrywanie kompilatora po nazwie tylko dla siebie, czy obowiązujące w całym systemie, wybieracie zmienną "Path" z sekcji "Zmienne użytkownika dla [nazwa użytkownika]", bądź "Zmienne systemowe". Klikacie sobie "Nowy" i wprowadzacie pełną ścieżkę do kompilatora C# o nazwie "csc". Wybierzcie sobie którąś aktualnie zainstalowaną wersję ".NET Framework" albo ".NET Core", które znajdziecie od następującej ścieżki:

C:\Windows\Microsoft.NET\Framework\

Wystarczy wybrać sobie któryś katalog z nazwą wersji np. "v4.0.30319", dodać klucz, zapisać zmiany i uruchomić ponownie "cmd". Po ponownym wprowadzeniu frazy "csc", kompilator powinien zostać wykryty.

Dodawanie zmiennej środowiskowej dla "csc" w Windows 10

Dodawanie zmiennej środowiskowej dla kompilatora "csc".

KOMPILACJA I URUCHAMIANIE

Jeśli polecenie "csc" działa, wystarczy przejść do katalogu z plikiem źródłowym za pomocą polecenia "cd" i podać następującą komendę:

csc [nazwa pliku źródłowego].cs

To jedynie skompiluje kod, o ile nie wykryje się w nim błędów składniowych. Gdy pojawi się plik wykonywalny, po prostu wpisujemy jego nazwę i program zostanie uruchomiony!

Uruchamianie pierwszego programu w języku C# w wierszu poleceń

Uruchamianie programu w wierszu poleceń przy pomocy kompilatora "csc".


Nareszcie koniec. Wielkość artykułu stanowiącego wprowadzenie do zapoznania się jak napisać, skompilować i zarazem uruchomić pierwszy program w języku C# może przerażać, niemniej jednak nie lękajcie się, że cała procedura tak wygląda. Drugie tyle zajęło mi szczegółowe omówienie poszczególnych kroków dla kilku z dostępnych opcji "developmentu". Gdybyśmy skupili się na jednej, ten materiał wyszedłby o wiele chudszy ;). W każdym razie dziękuję za przeczytanie i spróbujcie sobie poćwiczyć to tworzenie projektu i kompilowanie, żeby weszło Wam to w krew.

PODOBNE ARTYKUŁY