Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:27.10.2013 20:40

Zdravím, jsou nějaké osvědčené postupy, jak psát enumy? Uvnitř třídy nebo venku. Ono je to celkem jedno, když je to public, protože když je uvnitř třídy, tak se přidá navíc jen jméno třídy a tečka. Zajímalo by mě, jak to píšete vy.

Odpovědět
27.10.2013 20:40
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:27.10.2013 20:47

Vzhledem k tomu, že mé enumy obsahují i konstruktory a další metody, považuji je za plnohodnotné třídy a jako takové mají právo být v samostatném souboru.

... když je uvnitř třídy, tak se přidá navíc jen jméno třídy a tečka

to nemůžeš myslet vážně. A co ti říká Démeteřin zákon?

Nahoru Odpovědět
27.10.2013 20:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:27.10.2013 21:06

To máš jako u každého enumu konstruktor a metody? Asi dělám něco špatně :(

Aha, takže podle toho zákonu je to celkem jasné; mají být mimo danou třídu (pokud ten enum potřebuje i někdo jiný) nebo se pletu?

Editováno 27.10.2013 21:07
Nahoru Odpovědět
27.10.2013 21:06
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:27.10.2013 21:11

Konstruktor a další metody mám uvnitř toho enumu.

Přesně tak. Zacházej s enumem jako s třídou. Pokud ji nikdo jiný nepotřebuje, můžeš ji umístit dovnitř.

Nahoru Odpovědět
27.10.2013 21:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:27.10.2013 21:13

A můžu se zeptat, k čemu je dobré mít u každého enumu konstruktor a metody? Nějaký dobrý příklad?

Nahoru Odpovědět
27.10.2013 21:13
Neaktivní uživatelský účet
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jan Vargovský:27.10.2013 21:15

Je to celkem jedno. Záleží na Tobě - já to teda vždycky dávám mimo třídu. Ale jestli to máš jako nějaký pomocný enum, který venku nebudeš používat tak ho můžeš nechat uvnitř (tak jako nested třídy).

Kit v C# to tuším ani nejde, maximálně přes extension metody ...

Editováno 27.10.2013 21:15
 
Nahoru Odpovědět
27.10.2013 21:15
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:27.10.2013 21:23

Netvrdím, že u každého enumu je potřebný konstruktor a třídy. Někdy se to však velmi dobře hodí:

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters

    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    // universal gravitational constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
}

Edit: No nazdar. Tohle je pro Javu. Zkus si to přepsat do C#.

Editováno 27.10.2013 21:24
Nahoru Odpovědět
27.10.2013 21:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:27.10.2013 21:29

V C# to nejde.

 
Nahoru Odpovědět
27.10.2013 21:29
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:27.10.2013 21:38

To je docela škoda, protože tímto způsobem se dá hezky zapouzdřit kus kódu i s relevantními konstantami a případnými výstupy, takže když vypíšu

Planet.MARS.surfaceGravity()

dostanu gravitační zrychlení na Marsu a nemusím to v jiné části programu počítat.

Nahoru Odpovědět
27.10.2013 21:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:27.10.2013 23:36

Tohle konkrétně by šlo implementovat taky :)

 
Nahoru Odpovědět
27.10.2013 23:36
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:27.10.2013 23:48
public class Planets
{
    public class Planet
    {
        private int n;
        public Planet(int n) { this.n = n; }
        public int GetN() {return n;}
    }

    public static readonly Planet MARS = new Planet(20);
    public static readonly Planet PLUTO = new Planet(20);
    //
    // TODO
    //
}

Třeba nějak takto => vím, že se ti nebude líbit statika.

 
Nahoru Odpovědět
27.10.2013 23:48
Avatar
Odpovídá na Jan Vargovský
Neaktivní uživatel:28.10.2013 0:51

proč se každý bojí statiky? :D

Nahoru Odpovědět
28.10.2013 0:51
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:28.10.2013 6:26

Zrovna tady je statika v pořádku. Jen mi to řešení připadá takové anemické, struktura by posloužila lépe.

Nahoru Odpovědět
28.10.2013 6:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:28.10.2013 6:28

Nebojím se statiky, ale používá se zbytečně často i tam, kde být nemá.

Nahoru Odpovědět
28.10.2013 6:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.