Document Details

WorthwhilePanther

Uploaded by WorthwhilePanther

VOŠ a SPŠ, Jičín

Tags

datové typy programování strukturované datové typy primitivní datové typy

Summary

This document  discusses simple and structured data types, their classification, and properties. It also examines data types in various programming languages. It emphasizes the distinctions between primitive and object data types.

Full Transcript

Datové typy jednoduché, strukturované – kolekce Typový systém, dělení datových typů, vlastnosti, deklarace v různých programovacích jazycích, druhy kolekcí, důležité vlastnosti, kolekce v různých programovacích jazycích. Datové typy • V předešlé prezentaci (maturitní otázka 1) bylo uvedeno vymezen...

Datové typy jednoduché, strukturované – kolekce Typový systém, dělení datových typů, vlastnosti, deklarace v různých programovacích jazycích, druhy kolekcí, důležité vlastnosti, kolekce v různých programovacích jazycích. Datové typy • V předešlé prezentaci (maturitní otázka 1) bylo uvedeno vymezení datových typů. Pochopil jsem, že datových typů může být více. Dají se nějak datové typy rozdělit podle určitých kritérií? – Ano, možností je více. Podle staršího rozdělení můžeme datové typy rozdělit na jednoduché a strukturované. – Rudolf Pecinovský uvádí (v souvislosti s programovacím jazykem Java) rozdělení datových typů na primitivní a objektové. – Jiní autoři uvádějí ještě jiné rozdělení datových typů, a to na hodnotové a referenční. – V zásadě se jedná pouze o odlišnou terminologii a záleží na vás, jaké rozdělení budete uvádět. – Někdy to dané rozdělení může být uváděno právě v souvislosti s programovacím jazykem. Datové typy – pokračování (1) • Níže ještě uvádím shrnutí možného rozdělení datových typů podle různých přístupů, vždy ve sloupci je uvedeno stejné dělení, tj. starší, novější: Datové typy např. int, double, char… Datové typy např. array, string… Jednoduché datové typy Strukturované datové typy Primitivní datové typy Objektové datové typy Hodnotové datové typy Referenční datové typy Datové typy – pokračování (2) • Dobře, řekněme, že datové typy budu rozdělovat na primitivní datové typy a objektové datové typy. Jaký je mezi nimi rozdíl? – Primitivní datové typy v programovacím jazyku C# jsou typy, které jsou v programovacím jazyku vestavěny (zabudovány). – Tyto datové typy obsahují jednoduché hodnoty (typicky jednu hodnotu) jako je např. jeden znak, jedno desetinné číslo, logická hodnota apod. • Jaké jsou tedy jejich výhody? – Zabírají méně paměti než objektové datové typy. – Práce s nimi je daleko rychlejší než s objektovými datovými typy. Datové typy – pokračování (3) • A jak je to s objektovými typy? – Jak asi můžeme vyvodit, objektové datové typy jsou složitější (obsahují např. členské proměnné) než primitivní datové typy. – Tyto datové typy nejsou přímo zabudovány v programovacím jazyku. – Obvykle je definuje programátor a jsou odvozeny od objektů, respektive od tříd, tj. tento datový typ definuje třída. – S objektovými typy se pracuje odlišným způsobem než s primitivními datovými typy. – S objektovým datovým typem se musí pracovat pomocí odkazu na příslušný objekt [1], [2]. Datové typy – pokračování (4) • Když jsou primitivní a objektové datové typy tak odlišné, jak se vlastně ukládají do paměti? – Jak uvádí např. [3], proměnné lze ukládat do tzv. zásobníku nebo do tzv. haldy. • Která z uvedených pamětí je rychlejší? – Rychlejší je zásobník než halda, ale naproti tomu zásobník má mnohem menší kapacitu než halda [2]. – Do zásobníku se obvykle ukládají jednoduché (lokální) proměnné. S lokálními proměnnými se setkáme u podprogramů, ty se automaticky zruší, když se s podprogramem již dále nepracuje [3]. – Do haldy se ukládají objektové datové typy. Jak uvádí [3], jsou zde všechny dynamické objekty. Datové typy – pokračování (5) • Ale když se s objektovým datovým typem pracuje nepřímo, tj. přes odkaz, tak do haldy mohu přistupovat přímo k danému objektu? – Samozřejmě, že do haldy přímo k objektu přistupovat nemohu. • Takže jestli to dobře chápu, tak objektový datový typ se uloží jak do haldy, tak i do zásobníku? – Ano, odkaz na objekt se překvapivě uloží do zásobníku. – Skutečný objekt se pak nachází na haldě [2]. • Mohl bys mi prosím uvést nějaké názorné shrnutí? – Ano, na dalším snímku jsou názorné obrázky způsobu uložení primitivního a objektového datového typu. Datové typy – pokračování (6) • [2] Primitivní datový typ • [2] Objektový datový typ (vlevo odkaz na instanci, vpravo instance (objekt)) Příklady datových typů A jaké konkrétní datové typy patří do primitivních datových typů a jaké do objektových datových typů v programovacím jazyku C#? • Primitivní datové typy – – – – – Celá čísla (int, long) Desetinná čísla (double, float) Znaky (char) ), např. ‘a‘, ‘b‘ Logický datový typ (bool), např. tru a false Celá a desetinná čísla se mohou lišit podle velikosti nebo jestli jsou definovány se znaménkem nebo bez znaménka • Objektové datové typy – Pole – Uživatelem deklarované třídy (datový typ třída; definují se pomocí klíčového slova class) – Textové řetězce (String) • Ty mají ale zvláštní postavení, můžete do nich uložit více hodnot, např. více vět apod. Příklady datových typů – pokračování (1) – Níže ještě uvedu detailnější rozdělení datových typů, rozdělení datových typů a tabulku s rozsahy. Níže uvedené informace se dají najít v dokumentaci programovacího jazyku, nemusíš se je učit nazpaměť. Uvádím C#. – Celá čísla, Integer, se dají rozdělit ještě podrobněji: • • • • • • • • sbyte: 8 bitů, -128 až 127 byte: 8 bitů, 0 až 255 short: 16 bitů, -32,768 až 32,767 ushort: 16 bitů, 0 až 65,535 int: 32 bitů, -2,147,483,648 až 2,147,483,647 uint: 32 bitů, 0 až 4,294,967,295 long: 64 bitů, -9,223,372,036,854,775,808 až 9,223,372,036,854,775,807 ulong: 64 bitů, 0 až 18,446,744,073,709,551,615 Příklady datových typů – pokračování (2) – Desetinná čísla dají rozdělit ještě podrobněji: • float: 32 bitů, přibližně 1.5 x 10^(-45) až 3.4 x 10^(38), s přesností na 7 míst po desetinné čárce. • double: 64 bitů, přibližně 5.0 x 10^(-324) až 1.7 x 10^(308), s přesností na 15 míst po desetinné čárce • decimal: 128 bitů, vysoká přesnost, vhodná pro finanční výpočty Příklady datových typů – pokračování (3) [1] Systém typů • Všiml jsem si, že u některých programovacích jazyků se u proměnné musí uvádět datový typ a u některých se datový typ uvádět nemusí. Jak to tedy vlastně je s uváděním datových typů? – Ano, je to tak, máme totiž. tzv. statický systém typů a dynamický systém typů (někteří autoři uvádí, že se jedná o dynamickou nebo statickou kontrolu, popřípadě že se jedná o statický a dynamický typový systém [4]). • Jaký je mezi systémy typů rozdíl? – U statického systému typů je proměnná spojená s příslušným datovým typem. To znamená, že při vykonávání programu může obsahovat pouze hodnotu daného datového typu, se kterým je spojená. [3] – U dynamického systému typů se o tom, jakého datového typy je proměnná, rozhodne až podle hodnoty, která se do ní uloží. Daná proměnná může v průběhu programu tedy nabývat různých datových typů. [3] – Může se zdát, že u dynamického systému typů nejsou datové typy, ale opravdu to jen tak vypadá :-) Systém typů – pokračování (1) • Uveď prosím nějaký příklad, jak je možné, že se rozhodne o datovém typu až na základě hodnoty? – Např. v PHP operace + může značit klasický aritmetický součet (daná proměnná datového typu celé číslo) nebo může značit i spojování řetězců (daná proměnná datového typu string (řetězec)) Zhodnocení systém typů • Jaké jsou tedy výhody a nevýhody daných systému typů? – Statický typový systém je striktní, nedovolí programátorovi uložit do proměnné jakoukoliv hodnotu. Na druhou stranu ale překladač může ověřit správnost naprogramovaného programu [3]. Chyby týkající se typů jsou odhaleny před spuštěním programu. – Oproti tomu dynamický systém typů dává programátorovi daleko větší volnost a přizpůsobivost, ale na druhou stranu zase nedokáže odhalit chyby v daném kódu [3]. Interpret sleduje typy a provádí kontrolu typů v průběhu běhu programu. Zhodnocení systém typů – pokračování (1) • U dynamického systému se u proměnné, v kterém je uložena nějaká hodnota, rozhodne o příslušné operaci až těsně před jejím vykonáním. [3] • „Tento mechanismus se nazývá pozdní vazba [3].“ • Jaké programovací jazyky patří do dynamického systému typů? – Např. PHP, Ruby apod. • Jaké programovací jazyky patří do statického systému typů? – Např. C#, Java apod. Přetypování proměnné (výrazu) • Co když se stane, když mám u symbolu přiřazení na levé i pravé straně různé datové typy, logicky mám vše zapsáno správně a překladač hlásí chybu? Co s tím mám dělat? – Asi máš na mysli operaci přetypování. Než Ti vysvětlím, jak se provede, aby překladač „neřval“, tak trochu odbočím. – Pokud se u odlišných datových typů jeden datový typ (který chci uložit do druhého datového typu) může obsáhnout do druhého datového typu, tzv. vejde se do něj nebo při přetypování nedochází ke ztrátě informací, pak přetypování proběhne automaticky. • A když automatické přetypování není možné? – To je v tom případě, kdy se jeden datový typ nevejde do druhého datového typu nebo při automatickém přetypování by došlo ke ztrátě dat, tak přetypování musí programátor explicitně uvést. Přetypování proměnné (výrazu) – pokračování (1) – Můžeme tedy prohlásit, že přetypování proměnné (výrazu) je změna typu proměnné (výrazu) na požadovaný typ. • A jak explicitní přetypování provedu? – Před proměnnou (výraz) (obyčejně na pravé straně ve výrazu) uvedeme v kulatých závorkách požadovaný typ, na který chceme proměnnou (výraz) přetypovat. • A mohl bys mi to prosím vysvětlit na příkladu? – Ano, chci přetypovat desetinné číslo na číslo celé, tzn. automatické přetypování nefunguje, protože bych přišel o desetinnou část. Proto přetypování musím vynutit explicitně Deklarace datových typů v různých programovacích jazycích • Jaké datové typy v různých programovacích jazycích máme k dispozici a jak se deklarují? – Uvedu především programovací jazyky C#, PHP a JavaScript. – Především si musíme uvědomit, že JavaScript a PHP využívají dynamický systém typů. – C# využívá statický systém typů. Datové typy JavaScript – Než si uvedeme, jaké jsou datové typy v JS, tak si musíme říci o deklaraci proměnné, protože JS využívá různých klíčových slov: • Deklarace proměnných mohou být provedeny pomocí klíčových slov var, let, nebo const. • V moderním JavaScriptu se doporučuje používat let a const. let umožňuje přiřazení nové hodnoty, zatímco const označuje neměnnou (konstantní) hodnotu. • V případě, že proměnná není inicializována, bude mít hodnotu undefined. • Využívá se ještě pro deklaraci proměnné slovo var? – Moderní vývojáři (ECMAScript 6 (ES6)) často preferují používání let a const pro lepší čitelnost a bezpečnost. – Proměnné deklarované pomocí let a const jsou omezeny na deklaraci bloku, tj. složené závorky, což znamená, že jsou viditelné pouze v rámci bloku, ve kterém byly deklarovány. To pomáhá omezit chyby a nežádoucí efekty. – Proměnné deklarované pomocí let a const jsou deklarace proměnných nebo funkcí přesunuty (zdviženy) na začátek svého kontextu, do začátku svého bloku, ale nemůžete je používat před jejich deklarací. To předchází chybám např. u var. – Pokud neuvedeš u deklarace žádné klíčové slovo, proměnná se stane globální, pokud je deklarována vně funkcí nebo bloků, nebo místní, pokud je deklarována v rámci funkce nebo bloku. Datové typy JavaScript - pokračování (1) – Příklady využití klíčových slov při deklaracích: Datové typy JavaScript - pokračování (2) • Jaké datové typy jsou k dispozici v JavaScriptu? – V JavaScriptu máme k dispozici několik základních typů: • Primitivními datovými typy v JavaScriptu je řetězec, číslo (jak celé číslo, tak i desetinné číslo) a logický datový typ • Objektovými datovými typy je Objekt a pole • Prázdná proměnná (Null (proměnná neobsahuje žádnou hodnotu)/Undefined (objekt, který neexistuje nebo proměnná, která nebyla inicializovaná)). Datové typy JavaScript - příklady • Mohl bys prosím uvést nějaké příklady? – Čísla: – Logický datový typ: – Řetězec: – Pole: Datové typy JavaScript - příklady – pokračování (1) • Objekty (Object): • Null a Undefined: • Funkce (Function): Deklarace proměnných v programovacím jazyku PHP • Existuje také více možností deklarace datových typů v PHP? – Většina proměnných v PHP se deklaruje dynamicky, bez explicitní specifikace datového typu. – Např: – Od verze PHP 7.0 je možné používat datové typy pro explicitní specifikaci datového typu u parametrů funkcí nebo návratových hodnot funkcí. Deklarace proměnných v programovacím jazyku PHP – pokračování (1) – V PHP existuje globální proměnná, která je přístupná z jakéhokoli místa v kódu. Tato proměnná se nazývá $_GLOBALS. – Jedná se o asociativní pole, kde klíče jsou názvy proměnných a hodnoty jsou hodnoty těchto proměnných. – Používání globálních proměnných by mělo být provedeno obezřetně, protože mohou vést k nejasnému chování kódu, zejména v rozsáhlejších projektech. – Je vhodné minimalizovat použití globálních proměnných a spíše preferovat předávání hodnot pomocí parametrů funkcí nebo používání tříd a objektů pro organizaci dat. Deklarace proměnných v programovacím jazyku PHP – pokračování (2) – Můžeš také přistupovat k globálním proměnným pomocí speciálního klíčového slova global. Tento způsob není obecně doporučovaný. Datové typy PHP • Jaké datové typy jsou k dispozici v PHP? – V PHP máme k dispozici několik základních typů Kolekce • Co jsou to kolekce v programování? – Jedná se o datovou strukturu, která umožňuje ukládat, organizovat a manipulovat s množinou hodnot (více hodnot) nebo s objekty. – Kolekce jsou důležité pro práci s více hodnotami najednou a umožňují programátorům efektivněji řešit různé úlohy. – Obecně máme k dispozici tyto kolekce: • • • • Pole Seznam Fronta Zásobník – Dále se zaměřím na kolekce v programovacím jazyku C#. Kolekce v C# – Informace lze dohledat v dokumentaci programovacího jazyku C#. – V C# existuje několik typů kolekcí, které jsou součástí .NET Frameworku. Tyto kolekce jsou obsaženy v namespace System.Collections a System.Collections.Generic. • • • • • • • Pole (Array): List<T>: Dictionary<TKey, TValue>: HashSet<T>: Queue<T>: Stack<T>: LinkedList<T>: – Více obecných informací je uvedeno na dalších snímcích. Kolekce v C# - pokračování (1) – Pole (Array): • • Vlastnosti: Statická datová struktura s pevnou velikostí, která uchovává hodnoty stejného datového typu. Použití: Uchovávání sekvence hodnot s pevnou velikostí. – List<T>: • • Vlastnosti: Dynamická seznamová datová struktura, která umožňuje snadné přidávání nebo odebírání prvků. Použití: Dynamicky se měnící seznam hodnot – Dictionary<TKey, TValue>: • • Vlastnosti: Kolekce klíč-hodnota, kde každý klíč je jedinečný. Použití: Párování klíčů s hodnotami pro efektivní přístup k datům. – HashSet<T>: • • Vlastnosti: Kolekce, která uchovává unikátní hodnoty bez duplicity. Použití: Uchovávání unikátních hodnot. – Queue<T>: • • Vlastnosti: Datová struktura pracující na principu "first in, first out" (FIFO). Použití: Zpracování prvků v pořadí, ve kterém byly přidány. – Stack<T>: • • Vlastnosti: Datová struktura pracující na principu "last in, first out" (LIFO). Použití: Zpracování prvků v opačném pořadí, než byly přidány. – LinkedList<T>: • • Vlastnosti: Datová struktura založená na spojových seznamech, která umožňuje snadné vkládání nebo odebírání prvků. Použití: Dynamické seznamování hodnot s efektivním vkládáním nebo odebíráním prvků. Datový typ pole • Primitivní datové typy jsou mi celkem jasné, co se podrobněji podívat na objektové datové typy? – Ano, souhlasím, ale zastavme se především u datového typu pole a jiných dalších kolekcích. • Jak by se dal definovat datový typ pole pole? – Pole je množina prvků stejného typu (existuje i výjimka, např. v PHP) jdoucích v paměti za sebou. • Má každý prvek svoje vlastní jméno? – Nemá, pole má označení jako celek, k jeho jednotlivým prvkům přistupujeme pomocí indexu • Jaké mohou být indexy a jak se zapisují? – Indexy mohou být číselné nebo nečíselné. U nečíselných indexů potom hovoříme o tzv. asociativním poli (využívá se hlavně v PHP) – Indexy se píší do hranatých závorek (musím ale uvést název pole), kam se uvede pořadí příslušného prvku, např. názevPole[0] (“klasické“ pole) nebo názevPole[“město“] (asociativní pole) Deklarace pole - pokračování • Zapsání indexu v rámci pole se dá obecně zapsat : – jmenoPole[index] • Jak se číslují indexy, které číslo je první? – Nejen v programovacím jazyku C# jsou prvky pole číslovány od nuly. • Když bych chtěl získat libovolnou hodnotu z pole, tak zkrátka napíši jmenoPole[index_příslušného_prvku], to je mi jasné. Ale co když bych chtěl projít všechny prvky v poli. Můžu k tomu využít nějaký příkaz/konstrukci? – Ano, pole je ideální pro zpracování cyklem, obvykle s cyklem s pevným počtem opakování (for nebo foreach) • Mohu si pole nějak představit, abych ho lépe pochopil? Dosavadní výklad byl pro mě příliš abstraktní – Samozřejmě, hodnoty pole (prvky) představují čtverce a jejich pozice indexy pod prvky. Další informace o poli • Do jaké kategorie se dá pole zařadit? – Např. [1] uvádí, že se jedná o kontejner (v Javě), v literatuře se můžete setkat i s označením kolekce. Na daném označení záleží i na použití v konkrétním programovacím jazyku. Pole můžeme zařadit do tzv. lineární kolekce, stejně jako např. seznam (o tom dále v prezentaci). • Jaká je výhoda pole? – S polem a jeho prvky se pracuje poměrně rychle. • Jaké jsou nevýhody pole? – Pole má při deklaraci nastavenu pevnou velikost a ta se nemůže v průběhu programu měnit. Další informace o poli - pokračování • A jak je to s polem např. v PHP? Pole v C# jsem už jaksi pochopil. – Pole v PHP může obsahovat hodnoty různých datových typů, včetně čísel, řetězců, objektů a dalších polí. – Pole v PHP také nemá pevně stanovenou velikost, mohou se do něj průběžně přidávat další prvky Deklarace pole v C# – Možností, jak zadeklarovat pole v C# je velké množství: – Standartní deklarace: • int[] numbers = new int[5]; // Vytvoření pole celých čísel o délce 5 – Deklarace s inicializací hodnot: • int[] numbers = new int[] { 1, 2, 3, 4, 5 }; // Inicializace hodnot při deklaraci • int[] numbers = { 1, 2, 3, 4, 5 }; // Zkrácená syntaxe pro inicializaci hodnot – Deklarace a inicializace pomocí konstruktoru: • int[] numbers = new int[5] { 1, 2, 3, 4, 5 }; // Explicitní určení délky a inicializace • int[] numbers = new int[] { 1, 2, 3, 4, 5 }; // Kompilátor automaticky určí délku Deklarace pole v PHP – Možností, jak zadeklarovat pole v PHP je velké množství: – Standartní deklarace: • $numbers = array(1, 2, 3, 4, 5); – Deklarace s krátkou syntaxí (od PHP 5.4): • $colors = ["red", "green", "blue"]; – Deklarace s asociativními klíči: • $person = array( "name" => "John", "age" => 30, "city" => "New York"); • $person = [ "name" => "John", "age" => 30, "city" => "New York" ] – Přidání prvků do prázdného pole: • $fruits = array(); – $fruits[] = "Apple"; – $fruits[] = "Banana"; – Deklarace pole s explicitním zadáním klíčů: • $colors = array(0 => "red", 1 => "green", 2 => "blue"); Deklarace pole v JavaScriptu – Možností, jak zadeklarovat pole v JS je velké množství: – Standartní deklarace: • let numbers = [1, 2, 3, 4, 5]; – Pole s mixem datových typů: • let mixedArray = [1, "two", 3.0, true]; – Deklarace pole s konstruktorem Array: • var colors = new Array("red", "green", "blue"); • var emptyArray = new Array(); // správný zápis pro prázdné pole – Pole s explicitním určením délky: • var fixedSizeArray = new Array(3); // Pole s předem určenou délkou (3 prázdné prvky) – Deklarace s asociativními klíči: • var person = { name: "John", age: 30, city: "New York"}; – Pole prázdné nebo s inicializací: • var emptyArray = []; • var fruits = ["Apple", "Banana", "Orange"]; Načtení a výpis prvků pole • Jakým způsobem se ještě nejtypičtěji dají načíst prvky do pole, tzn. inicializovat prvky pole, kdybych to nechtěl udělat způsobem ukázaným na předchozím snímku? – Asi nejčastější možností je použít cyklus s pevným počtem opakování, který má řídící proměnnou, která je obvykle nastavena na 0 (stejně jako první hodnota v poli) a zvyšuje se o 1, tzn. postupně se projdou všechny prvky pole a inicializují se. • A s výpisem prvků pole to je stejné, také se nejčastěji používá cyklus? – Ano, je to stejný příklad jako uvedený u načtení dat pole uvedený výše Příklady načtení a výpis prvků pole v různých programovacích jazycích • Uvažujme, že naplníme a vypíšeme pole o velikosti 5 prvků typu celé číslo od 1 do 5 • Naplnění a výpis v programovacím jazyku C# • Naplnění a výpis v programovacím jazyku JavaScript • Naplnění a výpis v programovacím jazyku Php • N Vícerozměrná pole • K čemu jsou dobrá vícerozměrná pole? Jaké je jejich využití? – Vícerozměrná pole slouží jako základ do některých her, např. packman, had, lodě, piškvorky apod. • Umožňují programovací jazyky C#, JavaScript a PHP deklarovat vícerozměrná pole? – V programovacím jazyku C# můžeme definovat vícerozměrné pole. – Programovací jazyk JavaScript nenabízí možnost definovat vícerozměrné pole, ale pokud nadefinujeme pole v rámci prvků v jiném poli. – U programovacího jazyku PHP je situace podobná jako v JavaScriptu. Vícerozměrná pole – pokračování (1) • Mohl bys mi ukázat deklaraci vícerozměrných (dvourozměrných) polí v programovacím jazyku C#, JavaScript a Php? – Deklarace v programovacím jazyku C# • int[,] dvourozměrPole = new int [5, 5]; – Deklarace v programovacím jazyku JavaScript – pole = { 1: {1: ["řetězec 1,1"], 2: ["řetězec 1,2"] }, 2: {1: ["řetězec 2,1"], 2: ["řetězec 2,2"] } } – Deklarace v programovacím jazyku PHP • $pole = array ( • "cisla1" => array("index" => "prvni"), • "cisla2" => array("index" => "druhy") • ); Vlastnosti pole • Mohl bys mi ukázat vlastnosti pole v programovacím jazyku C#, JavaScript a Php? • Programovací jazyk C# – – – – Velikost pole: vlastnost Length, Př. pole. Length Seřazení pole: metoda Sort, Př. Array.Sort(název); Zkopírování pole: metoda Copy, Př. Copy(pole1,pole2,početPrvků) Zjištění výskytu, metoda Contains(), Př. pole.Contains(hledanáProměnná) • Programovací jazyk JavaScript – Velikost pole: vlastnost length, Př. pole. length – Obrácení pořadí prvků, funkce reverse(),Př. pole2 = pole1.reverse(); – Seřazení pole: funkce sort, Př. pole.sort(); • Programovací jazyk Php – Velikost pole (počet prvků): funkce count, Př. $pocet = count($pole) – Seřazení pole: funkce sort, Př. sort($pole); – Součet prvků v poli, funkce array_sum(), Př. $prumer = array_sum($penize) Seznam • Kromě pole patří do kolekce i seznam. Co je to ten seznam? – Seznam představuje soubor dat, která jsou obvykle stejného typu jako u pole. – Obecně lze termín "list" chápat v kontextu programování jako kolekci prvků. • Můžeš mi říci, jak se pole a seznam liší? – U pole musel být před inicializací znám počet prvků pole, jednalo se o tzv. statické pole (podle dřívějšího názvosloví), kdežto seznam je dynamické pole (podle dřívějšího názvosloví) a u něho nemusíme dopředu uvádět jeho velikost. • Seznamy existují ve všech programovacích jazycích, které byly uvedeny v této prezentaci? – Seznam existuje v C#, částečně v PHP (jak již bylo uvedeno, u pole se nemusí uvádět jeho velikost, ale v PHP je také dynamické), v JavaScriptu se seznamem nesetkáme. • Kolik existuje v C# kolekcí? – V C# existuje velké množství kolekcí Obecné vlastnosti seznamu (List) • Seznam prvků: – V kontextu programování označuje "list" obvykle seznam prvků nebo hodnot, které jsou uloženy nebo seskupeny společně. • Dynamická kolekce: – List obvykle zahrnuje možnost dynamického rozšiřování a zmenšování, což znamená, že lze snadno přidávat a odebírat prvky. • Indexovaný přístup: – Mnoho implementací listu umožňuje přistupovat k prvkům pomocí indexu. Prvky v listu jsou často indexovány od nuly nebo jedničky, v závislosti na konkrétní implementaci. • Manipulace s prvky: – List často poskytuje metody a operace pro manipulaci s prvky, jako je přidávání, odstraňování, vkládání, třídění a procházení. • Generická a nebo dynamická povaha: – V některých jazycích, jako je C#, "list" může být generickým typem, což znamená, že může pracovat s různými datovými typy. V jiných případech může být "list" nebo podobná struktura univerzální a může obsahovat prvky různých typů. • Využití: – Listy jsou běžně používány pro správu kolekcí dat, zejména pokud je potřeba flexibilní a rozšiřitelná struktura. Mohou být použity v širokém spektru scénářů, od uchovávání seznamu položek v GUI až po správu dat v paměti nebo načítání dat ze souboru. Seznamy v C# – V jazyce C#, List<T> je součástí .NET Frameworku a reprezentuje dynamicky rozšiřitelnou kolekci prvků stejného datového typu (T značí generický parametr). – List<T> je implementován na základě pole a poskytuje mnoho užitečných metod pro efektivní manipulaci s daty. • Základní vlastnosti a charakteristiky: – Generický datový Typ: • List<T> je generický, což znamená, že může pracovat s prvky libovolného datového typu. Například, List<int> představuje seznam celých čísel. • Dynamické rozšiřování: • List<T> je dynamicky rozšiřitelný, což znamená, že se automaticky zvětšuje, když přidáváte prvky, a zmenšuje, když odstraňujete prvky. Seznamy v C# - pokračování (1) • Indexovaný Přístup: – Prvky v List<T> jsou indexovány od nuly a mohou být přistupovány pomocí hranatých závorek []. • List<int> numbers = new List<int>(); • numbers.Add(42); • int firstNumber = numbers[0]; // Přístup k prvkům pomocí indexu • Metody pro Manipulaci s Prvky: – List<T> poskytuje mnoho užitečných metod pro manipulaci s prvky, včetně Add, Remove, Insert, Contains, Sort a mnoho dalších. – List<string> colors = new List<string>(); – colors.Add("Red"); – colors.Add("Green"); – colors.Add("Blue"); – colors.Remove("Green"); Seznamy v C# - pokračování (2) • Vytvoření a Inicializace: – List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; • Přidání Prvků: – numbers.Add(6); • Odstranění Prvků: – numbers.Remove(3); • Procházení Prvků: – foreach (int number in numbers) – { – } • Zjistění Délky: – int count = numbers.Count; • Přistupování k Prvkům: – int firstElement = numbers[0]; • Řazení: – numbers.Sort(); Použitá literatura • [1] PECINOVSKÝ, Rudolf. OOP: naučte se myslet a programovat objektově. Brno: Computer Press, 2010. ISBN 978-80-251-2126-9. • [2] ČÁPKA, David. 4. díl - Referenční a hodnotové datové typy. ITnetwork.cz Přihlásit se Registrovat [online]. Praha: David Čápka, 2013- [cit. 2017-10-21]. Dostupné z: https://www.itnetwork.cz/csharp/oop/c-sharp-tutorial-referencni-a-hodnotove-tyoy-garbagecollector • [3] ČADA, Ondřej. Objektové programování: naučte se pravidla objektového myšlení. Praha: Grada, 2009. Průvodce (Grada). ISBN 978-80-247-2745-5. • [4] ČÁPKA, David. 3. díl - Proměnné, typový systém a parsování. ItNetwork [online]. Praha [cit. 201710-26]. Dostupné z: https://www.itnetwork.cz/csharp/zaklady/c-sharp-tutorial-promenne-typovysystem-a-parsovani • [5] ČÁPKA, David. 2. díl - Seznam (List) pomocí pole v C#. ItNetwork [online]. Praha [cit. 2017-10-26]. Dostupné z: https://www.itnetwork.cz/csharp/kolekce-a-linq/c-sharp-tutorial-seznamy-kolekce-list • [6] ČÁPKA, David. 1. díl - Úvod do kolekcí a genericita. ItNetwork [online]. Praha [cit. 2017-10-26]. Dostupné z: https://www.itnetwork.cz/csharp/kolekce-a-linq/c-sharp-tutorial-uvod-do-kolekci-agenericita

Use Quizgecko on...
Browser
Browser