Piszemy pierwszy program w C#. Zamiast „hello worldów” sprawdzimy sobie pętlę do-while, funkcję TryParse i zmienne „out” żeby przychodząc z języków takich jak PHP i JavaScript czy Python w ogóle „poczuć” czy nam ten C# pasuje (hello-worldy pisze się jednakowo we wszystkich językach).

Potrzebne Visual Studio albo kompilator online. Tworzymy pustą aplikację konsolową, następnie piszemy nasz program:

using System;

namespace ConsoleApp10
{
    class Program
    {
        static void Main(string[] args)
        {
            string ipt;
            bool is_number;
            
            do
            {
                Console.WriteLine("Enter a number: ");
                ipt = Console.ReadLine();
                is_number = int.TryParse(ipt, out int number);
                if (is_number)
                {
                    Console.WriteLine("Your number is: ");
                    Console.WriteLine(number);
                }
            } while (is_number == false);
            
        }
    }
}

Pierwsza rzecz, która się rzuca w oczy – namespace. W PHP używane, choć opcjonalne. Na razie okej.

Druga rzecz – main jest klasą. Jak w Javie. Widziałem kiedyś nawet tutorial do C#, który w jednym odcinku, chyba dla żartu, podmienił swoje tło z hello-worldem w C# na takiego w Javie.

Trzecia rzecz:

 static void Main(string[] args)

Co to metoda statyczna powinniśmy wiedzieć, void zaś oznacza, że nic nie zwracamy, żadnego -1. Ciekawy jest jednak argument. Tablica stringów args.

Cóż, to są argumenty z terminala. Najlepiej zrozumieć to na prostym przykładzie. Skrypt Pythona, który każdy zrozumie:

import sys

print(sys.argv[0])
if(len(sys.argv) >= 2):
    print(sys.argv[1])

Teraz odpalamy nasz skrypt:

python ./argsargs.py
python ./argsargs.py blablabla

I to są właśnie takie argumenty, które można przekazywać. Dalej mamy utworzenie zmiennych o określonych typach (bez przypisania wartości) oraz pętlę do-while:

string ipt;
bool is_number;
do
{
//najpierw wykona, potem sprawdzi warunek                
} while (is_number == false);

Pętla do while najpierw wykona sekwencję do, potem sprawdzi warunek. Tak działa, zatem po pierwszym wykonaniu bloku do powinniśmy już poinformować program, czy zmienna typu bool is_number jest prawdziwa, czy fałszywa:

string ipt;
bool is_number;
do
{
 Console.WriteLine("Enter a number: ");
 ipt = Console.ReadLine();
 is_number = int.TryParse(ipt, out int number);
    if (is_number)
      {
        Console.WriteLine("Your number is: ");
        Console.WriteLine(number);
       }
} while (is_number == false);

Funkcja TryParse próbuje parsować przekazaną jej zmienną ipt ze stringa na typ int. Zwraca prawdę lub fałsz. Zwraca też „out variable” typu int o nazwie number, a zatem zmienna number zostanie utworzona z wartością ipt zmienioną na int, jeżeli operacja się powiedzie.

Możemy jeszcze zabawić się w interpolację stringów:

namespace ConsoleApp10
{
    class Program
    {
        static void Main(string[] args)
        {
            string ipt;
            bool is_number;
            do
            {
                Console.WriteLine("Enter a number: ");
                ipt = Console.ReadLine();
                is_number = int.TryParse(ipt, out int number);
                if (is_number)
                {
                    Console.WriteLine($"Your number is: {number} ");
                }
            } while (is_number == false);
        }
    }
}

Tyle tytułem naszego hello-worlda w C#. Teraz powinniśmy mieć jako taki ogląd jak zapatrujemy się na tego rodzaju języki.