TobiasBuschi: benötigt "return" in einer Funktion resourcen?

Hallo allerseits

ist vieleicht eine dumme Frage, aber benötigt das return am Ende einer Funktion Resourcen auch wenn der Return-Wert nicht gebraucht wird?

ich habe sowas:

  
  
class xy{  
  $str = '';  
  
  function out($blabla){  
     $this->str .= $blablabla;  
     return $this->str;  
  }  
}  
  

xy() wird jetzt vieleicht einige 1000 mal aufgerufen und erst am schluss wird der Return-Wert gebraucht.

oder wäre das hier resourcenschonender?

[php lang=php]

class xy{
  $str = '';

function addStr($blabla){
     $this->str .= $blablabla;
  }
  function out(){
     return $this->str;
  }
}

[/php]

mfg Tobias Buschor

  1. Hallo,

    ja tut sie, denn die Werte müssen nämlich irgendwo (stack) festgehalten werden, bis die prozedur zurückkehrt.
      ob das nun ein unterschied bei php ist, wenn man referenzen oder ganze objekte z.b. zurückgibt, das weiss ich nicht, sollte aber eigentlich kaum ins gewicht fallen.

    gruss

    --
    no strict;
    no warnings;
    "May I introduce you to OSX. It even runs on cheap intel hardware."
    "I doubt that. It could run on cheap intel hardware, but Apple will restrict to expensive Apple hardware, which consists of cheap Intel hardware."
  2. Hallo,

    [php lang=php]

    class xy{
      $str = '';

    function addStr($blabla){
         $this->str .= $blablabla;
      }
      function out(){
         return $this->str;
      }
    }

    [/php]

    Mir personlich gefällt zweitere Version auch dadurch besser, weil sie (etwas[1]) klarer die Funktionsweise der einzelnen Funktionen widerspiegelt. Es fördert imho die Leserlichkeit des Codes, wenn man
    1.) Nicht zwei unterschiedliche Funktionionalitäten in einer Funktion zusammenpackt.
    2.) Die Funktionen so benennt, dass sofort klar ist, was sie macht. Dadurch erspart man sich eine Menge Kommentierarbeit;-)

    Grüße
      Klaus

    [1] nur 'etwas' deshalb, weil z.B. die Bezeichnung 'out' für mich suggeriert, dass hier etwas an eine externe Resource (z.B. Datei/Browser) ausgegeben wird. besser wäre imho so etwas wie getStr(), in Anlehnung an die Funktion addStr().
    Und ich gehe jetzt einmal davon aus, dass die Klasse nicht 'xy' heissen soll;-)

  3. Hallo TobiasBuschi,

    ist vieleicht eine dumme Frage, aber benötigt das return am Ende einer Funktion Resourcen auch wenn der Return-Wert nicht gebraucht wird?

    Das hängt stark davon ab, wie PHP das implementiert. Du kannst, so weit ich weiß, eine Funktion gar nicht als void deklarieren und vermutlich kannst Du auch $bla = blub() schreiben, wenn die Funktion niemals etwas zurück gibt.
    D.h. irgend ein impliziter Rückgabewert wird vermutlich immer produziert.

    Unabhängig davon, macht es absolut keinen Sinn in diesem Zusammenhang über Performace nachzudenken. Wenn Du tatsächlich in die Situation kommen solltest, dass Du an solchen Kleinigkeiten von Hand rumoptiomieren musst, ist eine Scriptsprache ziemlich sicher ungeeignet.
    Wie Performant Deine Scripte sind, hängt ganz wesentlich davon ab, ob Du eine für das Problem geeignete Architektur und geignete Algorithmen verwendest.

    Wie Klaus würde ich aber auch die 2. Variante mit geschickter benannten Methoden bevorzugen. z.B. appendStr und getStr.

    Methoden, die eine Eigenschaft des Objekts zurückgeben, sollten nach idR. nicht noch irgend welche Seiteneffekte haben. Das Auslesen und das Ändern des Objektzustands zu trennen, macht die Schnittstelle klarer.

    Grüße

    Daniel