Koncepcje programowania/Tablice

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Znasz już koncepcje zmiennej, czyli pojedynczymi szufladkami na dane, wiesz już że zmienna może przechowywać jakąś wartość. Podstawowym jej ograniczeniem jest oczywiście to, że w jednej zmiennej możesz przechować tylko jedną wartość, co może być problematyczne. Na przykład, pisząc program inżynierski, dokonujący obliczeń na podstawie 300 pomiarów, będziemy ni z tego ni z owego zmuszeni do stworzenia 300 zmiennych. Sama taka deklaracja zajmowałaby kilkadziesiąt linii w kodzie nie wspominając o tym jak dużo zajęłoby to nam czasu. Na pewno byłoby to bardzo nieefektywne. Potrzebny jest więc mechanizm, który pozwoliłby nam w jednej zmiennej, przechować wiele różnych wartości. I większość języków programowania taki mechanizm posiada, nazywamy je tablicami. W zależności od języka nazywa się je różne, w Pythonie są to listy w JavaScript kolekcje ale ostatecznie cała ich koncepcja zasadniczo się nie zmienia więc będziemy tutaj używać najpopularniejszego terminu czyli tablicy by uniknąć chaosu syntaktycznego.

Tablica to nic innego jak specjalna odmiana zmiennej, która może przechowywać wiele różnych wartości, ustawione w szereg. W pamięci takie zmienne będą zawsze utworzone jedna za drugą, pod kolejnymi adresami w pamięci, zależnie od tego ile zajmuje taka pojedyncza zmienna. O adresach pamięci opowiemy bardziej szczegółowo w kolejnym rozdziale o wskaźnikach, na tym etapie wystarczy żebyś zapamiętał że tablice można sobie wyobrazić i porównać do sytuacji gdy ktoś ma dostęp do szafki dla klientów i każda z nich zawiera własną zawartość.

Przykład zwykłej zmiennej

x = 1 # Tylko jedna wartość

Przykład tablicy:

x = [1, 2.5, "abc", true] #Cztery wartości

To również jest zmienna o nazwie x ale mamy tutaj nawiasy prostokątne i w tym nawiasie, mamy różne wartości, oddzielone przy pomocy przecinka. W większości języków programowania, nawiasy prostokątne są charakterystycznym elementem tablic w praktycznie dowolnym języku programowania i języków których używamy, czyli Python i JavaScript, nie są tu wyjątkiem.

Sercem tablic jest tak zwany indeks tablicy. Każda wartość w tablicy ma swój indeks, unikalny numer, m.in. po to by móc się do tych wartości odwołać. Jeśli masz tablicę o nazwie x i ona zawiera np. 100 pozycji, potrzebny jest nam mechanizm, który pozwoli się do nich dostać.

70640A "test" 91.871 true 22652 "xyz" 56045
0 1 2 3 4 5

Tak mogłaby wyglądać przykładowa tablica, która posiada 6 różnych wartości. Pod wartościami znajdują się cyfry, to właśnie ten indeks. Zauważ że w zdecydowanej większości wypadków, numeracja tego indeksu zaczyna się od zera, nie od jedynki.

Jak tworzymy tablicę?

myArray = []; #Tworzymy pustą tablicę
myArray[0] = 32885 #dodajey wartość "35885" na pierwszej pozycji (indeks 0)
myArray[1] = "test" #dodajemy wartość "test" na drugiej pozycji (indeks 1)

Właściwości oraz metody[edytuj]

Tablice mogą posiadać właściwości i metody. Np. jedną z takich właściwości może być długość tablicy, czyli to, z ilu elementów składa się tablica:

Array = [1,2,3,4,'Python']
len(Array)

Stworzyliśmy tablicę składającą się z 5 elementów. Potem mamy słowo kluczowe len, nawias, nazwa tablicy. Właściwości są o tyle charakterystyczne że każdą z nich musimy wywołać w ten sposób, w tym wypadku sprawdzamy, jaka jest wartość właściwości, długości dla naszej tablicy Array.

Gdybyśmy ten skrypt uruchomili w Pythonie, oczywiście wyrzuci wartość 5, bo mamy 5 elementów w tablicy, pomimo faktu iż elementy w tablicy zaczynają się od zera, to python licząc elementy, będzie liczył je od 1.

Metody przypominają funkcje, ale używamy ich w nieco innych sposób, obiektowy o czym będzie w kolejnych rozdziałach podręcznika.

przykładowe metody:

Array = [0,3,2,1,5]
print(Array)
Array.sort()
print(Array)
Array.reverse()
print(Array)

