<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>javascript.de</title>
    <link>http://www.javascript.de/</link>
    <description>Deutsches JavaScript-Portal</description>
    <copyright>PULSAR interactive media GmbH</copyright>
    <lastBuildDate>Wed, 13 Apr 2005 14:41:59 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.7.5016.2</generator>
    <managingEditor>tb@pim.de</managingEditor>
    <webMaster>tb@pim.de</webMaster>
    <item>
      <trackback:ping>http://www.javascript.de/Trackback,guid,3070896b-38ea-40c0-b13a-3bdd42c1e66b.aspx</trackback:ping>
      <pingback:server>http://www.javascript.de/pingback.aspx</pingback:server>
      <pingback:target>http://www.javascript.de/PermaLink,guid,3070896b-38ea-40c0-b13a-3bdd42c1e66b.aspx</pingback:target>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Eine Funktion ist ein Block mit einer Liste (evt. auch leer) von Parametern, dem ein
      Name zugewiesen wird. Eine Funktion kann einen Resultatwert zurückgeben.
   </p>
        <pre>function meineFunktion(param1, param2, param3) {
    Anweisungen;
    return Ausdruck;
}
</pre>
        <p>
          <i>Beispiel:</i> Der ursprüngliche Algorithmus von Euklid zur Ermittlung des größten
      gemeinsamen Teilers: Es ist eine geometrische Lösung; die kleinere Strecke wird jeweils
      von der größeren abgezogen.
   </p>
        <pre>function gcd(a, b) {
    while (a != b) {
        if (a &gt; b) {
            a = a - b;
        } else {
           b = b - a;
        }
    }
    return a;
}
</pre>
        <p>
      Die Anzahl der Parameter beim Aufruf muss nicht zwingend mit der Anzahl der Parameter
      in der Funktionsdefinition übereinstimmen. Wenn beim Aufruf weniger Parameter angegeben
      werden, dann wird für die übrigen Parameter einfach der Wert undefined eingesetzt.
      Weiter kann innerhalb der Funktion auch über das <code>arguments</code>-Array auf
      die Parameter zugegriffen werden.
   </p>
        <p>
          <!--StartFragment -->
          <strong>Konstruktor-Funktionen</strong>
        </p>
        <p>
      Wird eine Javascript-Funktion genutzt, um mit <code>new</code> erstellte Objekte zu
      initialisieren, spricht man von einem Konstruktor. Innerhalb des Konstruktors kann
      das neue Objekt über die <code>this</code>-Variable angesprochen werden:
   </p>
        <pre>function meinObjekt () {
    this.zahl = 1;
}
</pre>
        <p>
      Neue Instanz erstellen:
   </p>
        <pre>var obj = new meinObjekt();
</pre>
        <p>
      Test der Eigenschaft "zahl". Es wird "1" ausgegeben.
   </p>
        <pre>window.alert(obj.zahl);
</pre>
        <p>
      Wenn Sie eigene Objekte mit gemeinsamen Eigenschaften erstellen wollen, ist es oftmals
      besser, diese Eigenschaften nicht im Konstruktor, sondern über die Prototyp-Kette
      zu erstellen (siehe Vererbung). Auf diese Weise benötigen die Javascript-Objekte weniger
      Speicher, denn die Eigenschaften werden nicht für alle Objekte, sondern nur für den
      Prototyp abgelegt.
   </p>
        <p>
          <strong>Private Eigenschaften</strong>
        </p>
        <p>
      Entgegen der vorherrschenden Meinung unterstützt Javascript private Eigenschaften,
      also Eigenschaften, die nur für das Objekt selbst sichtbar sind, nicht aber für andere
      Objekte. Im folgenden Beispiel wird die private Eigenschaft <code>zahl1</code> definiert,
      die nur durch die Methoden <code>getZahl1()</code> und <code>getNext()</code> ausgelesen
      bzw. verändert werden kann.
   </p>
        <pre>function MyClass() {
    var zahl1 = 1;
    this.getZahl1 = function () { return zahl1; }
    this.getNext  = function () { return ++zahl1; }
}
</pre>
        <p>
      neue Instanz der Klasse erstellen:
   </p>
        <pre>var obj = new MyClass;
</pre>
        <p>
          <code>zahl1</code> ist von außen nicht zugreifbar, daher wird "undefined" ausgegeben:
   </p>
        <pre>window.alert(obj.zahl1);
</pre>
        <p>
      Es wird "1" ausgegeben:
   </p>
        <pre>window.alert(obj.getZahl1());
</pre>
        <p>
      Es wird "2" ausgegeben
   </p>
        <pre>window.alert(obj.getNext());
</pre>
        <p>
          <strong>Funktionales Programmieren</strong>
        </p>
        <p>
      Da Funktionen in JavaScript vollwertige Objekte sind, sind sie Funktionen höherer
      Ordnung und können auch als Parameter an andere Funktionen übergeben werden.
   </p>
        <p>
      Die Lambda-Notation des Lambda-Kalküls wird so geschrieben:
   </p>
        <pre>function (x) { return x*x + 2*x + 10; }
</pre>
        <p>
      Beispiel für Verwendung einer Funktion höherer Ordnung:
   </p>
        <pre>Array.prototype.fold =
function (value, functor) {
    var result = value;
    for (var i = 0; i &lt; this.length; i++) {
        result = functor(result, this[i]);
    }
    return result;
}
var sum = [21,33,17,12].fold(0, function (a, b) { return a + b; })
</pre>
        <p>
      Ebenso ist es möglich <i>curried functions</i> zu schreiben:
   </p>
        <pre>function add(a, b) {
    if (arguments.length &lt; 1) return add;
    if (arguments.length &lt; 2) return function(c) { return a + c; }
    else return a + b;
}
</pre>
        <p>
          <em>Quelle: </em>
          <a href="http://www.wikipedia.org/">www.wikipedia.org</a>
        </p>
      </body>
      <title>Funktionen</title>
      <guid>http://www.javascript.de/PermaLink,guid,3070896b-38ea-40c0-b13a-3bdd42c1e66b.aspx</guid>
      <link>http://www.javascript.de/Funktionen.aspx</link>
      <pubDate>Wed, 13 Apr 2005 14:41:59 GMT</pubDate>
      <description>&lt;p&gt;
   Eine Funktion ist ein Block mit einer Liste (evt. auch leer) von Parametern, dem ein
   Name zugewiesen wird. Eine Funktion kann einen Resultatwert zurückgeben.
&lt;/p&gt;
&lt;pre&gt;function meineFunktion(param1, param2, param3) {
    Anweisungen;
    return Ausdruck;
}
&lt;/pre&gt;
&lt;p&gt;
   &lt;i&gt;Beispiel:&lt;/i&gt; Der ursprüngliche Algorithmus von Euklid zur Ermittlung des größten
   gemeinsamen Teilers: Es ist eine geometrische Lösung; die kleinere Strecke wird jeweils
   von der größeren abgezogen.
&lt;/p&gt;
&lt;pre&gt;function gcd(a, b) {
    while (a != b) {
        if (a &amp;gt; b) {
            a = a - b;
        } else {
           b = b - a;
        }
    }
    return a;
}
&lt;/pre&gt;
&lt;p&gt;
   Die Anzahl der Parameter beim Aufruf muss nicht zwingend mit der Anzahl der Parameter
   in der Funktionsdefinition übereinstimmen. Wenn beim Aufruf weniger Parameter angegeben
   werden, dann wird für die übrigen Parameter einfach der Wert undefined eingesetzt.
   Weiter kann innerhalb der Funktion auch über das &lt;code&gt;arguments&lt;/code&gt;-Array auf
   die Parameter zugegriffen werden.
&lt;/p&gt;
&lt;p&gt;
   &lt;!--StartFragment --&gt;&lt;strong&gt;Konstruktor-Funktionen&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   Wird eine Javascript-Funktion genutzt, um mit &lt;code&gt;new&lt;/code&gt; erstellte Objekte zu
   initialisieren, spricht man von einem Konstruktor. Innerhalb des Konstruktors kann
   das neue Objekt über die &lt;code&gt;this&lt;/code&gt;-Variable angesprochen werden:
&lt;/p&gt;
&lt;pre&gt;function meinObjekt () {
    this.zahl = 1;
}
&lt;/pre&gt;
&lt;p&gt;
   Neue Instanz erstellen:
&lt;/p&gt;
&lt;pre&gt;var obj = new meinObjekt();
&lt;/pre&gt;
&lt;p&gt;
   Test der Eigenschaft "zahl". Es wird "1" ausgegeben.
&lt;/p&gt;
&lt;pre&gt;window.alert(obj.zahl);
&lt;/pre&gt;
&lt;p&gt;
   Wenn Sie eigene Objekte mit gemeinsamen Eigenschaften erstellen wollen, ist es oftmals
   besser, diese Eigenschaften nicht im Konstruktor, sondern über die Prototyp-Kette
   zu erstellen (siehe Vererbung). Auf diese Weise benötigen die Javascript-Objekte weniger
   Speicher, denn die Eigenschaften werden nicht für alle Objekte, sondern nur für den
   Prototyp abgelegt.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Private Eigenschaften&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   Entgegen der vorherrschenden Meinung unterstützt Javascript private Eigenschaften,
   also Eigenschaften, die nur für das Objekt selbst sichtbar sind, nicht aber für andere
   Objekte. Im folgenden Beispiel wird die private Eigenschaft &lt;code&gt;zahl1&lt;/code&gt; definiert,
   die nur durch die Methoden &lt;code&gt;getZahl1()&lt;/code&gt; und &lt;code&gt;getNext()&lt;/code&gt; ausgelesen
   bzw. verändert werden kann.
&lt;/p&gt;
&lt;pre&gt;function MyClass() {
    var zahl1 = 1;
    this.getZahl1 = function () { return zahl1; }
    this.getNext  = function () { return ++zahl1; }
}
&lt;/pre&gt;
&lt;p&gt;
   neue Instanz der Klasse erstellen:
&lt;/p&gt;
&lt;pre&gt;var obj = new MyClass;
&lt;/pre&gt;
&lt;p&gt;
   &lt;code&gt;zahl1&lt;/code&gt; ist von außen nicht zugreifbar, daher wird "undefined" ausgegeben:
&lt;/p&gt;
&lt;pre&gt;window.alert(obj.zahl1);
&lt;/pre&gt;
&lt;p&gt;
   Es wird "1" ausgegeben:
&lt;/p&gt;
&lt;pre&gt;window.alert(obj.getZahl1());
&lt;/pre&gt;
&lt;p&gt;
   Es wird "2" ausgegeben
&lt;/p&gt;
&lt;pre&gt;window.alert(obj.getNext());
&lt;/pre&gt;
&lt;p&gt;
   &lt;strong&gt;Funktionales Programmieren&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   Da Funktionen in JavaScript vollwertige Objekte sind, sind sie Funktionen höherer
   Ordnung und können auch als Parameter an andere Funktionen übergeben werden.
&lt;/p&gt;
&lt;p&gt;
   Die Lambda-Notation des Lambda-Kalküls wird so geschrieben:
&lt;/p&gt;
&lt;pre&gt;function (x) { return x*x + 2*x + 10; }
&lt;/pre&gt;
&lt;p&gt;
   Beispiel für Verwendung einer Funktion höherer Ordnung:
&lt;/p&gt;
&lt;pre&gt;Array.prototype.fold =
function (value, functor) {
    var result = value;
    for (var i = 0; i &amp;lt; this.length; i++) {
        result = functor(result, this[i]);
    }
    return result;
}
var sum = [21,33,17,12].fold(0, function (a, b) { return a + b; })
&lt;/pre&gt;
&lt;p&gt;
   Ebenso ist es möglich &lt;i&gt;curried functions&lt;/i&gt; zu schreiben:
&lt;/p&gt;
&lt;pre&gt;function add(a, b) {
    if (arguments.length &amp;lt; 1) return add;
    if (arguments.length &amp;lt; 2) return function(c) { return a + c; }
    else return a + b;
}
&lt;/pre&gt;
&lt;p&gt;
   &lt;em&gt;Quelle: &lt;/em&gt;&lt;a href="http://www.wikipedia.org/"&gt;www.wikipedia.org&lt;/a&gt;
&lt;/p&gt;</description>
      <category>Die Sprache|4 - Funktionen</category>
    </item>
  </channel>
</rss>