Výčtový typ

Výčtový typ (v angličtině označovaný jako „enumerated type“ nebo zkráceně „enum“) patří mezi návrhové vzory. Je to datový typ tvořený konečnou omezenou množinou pojmenovaných hodnot. Každý člen výčtového typu je tvořen identifikátorem a hodnotou. Hodnotou zpravidla bývá celočíselná konstanta. „Výčtový typ je zvláštní hodnotový typ s předem určenou sadou číselných hodnot. V základním nastavení jsou tyto číselné hodnoty celá čísla (typ integer), ale mohou být i typu long, byte atd.“[1] Identifikátor se obvykle v kódu chová jako konstanta. Identifikátory je zvykem psát velkými písmeny a bývají ve většině programovacích jazyků odděleny čárkou.

Použití výčtového typu

Výčtový typ je určený pro omezenou neměnnou sadu nazývaných hodnot. Hodí se pro výčet názvů dní v týdnu (PONDĚLÍ, ÚTERÝ,… - je jich jen 7), pro jména měsíců (LEDEN, ÚNOR,… - jen 12), pro pojmenování základních barev, pro názvy světových stran, atd. V praxi lze výčtový typ také použít například pro stavy vyhodnocení objednávky (SCHVÁLENO, ZAMÍTNUTO, ZATÍM_NEVYŘÍZENO), pro tvorbu dotazníků se škálovými otázkami, názvy webových prohlížečů (OPERA, CHROME, FIREFOX, IE, SAFARI), hudebních žánrů či kategorií produktů.

Výhody výčtového typu

Výhodou výčtového typu je mnohem větší přehlednost, čitelnost a srozumitelnost kódu oproti tomu, než když jsou použity celočíselné konstanty. Zlepší se nejen sebe-dokumentace ale i bezpečnost celého kódu. U celočíselných konstant totiž bylo pravděpodobnější riziko, že s nimi budou omylem prováděny matematické operace. Samotné užití výčtového typu se velmi často pojí s konstrukcí switch-case.

Výčtový typ v programovacích jazycích

Výčtový typ v jazyce Java

V programovacím jazyce Java se výčtový typ objevil ve verzi 5 (interně označované jako 1.5). „Enum dědí od třídy Object a implementuje rozhraní Comparable<E>, Serializable.[2] Výčtový typ je deklarován obdobně jako třída, ale místo klíčového slova class je určen pomocí klíčového slova enum, před které se stejně jako u třídy obvykle uvádí klasifikátor přístupu (např. public). Poté následuje výčet identifikátorů, ke kterým jsou přiřazovány ordinální hodnoty. S přiřazováním ordinálních hodnot se, jak je v Javě zvykem, začíná od 0. Prvnímu je přidělena 0 a na pořadí identifikátorů ve výčtu tedy záleží. Pokud je potřeba hodnotu nastavit manuálně, napíše se do jednoduchých závorek () a je nutné nadefinovat konstruktor. Jako hodnotu lze výčtovému typu v Javě oproti jiným programovacím jazykům nastavit také libovolný datový typ, lambda výraz nebo celou třídu.

Ukázka jednoduchého výčtového typu:

public enum Mesic
{
     NEURCENY, LEDEN, UNOR, BREZEN, DUBEN, KVETEN, CERVEN,
     CERVENEC, SRPEN, ZARI, RIJEN, LISTOPAD, PROSINEC

}

Příklad složitějšího výčtového typu s dvouparametrickým konstruktorem pro číslo a jméno měsíce:

public enum Mesic
{
     NEURCENY(0,"Neurčený"),
     LEDEN(1,"Leden"),
     UNOR(2,"Únor"),
     BREZEN(3,"Březen"),
     DUBEN(4,"Duben"),
     KVETEN(5,"Květen"),
     CERVEN(6,"Červen"),
     CERVENEC(7,"Červenec"),
     SRPEN(8,"Srpen"),
     ZARI(9,"Září"),
     RIJEN(10,"Říjen"),
     LISTOPAD(11,"Listopad"),
     PROSINEC(12,"Prosinec");

     private final String jmeno;
     private final int cislo;

     private Mesic(int cislo, String jmeno)
     {
          this.cislo=cislo;
          this.jmeno=jmeno;
     }
}

Mesic vybrany=Mesic.SRPEN;

Výčtový typ v jazyce C#

Výčtový typ v C# je uvozen klíčovým slovem enum. Před klíčovým slovem enum může být klasifikátor přístupu. Při přiřazování ordinálních hodnot se defaultně začíná od nuly. Avšak v určitých situacích, například při číslování měsíců v roce máme zažito, že leden je první nikoli nultý měsíc, je potřeba počítat od 1. Toho je možné docílit přidělením jedničky prvnímu identifikátoru. V C# se hodnoty identifikátorům udělují s operátorem =.

Ukázka jednoduchého výčtového typu s počítáním od 1 nikoli od 0:

public enum Mesic
{
     Leden=1, Unor, Brezen, Duben, Kveten, Cerven, Cervenec, Srpen, Zari, Rijen, Listopad, Prosinec
}

Mesic vybrany=Mesic.Srpen;

Výčtový typ v jazyce C/C++

V C nebo v C++ je výčtový typ definován pomocí klíčového slova enum. „Deklarace typu enum má hodně společného s deklarací struktury. Lze vytvořit buďto jen výčtový typ enum (stejně jako jenom strukturu), nebo pomocí typedef definovat nový datový typ.“[3] Implicitně se zde identifikátorům přiřazuje hodnota od 0. Vlastní hodnoty je možné přidělit přes operátor =. Název proměnné při deklaraci výčtového typu s použitím typedef se uvádí až na konci.

Ukázka výčtového typu jako nového datového typu:

typedef enum
{
     LEDEN=1,
     UNOR=2,
     BREZEN=3,
     DUBEN=4,
     KVETEN=5,
     CERVEN=6,
     CERVENEC=7,
     SRPEN=8,
     ZARI=9,
     RIJEN=10,
     LISTOPAD=11,
     PROSINEC=12
} MESIC;

Výčtový typ v jazyce Javascript

Definice výčtového typu v dynamickém programovacím jazyce Javascriptu je dosažena vytvořením nového objektu. Nejrychlejší cestou je založení proměnné a zavolání konstruktoru objektu {}, kde atributy jsou identifikátory výčtu a od hodnot jsou oddělené dvojtečkou. Stejného výsledku, avšak poměrně zdlouhavěji, se lze dopracovat s konstruktorem objektu new Object() nebo novou funkcí function MyEnum(){}. Další možností je také využití prototype.

Příklad výčtového typu s použitím konstruktoru {}:

var Mesic = {
     LEDEN: 1,
     UNOR: 2,
     BREZEN: 3,
     DUBEN: 4,
     KVETEN: 5,
     CERVEN: 6,
     CERVENEC: 7,
     SRPEN: 8,
     ZARI: 9,
     RIJEN: 10,
     LISTOPAD: 11,
     PROSINEC: 12
}

var vybrany = Mesic.SRPEN;

Výčtový typ v jazyce Pascal

V jazyce Pascalu je výčtový typ určen klíčovým slovem type ještě před deklarací proměnných programu. Je omezen na maximálně „256“[4] hodnot. Číselná hodnota se začíná přidělovat od nuly.

Příklad syntaxe výčtového typu v Pascalu:

type TMesic = (NEURCENY, LEDEN, UNOR, BREZEN, DUBEN, KVETEN, CERVEN, CERVENEC, SRPEN, ZARI, RIJEN, LISTOPAD, PROSINEC);
var mesic : TMesic;

Výčtový typ v jazyce Python

Výčtový typ je v jazyce Python podporován od verze „3.4“[5]. Před jeho deklarací jako nové třídy, která dědí od Enum je potřeba provést import. Hodnoty se přiřazují pomocí =.

from enum import Enum
class Mesic(Enum):
     leden = 1
     unor = 2
     brezen = 3
     duben = 4
     kveten = 5
     cerven = 6
     cervenec = 7
     srpen = 8
     zari = 9
     rijen =10
     listopad =11
     prosinec = 12

Výčtový typ v jazyce Visual Basic

Pro výčtový typ ve Visual Basic se používá klíčové slovo enum. Implicitně jsou mu hodnoty přidělovány od 0, explicitně je lze přidělit s použitím =.

Enum Mesic
     Leden = 1
     Unor = 2
     Brezen = 3
     Duben = 4
     Kveten = 5
     Cerven = 6
     Cervenec = 7
     Srpen = 8
     Zari = 9
     Rijen =10
     Listopad =11
     Prosinec = 12
End Enum

Výčtový typ v jazyce PHP

Pro výčtový typ v jazyce PHP se používá klíčové slovo enum. Výčtový typ lze pak uvádět jako parametry funkcí a metod.

