Rozpoczynamy następny wątek programowania w języku C#! Sprawdzimy teraz czy tablica w języku C# nie jest Wam obca :). A ostrzegam, to jest taki temat, który musicie mieć w jednym palcu, bez względu na to czy program obsługuje serwer bazy danych, czy tylko zlicza numerki :D!
Tweet |
TABLICA W JĘZYKU C# JEDNYM Z FUNDAMENTÓW SAMODZIELNEGO PROGRAMOWANIA!
Nie sposób zaprzeczyć, że tablica to temat będący jednym z najbardziej podstawowych, jeżeli chcemy, abyśmy "dobiegli do mety" z pisaniem każdego programu o większej ambicji niż wypisywanie tekstu na strumieniu wyjściowym (bez urazy do "witania świata" ;)). Pochodny typ danych zdolny do przechowywania wielu wartości jednego typu. Tak można by to zdefiniować. Oto pierwsza nauka dla tych, którzy jeszcze nie znają tablic. A dla takich osobników mam osobny artykuł tłumaczący bardziej ogólnie do czego to służy.
ZAPIS W KODZIE
Drążmy temat dalej. Tak wygląda przykładowa tablica w języku C# od strony "kodowej" (na razie sama deklaracja):
int[] numbers;
Za przykładowy typ danych podałem "int", ale to może być również każdy inny typ prosty albo klasowy (przechowujący obiekty). Przypominacie sobie wygląd zmiennych? Porównując jedno do drugiego, to w tablicy znajduje się dodatkowo para nawiasów kwadratowych, umieszczana zaraz po typie danych. Definicja wygląda ciut bardziej przerażająco :O:
int[] numbers = new int[liczba argumentów];
Słowo kluczowe "new" ma wiele "twarzy", jednak w tym przypadku oznacza zaalokowanie pamięci dla tablicy. Po nim wprowadzamy ponownie ten sam typ danych i tę samą parę nawiasów kwadratowych, aczkolwiek tym razem wewnątrz nich umieszczamy liczbę całkowitą dodatnią określającą liczbę miejsc na argumenty. Ona MUSI się znaleźć za każdym razem kiedy tworzymy nową tablicę. Charakterystyczną cechą tablic jest to, że raz podany rozmiar nie może ulec zmianie (jedynym amatorskim obejściem byłoby utworzenie nowej tablicy i przeniesienie do niej wszystkich danych). Dlatego tablicę określa się strukturą statyczną. W czasie kompilacji, wielkość musi być zawsze WIADOMA!
Inicjując tablicę w powyższy sposób, wszystkie argumenty przyjmują odpowiednią wartość domyślną. Mamy prawo także od razu zainicjować wartości jakie mają się znaleźć wewnątrz tablicy :). Wtedy definiujemy ją tak:
int[] numbers = new int[4]{1, 2, 4, 8};
albo jeszcze prościej:
int[] numbers = {1, 2, 4, 8};
Wtedy kompilator "weźmie sprawy w swoje ręce" i sam wydedukuje ile miejsc pamięci ma zostać przyznanych dla tablicy ;).
NUMERACJA ARGUMENTÓW
Nie wyobrażam sobie, żeby tablica w języku C# nie została omówiona od strony prawidłowej identyfikacji indeksów. Indeks to numer określający liczbę porządkową pod którym znajduje się dany argument. Najważniejszą dla Was informacją jest zapamiętanie, że jest on liczony od zera! W tym języku jest on liczony od zera, choć znane są języki programowania, które nie trzymają się tej reguły np. Lua. Zatem, jeśli mamy tablicę pięcioelementową, to indeksy będą w następującej postaci:
indeksy = {0, 1, 2, 3, 4}
Wynika z tego, że indeksy mieszczą się w zakresie od zera do N - 1, gdzie N oznacza liczbę elementów / argumentów (oba terminy są używane zamiennie). Każda próba skorzystania z elementu o indeksie przeczącemu temu przedziałowi (często ludzie nazywają to też "wyjściem poza tablicę"), kończy się zgłoszeniem przez program wyjątku.
ODWOŁYWANIE SIĘ DO ARGUMENTÓW TABLICY
A teraz pokażę Wam jak się odnosić do tych argumentów. Załóżmy, że kierujemy się ciągle tą samą tablicą jaką podałem za przykład na samym początku tego artykułu:
int[] numbers = {1, 2, 4, 8};
To wówczas, możemy się odnieść do którejś z tych liczb za pomocą etykiety tablicy, nawiasów kwadratowych i umieszczonego w środku nich indeksu:
Console.WriteLine("Pierwszą liczbą tablicy z liczbami jest {0}.", numbers[0]);
Cały czas przypominam o numeracji rozpoczynającej się od zera! Każda tablica w języku C# indeksowana jest od zera, zawsze! Jak widać, to nie jest żadna najtrudniejsza składnia do zapamiętania. I tak samo możemy się odnieść do każdego z argumentów, o ile nie przekraczamy przedziału wyznaczonego przez ich liczbę:
numbers[5] // błąd z powodu odwołania się do szóstego argumentu, wyjście poza tablicę!
Gdy to uczynimy, "witamy się" z kłopotami jakie spadną na nasz program, a jego działanie zostanie przerwane przez zgłoszenie wyjątku jakim będzie "ArrayIndexOutOfRange" (więcej tutaj). Chyba nie chcecie problemów, prawda :)?
ZAPAMIĘTAJ WŁAŚCIWOŚĆ "LENGTH"
Dosłownie ostatni akapit o właściwości, która Wam się cholernie przyda podczas programowania pętli (zwykle "for", ale niekoniecznie). Właściwość "Length" (pisana wielką literą) zwraca liczbę elementów w tablicy. Za każdym razem, kiedy chcecie uzależnić działanie pętli od liczby argumentów tablicy, wstawiajcie w warunku sprawdzenie czy wartość zmiennej iteracyjnej jest nadal mniejsza od wartości właściwości "Length"! Właściwości to temat na osobny materiał.
Tablica pełni funkcję "przechowalni" wielu wartości tego samego typu. Jest to struktura statyczna, co oznacza że rozmiar zawsze musi być ustalony z góry, podczas pisania kodu!
I to tyle. Tablica w języku C# to wiedza elementarna, żeby móc w ogóle ukończyć pisanie jakiegoś nieco bardziej skomplikowanego programu. Na przykład, gdybyście chcieli napisać grę typu "quiz", to jak przechowacie w wygodny sposób wiele pytań w jednym miejscu, bez znajomości tablicy :P?