Alex: in while-schleife subroutine aufrufen oder nicht

hi,

ich habe eine while-schleife die ca. 40 mal durchläuft, kann ich jetzt immer eine subroutine aufrufen oder wäre es besser den programmcode in die schleife zu schreiben, weil das prog sonst immer wieder die subroutine aufrufen muss.
die subroutine wäre vorteilhaft weil ich sonst den quellcode der in der subroutine wäre zweimal ins prog schreiben müsste.

$sql = qq{select * from tabelle where h=1}; ### einmal mit suche
while(@asd = $sth->fetchrow_array) {
subroutin();
}

#danach

$sql = qq{select * from tabelle}; ### und einmal ohne suche
while(@asd = $sth->fetchrow_array) {
subroutin();
}

  1. hi,

    ich habe eine while-schleife die ca. 40 mal durchläuft, kann ich jetzt immer eine subroutine aufrufen oder wäre es besser den programmcode in die schleife zu schreiben, weil das prog sonst immer wieder die subroutine aufrufen muss.
    die subroutine wäre vorteilhaft weil ich sonst den quellcode der in der subroutine wäre zweimal ins prog schreiben müsste.

    Subroutinen sind immer vorteilhaft, weil:

    • das Script bekommt eine Struktur welche übersichtlich ist,
    • unter der Verwendung von Variablenübergaben und Rückgabewerten eine Subroutine universell gemacht werden kann.

    Tipp:
    use strict;

    Und deklariere in jeder Subroutine eigene Variablen mit my(). Spätestens wenn du mal vor der Aufgabe stehst ein Script über 20 DIN A4 Seiten zu schreiben wirst du um eine strukturierte Programmierung nicht mehr herum kommen. Strict ist da sehr hilfreich, es hilft ungemein beim Debuggen wenn mal was nicht läuft. Beende jede Subroutine mit return; ...

    Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Tipp:
      use strict;

      Und deklariere in jeder Subroutine eigene Variablen mit my(). Spätestens wenn du mal vor der Aufgabe stehst ein Script über 20 DIN A4 Seiten zu schreiben wirst du um eine strukturierte Programmierung nicht mehr herum kommen. Strict ist da sehr hilfreich, es hilft ungemein beim Debuggen wenn mal was nicht läuft. Beende jede Subroutine mit return; ...

      vielen dank, das weiss ich auch, das stück programmcode sollte nur darstellen wie ich das meine. :-)

  2. Hi,

    kann ich jetzt immer eine subroutine aufrufen

    natürlich, warum denn nicht?

    oder wäre es besser den programmcode in die schleife zu schreiben, weil das prog sonst immer wieder die subroutine aufrufen muss.

    Was wäre daran schlimm?

    $sql = qq{select * from tabelle where h=1}; ### einmal mit suche
    while(@asd = $sth->fetchrow_array) {

    Ich vermute nebenbei, Du möchtest

    perldoc -f my
    perldoc strict
    perldoc warnings

    lesen.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. ich habe eine while-schleife die ca. 40 mal durchläuft, kann ich jetzt immer eine subroutine aufrufen oder wäre es besser den programmcode in die schleife zu schreiben, weil das prog sonst immer wieder die subroutine aufrufen muss.

    Solche Gedanken brauchst du dir nur zu machen, wenn du auf assembler ebene absolut Zeit kritische Programme schreibst.

    Der Zeitaufwand um eine funktion aufzurufen sollte heutzutage vernachlässigbar sein.

    die subroutine wäre vorteilhaft weil ich sonst den quellcode der in der subroutine wäre zweimal ins prog schreiben müsste.

    $sql = qq{select * from tabelle where h=1}; ### einmal mit suche
    while(@asd = $sth->fetchrow_array) {
    subroutin();
    }

    #danach

    $sql = qq{select * from tabelle}; ### und einmal ohne suche
    while(@asd = $sth->fetchrow_array) {
    subroutin();
    }

    Wobei ich mir nicht sicher bin ob man das nicht optimieren kann. Je nach dem was du in der Schleife machst, kann es durchaus sinnvoll nur das zweite Konstrukt zu verwenden und dort in der schleife die Bedingung abzufragen.
    Das hängt aber auch von der Anzahl der daten ab.

    Struppi.

    1. Hallo,

      $sql = qq{select * from tabelle where h=1}; ### einmal mit suche
      while(@asd = $sth->fetchrow_array) {
      subroutin();
      }

      ...

      $sql = qq{select * from tabelle}; ### und einmal ohne suche
      while(@asd = $sth->fetchrow_array) {
      subroutin();
      }
      ... kann es durchaus sinnvoll nur das zweite Konstrukt zu verwenden und dort in der schleife die Bedingung abzufragen.

      ... oder aber einen allgemeineren Ansatz in eine Subroutine zu packen und das SQL-Statement aufgrund der übergebenen Parameter zusammenbauen;-)

      Grüße
        Klaus