enum Mesic
{
    case Leden;
    case Unor;
    case Brezen;
    case Duben;
    case Kveten;
    case Cerven;
    case Cervenec;
    case Srpen;
    case Zari;
    case Rijen;
    case Listopad;
    case Prosinec;
}

Výčtový typ v datových strukturách

Výčtový typ lze také použít v datových strukturách a databázích. V MySQL databázi je prvnímu řetězci přiřazena 1. Nula je přidělena chybovému prázdnému řetězci.

Ukázka vytváření tabulky MySQL s výčtem:

CREATE TABLE ukazka (
     mesic ENUM('Leden', 'Unor', 'Brezen', 'Duben', 'Kveten', 'Cerven', 'Cerven','Cervenec', 'Srpen', 'Zari', 'Rijen', 'Listopad', 'Prosinec')
);

V XML schématu je možné definici výčtového typu postavit na restrikci, která omezí povolené hodnoty pouze na ty uvedené ve výčtu.

Příklad výčtového typu v XML schématu:

<xs:simpleType name="Mesic">
     <xs:restriction base="xs:string">
          <xs:enumeration value="Leden"/>
          <xs:enumeration value="Unor"/>
          <xs:enumeration value="Brezen"/>
          <xs:enumeration value="Duben"/>
          <xs:enumeration value="Kveten"/>
          <xs:enumeration value="Cerven"/>
          <xs:enumeration value="Cervenec"/>
          <xs:enumeration value="Srpen"/>
          <xs:enumeration value="Zari"/>
          <xs:enumeration value="Rijen"/>
          <xs:enumeration value="Listopad"/>
          <xs:enumeration value="Prosinec"/>
     </xs:restriction>
</xs:simpleType>

Odkazy

Citace

  1. LEHOCKÝ, Zdeněk: C# - 6. lekce [online]. Programujte.com, 12.10.2005 [cit. 25.11.2014]. Dostupné z WWW: <http://programujte.com/clanek/1970010146-c-6-lekce/>
  2. ORACLE CORPORATION: Class Enum<E extends Enum<E>> [online]. Java Platform Standard Edition 7 Documentation, 26.9.2014 [cit. 25.11.2014]. Dostupné z WWW: <https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html>
  3. BÍLEK, Petr: Vytváření typů II, Jazyk C/C++ [online]. Sallyx.org, 29.8.2003 [cit. 25.11.2014]. Dostupné z WWW:  <http://www.sallyx.org/sally/c/c16.php>
  4. DIVIŠ, Jozef: Jednoduché typy dat, Pascal [online]. SPŠE Mohelnice [cit. 25.11.2014]. Dostupné z WWW: <http://old.spsemoh.cz/vyuka/pascal/jtd.htm#vycet Archivováno 4. 3. 2016 na Wayback Machine.>
  5. PYTHON SOFTWARE FOUNDATION: 8.13. enum - Support for enumerations [online]. Python 3.4.2 Documentation, 29.10.2014 [cit. 25.11.2014].Dostupné z WWW: <https://docs.python.org/3.4/library/enum.html>

Reference

Související články

Externí odkazy

Read other articles:

إن حيادية وصحة هذه المقالة محلُّ خلافٍ. ناقش هذه المسألة في صفحة نقاش المقالة، ولا تُزِل هذا القالب من غير توافقٍ على ذلك. (نقاش) (يونيو 2022) أبرامز أم 1 أيه 1 تلتقط صورة تحت «قوس النصر» في ساحة الاحتفالات، بغداد، العراق. كانت شرعية غزو العراق في عام 2003 موضع خلاف، وتمحور النقاش حو

 

Town in Samogitia Region, Lithuania City in Samogitia, LithuaniaTelšiaiCityLeft to right:Telšiai CathedralCuria of the Roman Catholic Diocese of TelšiaiTourism CenterChurch of the Assumption of the Blessed Virgin Mary into Heaven, TelšiaiTelšiai Tower FlagCoat of armsTelšiaiLocation within LithuaniaShow map of LithuaniaTelšiaiLocation within the Baltic StatesShow map of Baltic statesTelšiaiLocation within EuropeShow map of EuropeCoordinates: 55°59′0″N 22°15′0″E / &#x...

 

Armed conflict primarily between Israel and Hezbollah For other wars in Lebanon, see Lebanon War. 2006 Lebanon WarPart of the Israeli–Lebanese conflict, the Iran–Israel proxy conflict and the war on terror Left: Dust rises after the impact of two bombs dropped during an IAF airstrike on Tyre, Lebanon.Right: Smoke after a rocket launched by Hezbollah hit near the Bnai Zion Medical Center in Haifa, IsraelDate12 July – 14 August 2006[a](1 month and 2 days)LocationLebanon,...

