,Themen Blog1 ,blick ueber den tellerrand linq = Blick über den Tellerrand: LINQ 

Blick über den Tellerrand: LINQ

Ich habe aktuell beruflich wenig mit PHP zu schaffen, erklärt wohl auch die momentane Post-Flaute etwas. Joa, der angenehme Nebeneffekt davon ist aber, dass man beim Rumschlagen mit anderen Sprachen auch andere Konzepte verinnerlicht. So bin ich im Microsoft C# – Umfeld auf LINQ gestoßen. Bedeutet Language INtegrated Query. Was erstmal so unspektakulär klingt, ist eine verdammt mächtige Abfragesprache für Container (Arrays, Listen, Collections …).

LINQ?

string[] colors = new string[] { "Red", "Green", "Blue", "Blue", "Brown", "Pink", "Black" };

var result = (from c in colors 
              where c.StartsWith("B") && c.Contains("l") && c.Length > 3
              orderby c descending 
              select c).Distinct();

foreach (var color in result)
{
    Console.WriteLine(color);
}
/*
Blue
Black
*/ 

Als ich das das erste mal gesehen hab, saß ich schon etwas mit offenem Mund da. Abgesehen von der Anordnung der Kontrukte from / where / order by / select sieht das schon sehr nach SQL aus. Keine 5-fach verschachtelten Schleifen mehr, um auf komplexen Strukturen irgendwas zu errechnen / suchen. Auch Aggregationsfunktionen und sogar Joins hauen damit hin. Dadurch, dass LINQ fest mit der Sprache verbandelt ist, gibt es auch direkt beim Programmieren der Query schon Fehlerhinweise. Dabei ist nur eine einzige include-Direktive nötig und die ganze Magie steht zur Verfügung:

using System.Linq;

Und PHP?

Nagut, einen komplett PHP-freier Post ists nun doch nicht. Denn es gibt auch PHPLinq. Logischerweise muss es sich dabei um eine Eigenbaulösung handeln, die das C# – LINQ – Verhalten zu simulieren versucht. Schließlich kennt PHP von Grund auf solche Konstukte nicht. In 16 Dateien und 120 KB wird also Gas gegeben.

Ich klaue mal frech ein kleines Codebeispiel von der Examples-Seite:

require_once 'PHPLinq/LinqToObjects.php';

$names = array("John", "Peter", "Joe", "Patrick", "Donald", "Eric"); 

$result = from('$name')->in($names)->where('$name => strlen($name) < 5')->select('$name'); 

print_r($result);

Die Jungs haben sich also schon Mühe gegeben. Mehr Verwendungsbeispiele gibts in den im Download enthaltenen Tests. Aber mal ehrlich… So richtig könnte ich mich im Produktiveinsatz nicht dran gewöhnen. Das geht schon damit los, dass ich erst zur Laufzeit sehen kann, ob es einen Fehler gab. Und dann ists halt trotz allem noch ein externes Paket. Aber gut, es mal gesehen zu haben.