Archive for August 2011


Default-Werte für Methoden-Argumente sollten null sein

August 4th, 2011 — 9:37pm

Oft genug sieht man Methodendefinitionen mit Standardwerten für Argumente, da viele Programmiersprachen das Überladen von Methoden, wie z.B. in Java, nicht unterstützen.

Ein einfaches Beispiel einer Methode mit zwei optionalen Argumenten:
function connect($host, $port = 1234, $timeout = 60) { ... }

Möchte man nun diese Methode verwenden, und den letzten der beiden Parameter überschreiben, ist man gezwungen, auch den zweiten an zu geben,
connect('server', 1234, 10);

Eigentlich meint man aber
connect('server', {default}, 10);

Und genau hier liegt das Problem: das Übernehmen des Standardwertes aus der Definition führt dazu, dass bei einer Änderung des Standardwertes sich diese Änderung nicht auf den Teil des Codes auswirkt, in dem die Methode aufgerufen wird — obwohl das eigentlich das Verhalten ist, dass der Verwender erwartet hätte.

Deswegen sollten Standardwerte immer mit null definiert werden:
function connect($host, $port = null, $timeout = null) {
    if ($port === null) $port = 1234;
    if ($timeout === null) $timeout = 10;
    ...
}

So muss der Aufrufer Standardwerten nur Beachtung schenken, wenn er sie explizit überschreiben will. Ansonsten kann er einfach null übergeben:
connect('server', null, 10);

Übrigens hat Python, in dem das Überladen von Methoden nicht unterstützt wird, eine clevere Lösung dafür: beim Aufrufen einer Methode kann man die Argumente explizit mit ihrem Namen ansprechen.

1 comment » | Technik

Auszeichnung zum Top Coder erhalten

August 4th, 2011 — 8:00am

Markus Tacker, Gewinner beim Top Coder Gewinnspiel der Mayflower GmbHBeim Top Coder Gewinnspiel der Mayflower GmbH habe ich mit meiner Einreichung den ersten Preis gewonnen: ein iPad 2.

Für das Gewinnspiel mussten drei Aufgaben erfüllt werden:

  1. Gesucht wurde ein SQL-Query mit dem die Anzahl der P und H in einem String ermittelt werden kann.
  2. Gesucht wurde eine Funktion, die aus einem gegebenen String durch vertauschen, hinzufügen und entfernen von Zeichen den Namen einer PHP-Funktion ermittelt.
  3. Gesucht wurde die Größe eines MySQL-Indexes, wenn statt Bytes Trytes verwendet werden.

Comment » | Kurioses

Back to top