Tanzanian boy transporting fodder on his bicycle to feed his family cattle Bicycle poverty reduction is the concept that access to bicycles and the transportation infrastructure to support them can dramatically reduce poverty.[1][2][3][4] This has been demonstrated in various pilot projects in South Asia and Africa.[5][6][7] Experiments done in Africa (Uganda and Tanzania) and Sri Lanka on hundreds of households have shown that a bicycle...

 

2012 South Korean filmAll About My WifeHangul내 아내의 모든 것Revised RomanizationNae anae-ui modeun geotMcCune–ReischauerNae anae-ŭi modŭn gŏt Directed byMin Kyu-dongWritten byHeo Sung-hye Min Kyu-dongBased onUn novio para mi mujerby Pablo SolarzProduced byPark Joon-ho Min Jin-soo Lee Yoo-jinStarringIm Soo-jung Lee Sun-kyun Ryu Seung-ryongCinematographyKim Dong-youngEdited byKim Sun-minMusic byLee Jin-hee Kim Jun-seongRelease date May 17, 2012 (2012-05-17) Running ...

 

Kvemo Kartli ქვემო ქართლიMkhareCountry GeorgiaIbu kotaRustaviSubdivisi Daftar 1 kota, 6 distrik Pemerintahan • GubernurPaata Khizanashvili[1]Luas • Total6,528 km2 (2,520 sq mi)Populasi (2014) • Total423,986 • Kepadatan65/km2 (170/sq mi)Kode ISO 3166GE-KKIPM (2017)0.726[2]high · 10th Kvemo Kartli (bahasa Georgia: ქვემო ქართლი; bahasa Azerbaijan: Aş...

Municipality in the Mexican state of Coahuila Municipality in Coahuila, MexicoMatamorosMunicipality Coat of armsMatamorosLocation in MexicoCoordinates: 25°31′41″N 103°13′42″W / 25.52806°N 103.22833°W / 25.52806; -103.22833Country MexicoStateCoahuilaMunicipal seatMatamorosArea • Total1,003.7 km2 (387.5 sq mi)Population (2005) • Total99,707 Matamoros is one of the 38 municipalities of Coahuila, in north-eastern...

 

Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen sind unter Goldersbach (Begriffsklärung) aufgeführt. Goldersbach Goldersbach bei Tellerbrücke Goldersbach bei Tellerbrücke Daten Gewässerkennzahl DE: 238168 Lage Schwäbisches Keuper-Lias-Land Schönbuch und Glemswald Schönbuch Baden-Württemberg Landkreis BöblingenOberläufe tlw. Landkreis Tübingen Stadt Tübingen Flusssystem Rhein Abfluss über Ammer → Neckar → Rhein ...

 

Indigenous religious belief systems A Buryat religious specialist in Olkhon. Because they have undergone Russian colonialism, the Buryat's belief system is labeled an indigenous religion. Indigenous religions is a category used in the study of religion to demarcate the religious belief systems of communities described as being indigenous. This category is often juxtaposed against others such as the world religions and new religious movements. The term is commonly applied to a range of differe...

29th TVyNovelas AwardsDateMarch 6, 2011LocationMundo Imperial Forum, Acapulco, GuerreroHosted byJacqueline Bracamontes & Alan TacherMost awardsPara volver a amar (7)Most nominationsPara volver a amar (11) Soy tu dueña (11)Television/radio coverageNetworkCanal de las estrellas ← 28th · TVyNovelas Awards · 30th → The 29th TVyNovelas Awards were an academy of special awards to the best soap operas and TV shows. The awards ceremony took place on March 6, 201...

 

2016 film VayaFilm posterDirected byAkin OmotosoStarringPhuthi NakeneAzwile Chamane-MadibaWarren MasemolaRelease dates 9 September 2016 (2016-09-09) (TIFF) 27 October 2017 (2017-10-27) (South Africa) Running time110 minutesCountrySouth AfricaLanguageZulu Vaya is a 2016 South African drama film directed by Akin Omotoso.[1] It was screened in the Contemporary World Cinema section at the 2016 Toronto International Film Festival.[2] Cast Phuth...

 

Haryana Legislature territory in India Nalwa Assembly constituencyConstituency No. 53 for the Haryana Legislative AssemblyConstituency detailsCountryIndiaRegionNorth IndiaStateHaryanaDistrictHisarLS constituencyHisarEstablished2009Total electors1,65,498[1]Member of Legislative Assembly14th Haryana Legislative AssemblyIncumbent Ranbir Singh Gangwa Party  BJPElected year2019 Nalwa Assembly constituency in Hisar district is one of the 90 Vidhan Sabha constituencies of Haryana s...

San Ramón Sant Ramon municipio de Cataluña Monasterio de San Ramón, conocido como el Escorial de Lérida San RamónUbicación de San Ramón en España. San RamónUbicación de San Ramón en la provincia de Lérida.País  España• Com. autónoma  Cataluña• Provincia Lérida• Comarca Segarra• Partido judicial CerveraUbicación 41°43′33″N 1°21′47″E / 41.725958, 1.362945• Altitud 663 mSup...

 

PangeaPangea selama era Mesozoikum sekitar 250 juta tahun lalu.Sejarah benuaTerbentuk300 - 250 juta tahun laluJenisSuperbenuaHari ini bagian dari Asia Eropa Afrika Amerika Utara Amerika Selatan Australia Antarktika serta pulau pulau di sekitar benua. Benua lebih kecil Laurentia Baltica Kazakhstania Siberia China Utara China Selatan China Timur Kongo (benua) India (benua) Arab (benua) Kraton Amazonia Kraton Afrika Barat Kraton Tanzania Kalaharia (benua) Kraton São Francisco Kraton Rio Apa Kra...

 

Guerra de Independência da Guiné-Bissau Guerra Colonial Portuguesa Soldados do PAIGC hasteando a bandeira da Guiné-Bissau em 1974 Data 17 de Julho de 1961 a 10 de Setembro de 1974 Local Guiné-Bissau, Senegal e Guiné Desfecho Independência da Guiné-Bissau Beligerantes Portugal PAIGC (FARP) Guiné Cuba[1] Senegal (1961-1966)[2]FLING (1961-1966)[2] Comandantes Arnaldo Schulz Fernando Louro de Sousa Vasco António Martins Rodrigues António de Spínola Otelo Saraiva de Carvalho Betten...

American basketball player Isaiah StevensStevens with the Colorado State in 2023No. 4 – Colorado State RamsPositionPoint guardLeagueMountain West ConferencePersonal informationBorn (2000-11-01) November 1, 2000 (age 23)NationalityAmericanListed height6 ft 0 in (1.83 m)Listed weight185 lb (84 kg)Career informationHigh schoolAllen (Allen, Texas)CollegeColorado State (2019–present)Career highlights and awards 2× First-team All-Mountain West (2021, 2023)...

 

Provincial park in British Columbia Francis Point Provincial ParkIUCN category II (national park)Map of British ColumbiaLocationNew Westminster Land District, British Columbia, CanadaNearest cityPender Harbour, BCCoordinates49°36′43″N 124°03′28″W / 49.61194°N 124.05778°W / 49.61194; -124.05778Area83 ha. (0.83 km²)EstablishedMay 17, 2004Governing bodyBC Parks The lighthouse at Francis Point Provincial Park Francis Point Provincial Park is a provin...

 

Room in the White House For the Diplomatic Reception Rooms at the U.S. Department of State, see Diplomatic Reception Rooms, U.S. Department of State. This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (August 2009) (Learn how and when to remove this template message) West side of the Diplomatic Reception Room showing the panoramic Zuber et Cie wallpaper Scenes of...

Human settlement in EnglandRowley RegisSt Giles' Church, parish church of Rowley RegisRowley RegisLocation within the West MidlandsPopulation50,257 (2011)[a]OS grid referenceSO9687Metropolitan boroughSandwellShire countyStaffordshire (Worcestershire after 1966)Metropolitan countyWest MidlandsRegionWest MidlandsCountryEnglandSovereign stateUnited KingdomPost townCRADLEY HEATHPostcode districtB65Post townROWLEY REGISPostcode districtB65D...

 

2012 film ParvanehFilm posterDirected byTalkhon HamzaviWritten byTalkhon HamzaviStarringNissa KashaniRelease date November 2012 (2012-11) (Germany) Running time25 minutesCountrySwitzerlandLanguageGerman Parvaneh is a 2012 Swiss short drama film directed by Talkhon Hamzavi. It was nominated for the Academy Award for Best Live Action Short Film at the 87th Academy Awards.[1] Cast Brigitte Beyeler Cheryl Graf Nissa Kashani as Parvaneh Jana Pensa as Girl at a Party Reference...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!