Struktura to zagregowanie danych o różnych typach, powiązanych ze sobą w logiczny sposób. Np. jeżeli tworzymy strukturę Samolot, będzie ona mogła zawierać informacje o producencie, pojemności, miejscach dla pasażerów itd. – nie jesteśmy ograniczeni do jednego typu danych, tak jak w wypadku tablic.

Jak wygląda struktura?

Każda ze składowych części struktury nazywana jest polempole strukturypolem. Przykładową strukturę możemy przedstawić za pomocą następującego pseudokodu:

Linia 1. struktura Uczeń. Linia 2. otwórz nawias klamrowy. Linia 3. Imię dwukropek tekst. Linia 4. Nazwisko dwukropek tekst. Linia 5. Średnia dwukropek liczba rzeczywista. Linia 6. RokUrodzenia dwukropek liczba naturalna. Linia 7. zamknij nawias klamrowy.

Pola takiej struktury możemy traktować jako zmienne, przy czym są one zebrane w jednej strukturze. Oznacza to, że możemy ich wartości zarówno odczytywać, jak i modyfikować – tak jak wartości zwykłych zmiennych. Sama struktura również może być traktowana jak każda inna zmienna, zatem możemy umieścić ją w liście, tablicy itp.

Dokładny sposób odwołania do pól struktury zależy od języka programowania, jednak dla uproszczenia w pseudokodzie zastosujemy zapis struktura.pole.

Zacznijmy od ucznia:

Linia 1. PierwszyUczeń dwukropek Uczeń.

Teraz można ustawić poszczególne pola struktury:

Linia 1. PierwszyUczeń kropka Imię ← cudzysłów Jan cudzysłów. Linia 2. PierwszyUczeń kropka Nazwisko ← cudzysłów Kowalski cudzysłów. Linia 3. PierwszyUczeń kropka Średnia ← 4 kropka 50. Linia 4. PierwszyUczeń kropka RokUrodzenia ← 2000.

Bardzo ważnym aspektem struktur jest fakt, że są one wielokrotnego użytku. Możemy np. stworzyć drugiego ucznia i nadać mu inne wartości pól struktury, bez utraty danych pierwszego z uczniów. Przeanalizujmy zapis w pseudokodzie:

Linia 1. PierwszyUczeń dwukropek Uczeń. Linia 2. PierwszyUczeń kropka Imię ← cudzysłów Jan cudzysłów. Linia 3. PierwszyUczeń kropka Nazwisko ← cudzysłów Kowalski cudzysłów. Linia 4. PierwszyUczeń kropka Średnia ← 4 kropka 50. Linia 5. PierwszyUczeń kropka RokUrodzenia ← 2000. Linia 7. DrugiUczeń dwukropek Uczeń. Linia 8. DrugiUczeń kropka Imię ← cudzysłów Adam cudzysłów. Linia 9. DrugiUczeń kropka Nazwisko ← cudzysłów Zając cudzysłów. Linia 10. DrugiUczeń kropka Średnia ← 5 kropka 00. Linia 11. DrugiUczeń kropka RokUrodzenia ← 2002. Linia 13. wypisz PierwszyUczeń kropka Imię plus spacja plus PierwszyUczeń kropka Nazwisko. Linia 14. wypisz DrugiUczeń kropka Imię plus spacja plus DrugiUczeń kropka Nazwisko.

Dwie utworzone przez nas struktury opisują zupełnie innych uczniów, zatem wynikiem działania programu będzie:

Linia 1. Jan Kowalski. Linia 2. Adam Zając.

Zastosowanie struktur

Struktury są w programowaniu bardzo potężnym narzędziem i nie sposób wypisać wszystkich ich zastosowań.

