Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB6] Enum ?

rautamiekka [29.04.2009 13:20:08]

#

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 [29.04.2009 13:49:31]

#

tässä jotain infoa

rautamiekka [29.04.2009 22:34:48]

#

groovyb kirjoitti:

tässä jotain infoa

Tuolta sen ymmärsin että Enum:ta voi käyttää proseduurin kera määrittämällä sen perään As MääritettyEnum.

Antti Laaksonen [29.04.2009 23:08:33]

#

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ää.

Grez [29.04.2009 23:16:34]

#

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.

Antti Laaksonen [29.04.2009 23:33:12]

#

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).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta