Welcome on MasterOf13FPS! MasterOf13FPS

Register today or sign up if you are already a member and never miss any cool content again :)

Besseres Coding / Better Coding

MasterOf13FPS

Administrator
Staff member
Administrator
MasterOf13FPS
Joined
Jul 11, 2020
Messages
0
Reaction score
25
Points
0
This Post is written in German. To view it in other languages I recommend https://www.deepl.com/translator .

Da ich hier oft ugly Code gesehen habe, gebe ich hier ein paar Tipps, mit denen Ihr Euren Codingstyle verbessern könnt. Das bezieht sich eigentlich auf Anfänger, also erwartet keine NASA Technology Tipps. Theoretisch ist es keine Totsünde, anders zu programmieren. Aber es gibt bestimmte Regeln, an die man sich halten sollte (wie DIN Regeln in einem Brief).

Fangen wir mit etwas Einfachem an: Sprache

Es es genormt auf Englisch zu programmieren. Englisch ist DIE Informatik Sprache. Jeder, der also etwas im Bereich der Informatik macht, sollte dies auf Englisch machen, damit das, was er macht, auch die meisten verstehen.

Hält mal die Regel ein, wird aus
Code:
public void MachEtwasBesonderes(long Zeit) {
    boolean Eins = Math.random() > 0.5;
    if(Eins == true){
        ...
    }
}
ein schöneres
Code:
public void DoSomethingSpecial(long Time) {
    boolean One = Math.random() > 0.5;
    if(One == true){
        ...
    }
}



Dann gibt es "name conventions". Sie bestimmen, wie ein Name geschrieben wird.
Ich fasse Euch das Grobe zusammen, aber hier könnt Ihr mehr dazu lesen: https://www.geeksforgeeks.org/java-naming-conventions/

Klassennamen und Interfaces: Jeder Buchstabe am anfang jedes inneren Wortes wird groß geschrieben, der Rest klein.
Code:
interface SampleInterface
class SampleClassName implements SampleInterface

Namen von Methoden: der erste Buchstabe klein, sonst am anfang jedes inneren Wortes groß.
Code:
void doSomethingSpecial();

Bei Variabeln gibt es schon mehr Regeln:
normale Variabeln:
- möglichst ein Wort (erster Buchstabe klein)
- bei temporähren Variablen werden in den meisten fällen i, j, k, m, n bei ints genutzt, c, d, e bei chars
Code:
String name = "Unix";
int year = 1970;

konstante Variablen:
- alles groß
- innere Wörter werden mit _ getrennt
Code:
static final int MCP_VERSION = 910;
static final String MINECRAFT_VERSION = "1.8.0";

Bei Packages wird alles klein geschrieben. Sie sind oft Domains in umgedreht
Code:
package com.name.subpackage;
import net.minecraft.client.Minecraft;

Wendet man alles auf den Code von oben an, sieht er so aus
Code:
public void doSomethingSpecial(long time) {
    boolean one = Math.random() > 0.5;
    if(one == true){
        ...
    }
}



Ein weiterer Tipp von mir ist, so wenig Code zu benutzen, dass das Programm noch funktioniert, aber so viel Code zu benutzen, dass man einfach nachvollziehen kann, was der Code macht. Außerdem ist es hilfreich, D, F oder L bei doubles, floats oder longs hinzuzufügen.

Aus
Code:
public void doSomethingSpecial(long time) {
    boolean rdm = Math.random() > 0.5;
    boolean valid = time > 1000;
    if(rdm == true){
      if(valid == true) {
        ...
      }
    }
}
wird
Code:
public void doSomethingSpecial(long time) {
    boolean rdm = Math.random() > 0.5D;
    boolean valid = time > 1000L;
    if(rdm && valid){
      ...
    }
}

Um an Verständlichkeit zu gewinnen, hilft es, Kommentare hinzuzufügen.
Code:
/**
  * Reverses the order of the elements in the specified list.<p>
  *
  * This method runs in linear time.
  *
  * @param  list the list whose elements are to be reversed.
  * @throws UnsupportedOperationException if the specified list or
  *         its list-iterator does not support the <tt>set</tt> operation.
  */
 public static void reverse(List<?> list) {
 ...
(Das kommt aus java.util.Collections.java L412-L421)



Das letzte, was ich Euch mitgeben möchte, ist: performancereicheres Coden

Das Ziel ist es, so wenig aufwendige Berechnungen durchzuführen wie möglich. Das geht z. B. indem man das Ergebnis von einer Berechnung, die öfter ausgeführt wird, einfach übergibt.

Aus
Code:
public void update(long time){
   doSomethingSpecial(time);
   doOtherSpecialThings(time);
}

public void doSomethingSpecial(long time) {
    if(heavyCalculation(time)){
      ...
    }else{
      ...
   }
}

public void doOtherSpecialThings(long time) {
    if(heavyCalculation(time)){
      ...
    }else{
      ...
   } 
}
wird
Code:
public void update(long time){
   boolean calculated = heavyCalculation(time);
   doSomethingSpecial(calculated);
   doOtherSpecialThings(calculated);
}

public void doSomethingSpecial(boolean calculated) {
    if(calculated){
      ...
    }else{
      ...
   }

}

public void doOtherSpecialThings(boolean calculated) {
    if(calculated){
      ...
    }else{
      ...
   }  
}

Das war mein erster Post, ich hoffe er ist nicht ganz so schlecht geworden. Viel Spaß beim Coden.

Edit: Danke an TheFootSees für das Aufmerksammachen eines Fehlers
 
Last edited by a moderator:
Naja
final int MCP_VERSION = 910;
final String MINECRAFT_VERSION = "1.8.0";
sind nicht wirklich konstanten. immerhin muss ihr wert nicht immer gleich sein
 
Naja
final int MCP_VERSION = 910;
final String MINECRAFT_VERSION = "1.8.0";
sind nicht wirklich konstanten. immerhin muss ihr wert nicht immer gleich sein
1. Das sind nur Beispiele
2. Solange ihre Werte nicht durch das Programm selber verändert werden, können es Konstanten sein.
 
1. Das sind nur Beispiele
2. Solange ihre Werte nicht durch das Programm selber verändert werden, können es Konstanten sein.
man schreibt sie trotzdem nicht groß. Man schreibt sie erst groß wenn sie wirklich konstant sind, also auch den static modifier haben
 
man schreibt sie trotzdem nicht groß. Man schreibt sie erst groß wenn sie wirklich konstant sind, also auch den static modifier haben
Habe die static modifier hinzugefügt
 
Das "== true" in den ganzen Abfragen ist auch unnötig af
 
Das "== true" in den ganzen Abfragen ist auch unnötig af

Ein weiterer Tipp von mir ist, so wenig Code zu benutzen, dass das Programm noch funktioniert, aber so viel Code zu benutzen, dass man einfach nachvollziehen kann, was der Code macht. Außerdem ist es hilfreich, D, F oder L bei doubles, floats oder longs hinzuzufügen.
Das wird ja hier weg gemacht...
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top