dedlfix: PHP - Zahlen mit Nullen auffüllen

Beitrag lesen

Tach!

Mal noch ein Beispiel, wie es ja praktisch immer für die Weiterverarbeitung von DB-Abfragen genutzt wird.

while ($a = $b) :
   // do something
endwhile;

Besser ist, statt $b sowas wie fetch() zu notieren.

elegant?
lesbar?
für wen?
für wen nicht?

Für den, der das schon mal gemacht hat, ist das die einfachste Lösung unter den gegebenen Voraussetzungen, sprich: so wie die Fetch-Funktionen (in PHP) arbeiten. Sie geben nämlich zweierlei Werte zurück, einen Datensatz oder ein false. Das ist aber nicht sehr ausdrucksstark, weil man dieses Zwitterverhalten kennen muss, um diese Code-Schreibweise zu verstehen.

Zum Vergleich mal die C#/.NET-Vorgehensweise:

SqlDataReader reader = command.ExecuteReader();

while (reader.Read()) 		{
  Console.WriteLine("{0}\t{1}", reader.GetInt32(0), reader.GetString(1));
}

reader.Close();

Die Methode Read() gibt immer nur ein Boolean zurück. Sie holt den nächsten Datensatz in den Reader und gibt true, oder gibt false zurück, wenn nichts mehr zu lesen ist. Anders geht das bei stark typisierten Sprachen auch kaum. Damit wird nicht Status mit Nutzdaten vermischt. Die Nutzdaten fragt man dann später mit reader.GetIrgendwas() ab.

Besonders elegant ist das auch nicht, weil der Reader hier eine Nebenwirkung hat und die Get-Methoden je nach Datensatz unterschiedliche Ergebnisse liefern. Funktioenn, die Nebenwirkungen (englisch: side effects) haben, meidet man lieber. Und in der Tat nimmt man diese rudimentäre Art der Datenabfrage im Prinzip nicht für ernsthafte Dinge, sondern nimmt einen ORM oder ähnliches Framework, dass die Ergebnismenge als Enumerable liefert, man also mit foreach über sie laufen kann.

Kein Vorteil ohne Nachteil: die komfortablere Variante braucht mehr Code (für das Framework) und damit mehr Ausführungszeit. Sie ist meist deutlich langsamer als der hemdsärmliche Ansatz mit dem Reader. Aber solange die zusätzliche Zeit unspürbar ist, überwiegt der Komfortgewinn den Aufwand, den der Rechner treiben muss.

Elegant lesbar ist also die Komfortvariante, einen eleganten Ressourcenverbrauch hat die einfache.

dedlfix.

P.S. wieso kann der Kodehochleuchter kein C#?