Categories
Ogólne

C# – przedsionek

Wpis [part not set] z 8 w serii C# - podstawy

Jesteś wciąż ze mną? Udało mi się wzbudzić Twoją ciekawość? Ok, to lecimy dalej 🙂

Chcę żebyś pokonał pierwsze demony, pierwsze wewnętrzne blokady, które szepczą Ci: “nie nadaję się”, “ja? programista? lol!”, “dobra, dobra, piątkowa wysyłka sama się nie zrobi”.

W tym celu napiszemy Twój pierwszy program … w przeglądarce. Skorzystamy z darmowego kompilatora online .NET Fiddle.

Chcemy napisać program, który będzie obliczał moment bezwładności prostokąta. Podstawy wytrzymałości materiałów, czyli (b*h^3)/12.

Przejdź do Fiddle i zastąp domyślną zawartość edytora poniższym kodem:

using System;
                    
public class Program
{
    public static void Main()
    {
        double b = 30;
        double h = 60;
        
        double momentOfInertia = (b*Math.Pow(h,3))/12;
        
        string message = string.Format("Moment bezwładności wynosi {0:N2}", momentOfInertia);
        Console.WriteLine(message);
    }
}

Po wybraniu przycisku Run zobaczysz w dolnej części rezultat działania naszego programu, czyli komunikat o wartości obliczonego momentu bezwładności prostokąta.

“Eee, takie rzeczy to ja mogę na moim Casio zrobić w trzy sekundy, co Ty w ogóle pokazujesz?”

Przyznaję, powyższy kod nie należy do skomplikowanych, ale stanowi bazę historii, którą planuje opowiedzieć w trakcie kolejnych postów, więc proszę – bądź wyrozumiały 🙂

C# jest językiem silnie typowanym, co możemy zaobserować w linijkach 7, 8. Zmienne, które tworzymy muszą posiadać określony typ, czyli rodzaj danych, która będzie się kryła pod daną nazwą. W powyższym przypadku zdecydowałem się na wykorzystanie typu double, który służy od deklaracji liczb zmiennoprzecinkowych.

Dobór nazw zmiennych jest wyborem programisty, to on ma być w stanie zrozumieć co dzieje się w danym miejscu kodu po dłuższej przerwie. Dlatego użyłem nazw b oraz h – są one czytelne dla inżynierów znających rozpatrywany problem. Gdybym zdecydował się na nazwy zmienna1 oraz zmienna2 to po tygodniu nie miałbym pojęcia z czym kojarzyć te pojęcia.

Zwróć uwagę na linijkę 10 i zapis momentOfInertia. Zapisanie frazy w sposób ciągły, zaczynając od małej litery a następnie stosując wielką literę dla kolejnych słów to przykład notacji ‘camelCase’, która jest podstawą w C# oraz Javie. Będziemy jej używać do nazywania zmiennych o charakterze lokalnym, które żyją wyłącznie w ramach danej metody.

Hej, czy ja powiedziałem ‘metody’? Co to ta ‘metoda’?

O metodach pomyśl jak o funkcjach, czyli zamkniętych zbiorach procedur, które coś robią. Słowo coś jest tutaj idealne – metoda może, ale nie musi zwracać wartości. Spójrz na linijkę 5’tą. Widzisz tam zbiór nic nie mówiących słów: public static void Main(), które powinieneś zinterpretować jako:

  • public – ta metoda jest jawna, publiczna, widoczna dla innych aplikacji,
  • static – metoda jest statyczna, można jej użyć ‘z palca’, bez nadmiernej pracy przy tworzeniu obiektów (o nich w kolejnym poście),
  • void – metoda zwraca czarną otchłań, w której pogrążył się (tymczasowo) Gandalf; ta metoda tylko ‘coś’ robi, nie zwraca żadnej wartości,
  • Main() – metoda nazywa się Main

Zastanawiasz się pewnie teraz jak stworzyć metodę, która zwróci wartość. Właśnie taki jest mój plan, o spójrz na ten listing:

using System;
                    
public class Program
{
    public static void Main()
    {
		double momentOfInertia = GetMomentOfInertia();
        
        string message = string.Format("Moment bezwładności wynosi {0:N2}", momentOfInertia);
        Console.WriteLine(message);
    }
	
	public static double GetMomentOfInertia()
	{
        double b = 30;
        double h = 60;
        
        double momentOfInertia = (b*Math.Pow(h,3))/12;
		
		return momentOfInertia;
	}
}

Przeorganizowałem nasz program wydzielając z niego nową metodą – GetMomentOfInertia(). Ta metoda zwraca liczbę zmiennoprzecinkową typu double, co jest zdefiniowane w dwóch miejscach:

  • deklaracja metody składa się z public static double GetMomentOfInertia() i to właśnie pogrubiona cześć mówi kompilatorowi czego należy się spodziewać po tej metodzie,
  • w linii 20 użyłem słowa return kończąc działanie metody zwrotem wyznaczonej wartości.

Patrzę na ten przykład i dochodzę do wniosku, że fajnie, fajnie, mamy program, który za każdym razem zwraca tę samą wartość. Spójrz na linijki 15 i 16 – znajduje się ‘sztywne’ przypisanie wartości do zmiennych b i h. Przyznaję, mało użyteczny sposób.

Gdy pomyślisz o metodach jak o funkcjach matematycznych to szybciej zrozumiesz koncept argumentów metod, czyli wartości wejściowych, które ustawiają początkowe warunki dla wykonywanego kodu. Dobrze by było, gdyby metoda GetMomentOfInertia była gotowa przyjąć dwa argumenty opisujące nasz problem. Tylko jak to zrobić?

using System;
                    
public class Program
{
    public static void Main()
    {
		double momentOfInertia1 = GetMomentOfInertia(30, 60);
		double momentOfInertia2 = GetMomentOfInertia(20, 50);
        
        string message1 = string.Format("Moment bezwładności 1 wynosi {0:N2}", momentOfInertia1);
        Console.WriteLine(message1);
        string message2 = string.Format("Moment bezwładności 2 wynosi {0:N2}", momentOfInertia2);
        Console.WriteLine(message2);
    }
	
	public static double GetMomentOfInertia(double b, double h)
	{
        double momentOfInertia = (b*Math.Pow(h,3))/12;
		
		return momentOfInertia;
	}
}

Analizę tego przykładu zacznij od linijki 16’tej – w deklaracji metody, wewnątrz nawiasów pojawiła się informacja o oczekiwanych argumentach, czyli: (double b, double h). Dzięki zmianie sztywnych wartości z wnętrza metody na rzecz jej argumentów możemy zacząć wykorzystywać ją wielokrotnie, dla róznych wartości początkowych. Dlatego zawartość naszej początkowej metody Main() została wzbogacona o wyznaczenie wartości drugiego momentu bezwładności.

—————

I teraz proszę, odpowiedz sobie na pytanie, czy powyższe wywody przekraczają zdolności poznawcze inżyniera budownictwa po 5-letnich studiach w trakcie których poznawał tensory, całki potrójne, kombinatorykę wg eurokodów, półkę plastyczną, itd. No właśnie, dlatego proszę Cię, jeśli dalej myślisz ‘programowanie jest dla mnie za trudne’ to spójrz na swoją drogę, na to ile już potrafisz, co przeszedłeś. Ja nie mam wątpliwości, że ‘ogarniesz’ 😉

Jeżeli czujesz niedosyt – to wspaniale, dopiero się rozkręcamy!

Series Navigation

Leave a Reply

Your email address will not be published. Required fields are marked *