Razem z ich bardziej rozbudowanymi wersjami, czyli klasami, struktury stanowią fundament niemal każdej większej aplikacji. Mogą służyć do przechowywania m.in.:

  • elementów interfejsu użytkownika, takich jak przyciski, napisy czy obrazy; takie struktury zawierają np. pozycję na ekranie, kolor, ścieżki do plików graficznych;

  • danych o użytkownikach – przykładowe pola to loginy, imiona, adresy IP, hasła czy poziomy uprawnień;

  • danych o plikach – pola mogą zawierać treść, daty modyfikacji, właścicieli, nazwy czy rozszerzenia;

  • bohaterów w grach komputerowych – tutaj pola mogą służyć do przechowywania postaci, tekstur, modeli czy bardziej zaawansowanych danych, takich jak sposób zachowania (który sam także może być strukturą).

Ważne!

Struktury mogą zawierać się w innych strukturach, jednak ich definicja będzie znacznie różniła się w poszczególnych językach. Przykładowe rozwiązanie, które jest niezależne od języka programowania, przedstawia następujący pseudokod:

Linia 1. struktura Kolor. Linia 2. otwórz nawias klamrowy. Linia 3. Czerwony dwukropek liczba całkowita. Linia 4. Zielony dwukropek liczba całkowita. Linia 5. Niebieski dwukropek liczba całkowita. Linia 6. zamknij nawias klamrowy. Linia 8. struktura KoloryTrójkąta. Linia 9. otwórz nawias klamrowy. Linia 10. Wierzchołek1 dwukropek Kolor. Linia 11. Wierzchołek2 dwukropek Kolor. Linia 12. Wierzchołek3 dwukropek Kolor. Linia 13. zamknij nawias klamrowy.

Stworzyliśmy prostą strukturę przechowującą kolory trzech wierzchołków trójkąta. Jeżeli chcemy odwołać się do któregoś elementu, możemy użyć tej samej składni, co dla zwykłych struktur:

Linia 1. trójkąt dwukropek KoloryTrójkąta. Linia 2. trójkąt kropka Wierzchołek1 kropka Czerwony ← 255. Linia 3. trójkąt kropka Wierzchołek1 kropka Zielony ← 255. Linia 4. trójkąt kropka Wierzchołek1 kropka Niebieski ← 0. Linia 6. wypisz trójkąt kropka Wierzchołek1.

Dlaczego warto używać struktur?

Oczywiście, program napisany bez użycia struktur może działać podobnie jak ten, w którym je wykorzystano. Istnieje jednak kilka powodów, dla których warto wybierać struktury.

Pierwszym z nich jest fakt, że struktury poprawiają czytelność kodu. Łatwiejsze jest operowanie na liście np. trzystu uczniów, niż na czterech różnych listach z imionami, nazwiskami, datami urodzenia i uzyskanymi średnimi ocen.

Drugim powodem jest wydajność. Użycie jednej listy uczniów zwiększy nie tylko czytelność kodu, ale również zmniejszy obciążenie komputera. Bardziej wydajne jest przechowywanie w pamięci i operowanie tylko na jednej liście, niż na kilku z nich.

Trzecim powodem jest uniknięcie redundancjiredundancjaredundancji. Jest to problematyczne zjawisko, kiedy „kopiujemy kod” – innymi słowy, ten sam kod z minimalnymi zmianami występuje w kilku różnych miejscach programu. Możemy temu zapobiec, grupując powtarzające się zmienne do struktur. Dla przykładu, jeżeli piszemy aplikację graficzną, bardzo dobrym pomysłem byłoby stworzenie struktury dla koloru. Będzie to znacznie prostsze, niż tworzenie – za każdym razem – trzech zmiennych przechowujących składowe koloru czerwonego, zielonego i niebieskiego.

Słownik

pole struktury
pole struktury

jedna składowa zmienna w strukturze; element struktury

redundancja
redundancja

niepożądane zjawisko, w którym ten sam lub bardzo podobny kod powtarza się w kilku miejscach, podczas gdy mógłby zostać zastąpiony strukturą, funkcją lub pętlą