Was sind überflüssige Klammern und wie erkenne ich die beim Java Programmieren?

6 Antworten

Überflüssige Klammern gibt es eigentlich kaum bei Java. Zumindest nicht, wenn man nicht mit der Intention an einen Code herangeht, überflüssige Klammern zu erstellen.

In der Hinsicht ist Java eigentlich recht streng. Das einzige, wo du praktisch unendlich viele Klammern machen kannst, sind Rechenoperationen. Da ist das genau wie in der Mathematik. Auch geschweifte Klammern {} kannst du so viele setzen, wie du willst. Das macht aber absolut keinen Sinn.

Bei vielen Dingen, die normalerweise Klammern {} benötigen, kann man diese weglassen, wenn sie nur einen Befehl enthalten. Man sollte sich das Ganze jedoch gut überlegen, gerade bei komplexerem Code kann das schnell zu Fehlern führen.

if (true) 
  // Anweisung

while (true) 
  // Anweisung

if (false) {
} else
  // Anweisung

Diese {} sind eigentlich nie wirklich "überflüssig"

Diese () nur bei Rechnungen wenn sie als Klammern überflüssig sind. Aber es gibt Regeln wann man die Klammern setzt, so sind sie eigentlich nie überflüssig.


AldoradoXYZ  30.05.2018, 11:34

Natürlich, geschweifte Klammern sind nie überflüssig....

public class Main {
    public static void main(String[] args) {
        {
            {
                {
                    {
                        System.out.println("nix überflüssig hier");
                    }
                }
            }
        }
    }
}

Funktioniert wunderbar und doch gibt es hier einige überflüssige geschweifte Klammern.

Gruß

0
BananaHawana  30.05.2018, 12:11
@AldoradoXYZ

Wenn man sowas macht, sollte man es mit dem Programmieren aber sofort sein lassen

0
AldoradoXYZ  30.05.2018, 12:15
@BananaHawana

Das ist halt ein ganz offensichtliches Beispiel um deine Aussage "nie überflüssig" zu widerlegen.

Man kann die Klammern aber auch so gut "verstecken", dass es eben nicht mehr so offensichtlich ist. Allerdings bedeutet das auch, dass der Code dann so oder so zu "unübersichtlich" ist.

Gruß

0
BananaHawana  30.05.2018, 12:27
@AldoradoXYZ

Schon klar aber ich habe überflüssig extra in Klammern gesetzt da sowas natürlich immer möglich ist

0

Eine Klammer auf { erstellt einen Gültigkeitsbereich. Eine Klammer zu } schließt diesen wieder.

Der Begriff den du suchst ist also: GÜLTIGKEITSBEREICH

google das mal

if(irgendwas) {
// gültigkeitsbereich der if verzweigung
}

Es gibt eigentlich zwei Arten von überflüssig.

  • Überflüssig, aber irrelevant
  • Überflüssig, aber relevant

Beim Irrelevanten, ist es nun mal egal, ob zu viele da sind. Beim Relevanten Typ wird dein Programm nicht starten, bzw der Code nicht funktionieren.

Das ist zwar ziemlich oberflächlich ausgedrückt, aber werde ich dir jetzt nicht erklären, wo Klammern hin müssen, wo sie da stehen können und wo sie nicht stehen dürfen

Ja es gibt bestimmte Regeln, aber meistens sagen die genau das Gegenteil, mache immer Klammern (sofern du von geschwungenen Klammern redest).

Aus dem einfach if:

if(condition)
  then

sollte danach

if(condition)
{
  then
}

werden.

Überflüssige Klammern sind dann nur noch solche welche irgendwo mitten im Programm stehen ohne zugehörige Anweisung. Also zB:

a = b;
{
   b = c;
}

Xearox  29.05.2018, 21:31

Oh gott, wie ich diese Schreibweise überhaupt nicht mag

if(condition)
{
  then
}
2
PeterKremsner  29.05.2018, 23:04
@Xearox

Mögen oder nicht mögen ist persönliche Geschmackssache. In den so gut wie allen Guidlines für sicherheitskritische Anwendungen steht es allerdings so drinnen.(Automotive, Space, Military)

Der Grund dafür ist relativ einfach. Wenn ein anderer Programmierer direkt unter die then Anweisung Code einfügt wird dieser nicht mehr vom if-Block erfasst.

Das klingt jetzt womöglich trivial, ich kenne allerdings Fälle wo genau so ein Fehler zu einem Totalschaden an einer Drone geführt hat.

Ist im Prinzip genau so wie die Verwendung von int Variablen in C Code. Das findet sich zwar nicht in allen Guidlines, hab es aber auch schon mal gesehen.

0
Xearox  30.05.2018, 16:04
@AldoradoXYZ

Ich habe zwar keine Ahnung was du mit

east-coast west-coast

meinst, aber ich meine, dass die geschweifte Klammer in der nächsten Zeile alleine steht.

Mag sein, dass die ein oder anderen damit besser zurecht kommen, aber ich finde das schrecklich. Wenn jemand an meinem Code arbeitet und der andere diese Schreibweise

{
  then
}

hat, der muss ich auf meinen Code anpassen, kann er es nicht, muss er sich was anderes suchen ^^

0
PeterKremsner  30.05.2018, 18:21
@Xearox

Achso darum gings, ich habe mich da eher darauf bezogen, dass man bei jeder if Anweisung Klammern setzen soll. Wo diese Klammern stehen ist auch nach den Coding Standards egal, sie müssen nur da sein.

In den meisten Unternehmen gibt es hald neben den Coding Standards auch noch Formattierungsguidlines und daran sollte man sich dann eben halten. Egal ob es einem gefällt oder nicht.

Bei uns wird die Formattierung zB automatisch vom Buildserver gemacht und egal wie du die Klammern setzt im git wird dann eben immer:

if(condition)
{
 then
}

stehen. Was ja bei Projekten mit mehreren Personen durchaus Sinnvoll ist wenn alle nur eine Formattierung verwenden. Macht den Code leichter lesbar und auch wartbar.

0
Xearox  30.05.2018, 19:22
@PeterKremsner

Absolut ... Und da ich mein eigener Chef bin und die Leute an meinem Code mit arbeiten, teilweise, gebe ich halt vor, wie es zu machen ist :D

0
PeterKremsner  30.05.2018, 20:32
@Xearox

Ja dann ist es natürlich deine Entscheidung ;)

Bei uns hat sich das ganze aus einer Sitzung mit den Mitarbeitern entwickelt und der Allman hatte mehr stimmen, daher verwenden wir ihn einheitlich.

Mittlerweile verwende ich ihn privat auch, weil ich anderen Code bei vielen Verschachtelungen mit dem K&R kaum mehr lesen kann.

0