# Switch-Anweisung einklappen



## import java.dev.org (23. Jul 2016)

Hi,
ich hab jetzt n ziemlich großes Programm mit einer ziemlich großen Switch-Anweisung (>500 Zeilen und es wird noch deutlich mehr xD )
Das Problem ist jetzt, dass das ziemlich unübersichtlich ist, vor allem wenn ich dann dauern an den Anfang der Klasse muss, dann wieder an den Schluss und so weiter... Bei mir kann man allerdings nur Klassen und deren Methoden einklappen. Bei Microsoft Visual Studio zum Beispiel kann man jede if-Abfrage und so einklappen.
Zu meiner Frage: Kann man auch bei IntelliJ einstellen, dass ich Switch-, if-, while-Anweisungen/Schleifen einklappen kann? Wäre wirklich hilfreich!

Vielen Dank schonmal für alle Antworten!

Typ


----------



## JCODA (23. Jul 2016)

Ich kann dir zwar keine Lösung für dein eigentliches Problem anbieten, aber mich würde es schon interessieren, warum es solch ein großes switch überhaupt gibt. Mir scheint als könnte man das bestimmt schöner lösen.


----------



## Tobse (23. Jul 2016)

Ja, man kann IntelliJ so einstellen, dass man jeden Block einklappen kann. Aber ich sehe das wie JCODA: du hast vie zu viel Code in einer Datei. Und switch-statements sollten niemals länger als ein paar Zeilen sein; es macht in den meisten Fällen mehr sinn, if- und switch-abfragen durch Polymorphie zu ersetzen.


----------



## import java.dev.org (23. Jul 2016)

@JCODE Ich programmiere ein Minecraft Plugin, bei dem die Anzahl der abgebauten Blöcke eines Spielers gespeichert werden sollen, und zwar in Kategorien (z.B. Baumaterial, Dekoration, usw.) Und dafür muss ich überprüfen, welchen Stein der Spieler abgebaut hat, um diesen, dann einer Kategorie zuzuordnen.
Mir war auch von Anfang an klar, dass Switch hier meine letzte Lösung wäre, aber da ich nichts anderes gefunden habe, musst ich das leider verwenden 
Tobse, Danke auch für Deine Antwort, aber ich weiß irgendwie nicht, wie mir hier Polymorphie helfen soll?

Edit: Ja man kann es sicher schöner lösen, ich wäre auch hier für Hilfe sehr dankbar


----------



## JCODA (23. Jul 2016)

In welcher "Form" liegt die Information der Kategorie vor? 
Möchtest du nur die Zuordnung machen? Dann könnte es sich anbieten Listen zu erstellen, die die Blöcke beinhalten, und dann mit contains() abzufragen, ob vorhanden.


----------



## mrBrown (23. Jul 2016)

UU könnte man eine Map statt dem switch nutzen. Die mappt Stein auf Kategorie, ist dann auch leichter erweiterbar als ein switch, da man nur Daten eintragen muss (die man dann auch extern speichern könnte) und nicht den Code ändern muss.


----------



## import java.dev.org (23. Jul 2016)

Lol xD Das sind echt super Ideen, wieso bin ich nicht da rauf gekommen ?
Vielen vielen Dank!!! Damit hat sich auch meine eigentliche Frage geklärt!


----------



## Baldur (25. Jul 2016)

Ich würd da vielleicht schon soweit gehn und die Information ganz aus dem Quellcode rausnehmen.
Ggf. kannst du eine CSV- oder Properties-Datei o.ä. schreiben, die deine Zuordnungen beinhaltet und daraus dann die Information z.B. in eine HashMap einlesen.

Aber zur ursprünglichen Frage:
In IntelliJ kann man auch eigene Codefoldblöcke mti speziellen Kommentaren anlegen:

```
//<editor-fold desc="Description">
Lustiger Code
//</editor-fold>

//region Description
Anderer Code
//endregion
```

Einfach erreichbar via Code / Surround with...

Die erste Variante funktioniert übrigens auch in Netbeans.

Aber generell, wenn man Funktionen hat die mehrere hundert Zeilen lang sind, sollte man sich erst mal in die Ecke stellen und sich schämen


----------