Pierwszą metodą jest Array.sort() zauważ że wpisuję nazwę tablicy, kropkę i sort. Ponieważ metoda jest funkcją, to w przeciwieństwie do właściwości, musimy użyć nawiasu na końcu, bo jak zapewne pamiętasz z poprzednich rozdziałów, charakterystyczną cechą funkcji są jej nawiasy. Sort jak sama nazwa sugeruje, posortuje nam wartości, w tym wypadku wartości liczbowe najmniejszego do największego, ale można też sortować inne typy danych na przykład tekst, czyli alfabetycznie i tak dalej. Taka metoda to specjalna funkcja którą po kropce wywołujemy na rzecz naszej tablicy bo nasza tablica jest obiektem (tak jak wszystko w języku Python).

Inny przykład metody to reverse, czyli odwróć. Odwróci nam kolejność wszystkich elementów w naszej tablicy, czyli ten który jest na pozycji pierwszej (0) stałby się elementem ostatnim oraz analogicznie pozostałe.

Jednakże, uruchamiając powyższy kod, elementy nie zostaną odwrócone w ten sposób: [5, 1, 2, 3, 0] tylko w ten: [5, 3, 2, 1, 0]. Dlaczego? Ponieważ wcześniej wykonali metodę sortowania a ponieważ każdy program jest odczytywany przez interpreter od lewej do prawej, od góry do dołu, kolejność elementów w tablicy zostanie zmieniona, nadpisana przez poprzednią metodę.

Przetwarzanie tablic[edytuj]

Często może zdarzyć się sytuacja, że będziesz musiał dokonać identycznych operacji na każdym elemencie w tablicy - najczęściej się używa do tego pętli.

i = 0 #Index rozpoczynamy od zera
while (i < Array.length() # Kończymy kiedy index = ilość elementów -1)
	print(Array[i]) #Indeks pozwala uzyskać dostęp do kolejnych elementów
	i++ #Inkrementacja indeksu

Typ danych w tablicy[edytuj]

Przypominam, że istnieje wiele różnych języków programowania, tablice w różnych językach mogą się różnie zachowywać, mogą mieć różne właściwości. My pracujemy głównie w Python ale jak być może zauważyłeś, używam przykładów z wielu różnych języków by móc jak najszerzej poruszyć każdy aspekt programowania, żeby podręcznik był jak najbardziej uniwersalny, żebyś posiadał wiedzę z szerokich perspektyw.

Odpowiedni typ danych w tablicy. W zależności od języka programowania, można mieszać wartości różnego typu w tablicy. Takie coś jest możliwe w JavaScript, PHP i tym podobne, ale istnieją także języki, w których musisz ściśle z góry określić jaki będzie typ wartości w tablicy - wtedy do jednej tablicy będzie można stosować tylko wartości jednego typu np. zawiera tylko liczby i nie można wstawić żadnej innej.

Zmienna długość tabliy. Na przykład mamy tablicę która posiada początkowo 3 elementy, potem do tej samej tablicy dodajemy 3 kolejne elementy po prawej stronie. Zakładam że najpierw utworzono tablicę a później w jakiś sposób dynamicznie została ona rozszerzona o kolejne elementy w trakcie działania programu. Takie rozwiązanie jest możliwe zarówno w Python jak i JavaScript, ale istnieją też języki w których tablica ma z góry określoną długość, tzw. tablica o stałej długości. Jeśli ma tylko 6 elementów to będzie miała tylko te 6 elementów, nigdy więcej. Jeśli będziesz potrzebować więcej wartości w tablicy, będziesz musiał stworzyć nową tablicę bądź w inny sposób ją przetworzyć.

Własny klucz tablicy. Co to jest klucz? To jest indeks, którym się już posługiwali, domyślnie jest to automatyczna numeracja rosnąca od zera. To często spotykane w wielu językach ale istnieją także takie języki, które mogą oferować tablice w których możliwa jest zmiana domyślnego indeksu na swój własny. Wyobraź sobie że w tablicy przechowujesz nazwy krajów. Zamiast stosować automatyczny, numerowany indeks, można samemu określić wartość klucza dla każdej wartości w naszej tablicy, na przykład na dwuliterowe kody krajów. I taką tablice, nazwalibyśmy tablicą asocjacyjną. Takie coś jest możliwe w języku Python, który nazywa tą funkcję słownikiem. W pewnych sytuacjach bywa przydatne, jak ww. kody krajów, są w tym wypadku lepsze bo numery w tym kontekście nic nie mówią, natomiast kod kraju jednoznacznie określa wartość która do danego klucza została przypisana.