Typ danych

Klasyfikacja określająca, jaki rodzaj wartości może przechowywać zmienna i jakie operacje można na niej wykonać.

Typ danych definiuje naturę danych, które mogą być przechowywane w zmiennej, oraz operacje dozwolone na tych danych. Typy zapewniają poprawną obsługę danych.

Typy proste:
- Całkowity (Integer): Liczby całkowite
- Zmiennoprzecinkowy (Float): Liczby dziesiętne
- Logiczny (Boolean): prawda/fałsz
- Znakowy (Char): Pojedyncza litera/symbol
- Łańcuchowy (String): Sekwencja znaków

Typy złożone:
- Tablica (Array): Kolekcja elementów tego samego typu
- Obiekt: Struktura zdefiniowana przez użytkownika
- Struktura (Struct): Grupa nazwanych pól

Systemy typów:
- Statyczne typowanie: Sprawdzane podczas kompilacji (Java, C++)
- Dynamiczne typowanie: Sprawdzane podczas wykonywania (Python, JS)
- Silne typowanie: Ścisłe reguły typów
- Słabe typowanie: Automatyczna konwersja

        graph LR
  Center["Typ danych"]:::main
  Rel_boolean["boolean"]:::related -.-> Center
  click Rel_boolean "/terms/boolean"
  Rel_data_modeling["data-modeling"]:::related -.-> Center
  click Rel_data_modeling "/terms/data-modeling"
  Rel_data_structure["data-structure"]:::related -.-> Center
  click Rel_data_structure "/terms/data-structure"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Wyjaśnij jak 5-latkowi

Typ danych to jak różne pojemniki: skarbonka trzyma monety (liczby), półka trzyma książki (tekst), a sygnalizacja świetlna pokazuje czerwone/zielone ([boolean](/pl/terms/boolean)). Każdy pojemnik jest stworzony do swojej własnej rzeczy!

🤓 Expert Deep Dive

Inferencja typów Hindley-Milner umożliwia statyczne typowanie bez adnotacji. Algebraiczne typy danych (sumy/iloczyny) umożliwiają ekspresyjne modelowanie. Typy zależne (Idris) kodują ograniczenia w typach. Typowanie stopniowe (TypeScript) łączy statyczne i dynamiczne. Wymazywanie typów (Type erasure) usuwa typy w czasie wykonywania.

📚 Źródła