Skip to content

Übersichtliches Initialisieren mit switch..case

2004 July 31
by Sven Busse

Juten Tach,

beim Initialisieren einer Flash Anwendung sind meist viele Dinge hintereinander zu erledigen. Manche Dinge könen ganz einfach in einem Skript hintereinander weg geschrieben werden, andere sind asynchron, sprich eine XML Datei muss geladen werden, weil da Konfigurationen drin stehen, oder es müssen Subfilme geladen werden, oder man müsste auch erstmal den Hauptfilm komplett laden usw.

Das kann man dann ja nicht mehr so schön hintereinander schreiben, denn dazwischen kommen ja dann onLoad Befehle, oder irgendwelche Preloader Basteleien, sodass sich letztlich die Initialisierung über viele Methoden zieht, bis alles fertig ist.

Ich fand das immer ein wenig unübersichtlich, weil nun die Initialisierung nicht mehr in einer Methode kontrolliert wird, sondern man immer von Methode zu Eventhandler zu noch einer Methode usw. springt.

Also mach’ ich das jetzt immer so, dass ich mir eine init Methode mit einer step Variable als Parameter schreibe und einem switch..case Konstrukt, um in den aktuellen step zu springen, z.B. so (in einer Klasse):

private var initStep : Number = 0;
private var myXML : XML = new XML ();

public function nextStep () : Number{
  return ++ initStep;
}

public function init (step) : Void{
  switch (step){
    case 1 :
      trace ("Hier mach' ich den ersten Schritt.");
      machWas ();
      break;
    case 2 :
      myXML.ignoreWhite = true;
      myXML.load ("vonirgendwo.xml");
      var preload = setInterval (this, "whileLoading", 100);
      break;
    case 3 :
      trace ("Juhu, fast fertig");
      machDasLetzte ();
      break;
  }
}

private function machWas (){
  // tolle Sachen   init(nextStep()); //  <------- Hier
}

private function machDasLetzte (){
  // tolle Sachen   trace ("FERTIGGG!!!");
}

private function whileLoading (){
  if ( ! myXML.load){
    zeigDenPreloader (myXML.getBytesLoaded, myXML.getBytesTotal);
  } else {
    clearInterval (preload);
    init (nextStep ()); //  <------- Und hier
  }
}

// Irgendwann dann:init (nextStep ());

Der Vorteil davon ist nun, dass man in der init Methode doch recht übersichtlich die einzelnen Schritte nacheinander nachvollziehen kann, weil halt immer, wenn ein asynchroner Schritt vorbei ist, die init mit dem nächsten Step aufgerufen wird.

Ja, so ist das. Oder nich'?

Share this:
  • email
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Posterous
  • Digg
  • Technorati
  • Slashdot
  • Suggest to Techmeme via Twitter
  • StumbleUpon
  • Reddit
  • Netvibes
  • LinkedIn
  • Mixx
No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS