Missään ei selkeästi sanota mitä käytttöä o Enumilla ja/tai mikä se on. Sen ainoan sain selville että sillä päästään jossain asiassa helpolla.
groovyb kirjoitti:
Tuolta sen ymmärsin että Enum:ta voi käyttää proseduurin kera määrittämällä sen perään As MääritettyEnum
.
Usein on tarvetta muuttujalle, jolla on pieni joukko mahdollisia arvoja. Esim. pelaajan suunta voi olla alas, viikonpäivä voi olla keskiviikko tai pelikortin maa voi olla risti.
Tällaisessa tilanteessa voi tietysti aina käyttää kokonaislukutyyppiä ja valita jokin tapa, jolla luvut vastaavat eri arvoja. Esim. pelaajan suunnat voivat olla 1 (ylös), 2 (alas), 3 (vasen) ja 4 (oikea). Tällöin kuitenkin koodin lukijan on vaikeaa tietää, mitä luvut tarkoittavat.
Dim PelaajanSuunta As Integer PelaajanSuunta = 2 ' mitä tämä tarkoittaa?
Toinen vaihtoehto on käyttää Enum-määritystä seuraavasti:
Enum Suunta YLOS ALAS VASEN OIKEA End Enum
Nyt koodin pystyy kirjoittamaan paljon selkeämmin:
Dim PelaajanSuunta As Suunta PelaajanSuunta = ALAS ' tästä ei voi erehtyä
Siis Enum on vaihtoehtoinen merkintä, jota voi käyttää, jos siitä tuntuu olevan hyötyä itselle. Koodin määrä on toisaalta vähän suurempi, mutta koodista voi saada toisaalta paremmin selvää.
Antin viesti on ihan hyvä, mutta tässä nyt on kuitenkin pieni puristin urputus. Seuraavaa ei ehkä kannata lukea ollenkaan, jos vaan haluaa tietää miksi Enumeita käytetään...
Antti Laaksonen kirjoitti:
Tällaisessa tilanteessa voi tietysti aina käyttää
kokonaislukutyyppiä ja valita jokin tapa, jolla luvut vastaavat eri arvoja....
Toinen vaihtoehto on käyttää Enum-määritystä
Eihän tuo ole "toinen vaihtoehto" vaan ensimmäinen vaihtoehto järkevämmin toteutettuna. Eli Enumissa nimenomaan käytetään kokonaislukutyyppiä ja valitaan tapa, jolla luvut vastaavat eri arvoja. Älykkyys tulee siitä, että ei käytetä numeroita suoraan, vaan niitä annettuja nimiä.
Lisäksi VB:n editori tuossa enumin tapauksessa tarjoaa suoraan oikeita vaihtoehtoja (esim. Antin ihan viimeiselle koodiriville), niin ei tarvitse itse muistaa miten nuo arvot on numeroitu.
Olet oikeassa, ensimmäinen viestini on vähän epätarkka. Kannattaa tosiaan pitää mielessä, että muuttujan arvo on edelleen pohjimmiltaan luku, jolle on vain annettu helpompi nimi.
Esimerkissäni YLOS vastaa lukua 0, ALAS lukua 1, VASEN lukua 2 ja OIKEA lukua 3 (eli nimille jaetaan lukuja järjestyksessä nollasta alkaen). Tämän voi tarkistaa näin:
Dim PelaajanSuunta As Suunta PelaajanSuunta = ALAS MsgBox PelaajanSuunta ' 1
Yhtä hyvin voisi kirjoittaa myös näin:
Dim PelaajanSuunta As Suunta PelaajanSuunta = 1 ' suunta alas
Jopa tämä on mahdollista, vaikka luvulle 123 ei ole nimeä:
Dim PelaajanSuunta As Suunta PelaajanSuunta = 123 ' ???
Siis vaikka muuttujan tyyppi on Suunta, siihen voi laittaa mitä tahansa lukuja (lukualue on ilmeisesti sama kuin Long-muuttujassa).
Aihe on jo aika vanha, joten et voi enää vastata siihen.