Wie kann man eine Funktion mehrmals aufrufen, ohne, dass sie immer komplett neu startet?

verreisterNutzer  10.03.2022, 08:35

Kannst du mehr Details geben? Verstehe die Frage nicht.

GLNeutron 
Fragesteller
 10.03.2022, 08:37

In der Funktion werden halt Objekte initialisiert und diese sollen nicht immerwieder neu erstellt werden. Aber der Rest des Codes soll wiederholt werden und bezieht sich auf diese

8 Antworten

a) Eine Schleife kann schon für eine Separation sorgen:

void doSomething() {
  // initializing ...

  while (/* some condition */) {
    // do something ...
  }
}

Das heißt, du rufst die Methode nicht selbst neu auf. Der Teil in der Schleife kann dennoch noch in eine eigene Methode verlagert werden. Die Werte, die benötigt werden, übergibt man als Parameter.

void doSomething() {
  int someNumber = 1;

  while (/* some condition */) {
    doReallySomething(someNumber);
  }
}

void doReallySomething(int someNumber) {
  System.out.println(someNumber);
}

b) Teile die Funktion auf. Die Werte, die geteilt werden müssen, können global deklariert werden:

int someNumber;

void setup() {
  someNumber = 1;
}

void doSomething() {
  System.out.println(someNumber);
}

void start() {
  setup();
  doSomething();
  doSomething();
}

Wenn du willst, dass eine Funktion sich beim allerersten Aufruf anders verhält als bei allen Aufrufen danach, dann setze eine Variable auf einen Startwert und bei jedem Aufruf der Funktion wird + 1 zur Variable hinzu addiert, anschließend sorgst du dafür, dass mit if-Anweisungen innerhalb der Funktion sich die Funktion beim ersten Aufruf anders verhält, als bei allen nachfolgenden. Das erlaubt es auch genau zu wissen wie oft die Funktion schon aufgerufen wurde. Außerdem kannst du mit damit deutlich komplizierte Dinge machen, etwa, dass sich die Funktion bei jedem zweiten oder jeden dritten Aufruf anders verhält und so weiter.

Wie man das in Java macht kann ich dir allerdings auf die Schnelle nicht sagen.

Mach halt eine vernünftige Funktion (Konstruktor?), die alles initialisiert und rufe die nur einmal auf.

Woher ich das weiß:Hobby – Ich programmiere in meiner Freizeit mit Java.

Vor der Initialisierung einen Null-Check einbauen.

if (object == null) object = foo;

Die Initialisierung auslagern. Entweder in die Klasse direkt oder in eine andere Funktion.

Woher ich das weiß:Studium / Ausbildung – Informatik studiert und mit PCs & Technik beschäftigt