Kas ir Enum programmēšanas valodās?
Ričards Drurijs/Ikonika/Getty Images
Saīsinājums no uzskaitījuma, enum mainīgais tips var atrast C (ANSI, nevis oriģinālajā K&R), C++ unC#. Ideja ir tāda, ka tā vietā, lai izmantotu starpt lai attēlotu vērtību kopu, tā vietā tiek izmantots tips ar ierobežotu vērtību kopu.
Piemēram, ja mēs izmantojam varavīksnes krāsas, kuras ir
- sarkans
- apelsīns
- Dzeltens
- Zaļš
- Zils
- Indigo
- violets
Ja enums neeksistēja, varat izmantot a #definēt (C) vai konst C++/C#, lai norādītu šīs vērtības. Piem
Pārāk daudz Ints, lai skaitītu!
Problēma ir tā, ka ir daudz vairāk ints nekā krāsas. Ja violetai ir vērtība 7, un programma piešķir mainīgajam vērtību 15, tad tā nepārprotami ir kļūda, taču tā var netikt atklāta, jo 15 ir derīga int vērtība.
Enums uz glābšanu
Enum ir lietotāja definēts tips, kas sastāv no nosauktu konstantu kopas, ko sauc par skaitītājiem. Varavīksnes krāsas tiks kartētas šādi.:
Tagad iekšēji kompilators izmantos int, lai tās saglabātu, un, ja vērtības netiek norādītas, sarkanā krāsa būs 0, oranža ir 1 utt.
Kādas ir Enum priekšrocības?
Lieta tāda varavīksnes krāsas ir tips, un tam var piešķirt tikai citus tā paša veida mainīgos. C ir vieglāk iet (ti, mazāk stingri rakstīts), bet C++ un C# neļaus piešķirt piešķiršanu, ja vien jūs to nepiespiedīsit, izmantojot cast.
Jūs neesat iestrēdzis ar šiem kompilators ģenerētās vērtības, varat tām piešķirt savu veselo skaitļu konstanti, kā parādīts šeit.
Zilā un indigo krāsa ar vienādu vērtību nav kļūda, jo skaitītāji var ietvert sinonīmus, piemēram, koši un sārtināt.
Valodu atšķirības
C valodā mainīgs pirms deklarācijas jāieraksta vārds enum kā
Tomēr C++ valodā tas nav vajadzīgs kā varavīksnes krāsas ir atšķirīgs tips, kuram nav nepieciešams enum tipa prefikss.
C# vērtībām var piekļūt ar tipa nosaukumu, kā tas ir
Kāda ir Enumsa jēga?
Enumu izmantošana palielina abstrakcijas līmeni un ļauj programmētājam domāt par vērtību nozīmi, nevis uztraukties par to glabāšanu un piekļuvi. Tas samazina kļūdu rašanos.
Šeit ir piemērs. Mums ir luksoforu komplekts ar trim spuldzēm- sarkans , dzeltens un zaļš . Apvienotajā Karalistē luksoforu secība mainās šajās četrās fāzēs.
- Abi sarkans un Dzeltens - Satiksme joprojām ir apstājusies, bet gaismas drīz pāries uz zaļu.
- Tie ierobežo vērtības, ko var iegūt mainīgais enum.
- Tie liek domāt par visām iespējamām vērtībām, ko enum var uzņemties.
- Tie ir konstants, nevis skaitlis, kas palielina lasāmību avota kods
Luksofora piemērs
Gaismas tiek kontrolētas, ierakstot vadības baita apakšējos trīs bitus. Tie ir izkārtoti kā bitu shēma zemāk binārā formā, kur RYG apzīmē trīs bitus. Ja R ir 1, deg sarkanā gaisma utt.
Šajā gadījumā ir viegli redzēt, ka četri iepriekš minētie stāvokļi atbilst vērtībām 4 = sarkans ieslēgts, 6= sarkans + Dzeltens abi ieslēgti, 1 = Zaļš ieslēgts un 2 = Dzeltens ieslēgts.
Ar šo funkciju
Klases izmantošana enumu vietā
Programmā C++ un C# mums būtu jāizveido klase un pēc tam pārslodze operators | atļaut VAI-ing veidu luksofori .
Izmantojot enums, mēs novēršam problēmas ar citiem bitiem, kas tiek piešķirti spuldzes vadības baitam. Iespējams, ka daži citi biti kontrolē pašpārbaudi vai “Zaļās joslas” slēdzi. Tādā gadījumā kļūda, kas ļauj iestatīt šos bitus parastā lietošanā, var radīt postījumus.
Lai pārliecinātos, mēs maskēsim fragmentus SetTrafficlights() funkciju tāpēc neatkarīgi no tā, kāda vērtība tiek nodota, tiek mainīti tikai trīs apakšējie biti.
Secinājums
Enums ir šādas priekšrocības: