Ich habe ein Stück Code für einige logische Validierung, die geht verallgemeinert in für wie folgt aus:LINQ oder foreach - Stil/Lesbarkeit und Geschwindigkeit
private bool AllItemsAreSatisfactoryV1(IEnumerable<Source> collection)
{
foreach(var foo in collection)
{
Target target = SomeFancyLookup(foo);
if (!target.Satisfactory)
{
return false;
}
}
return true;
}
Das funktioniert, ist recht einfach zu verstehen, und hat früh -out Optimierung. Es ist jedoch ziemlich ausführlich. Der Hauptzweck dieser Frage ist, was als lesbar und guter Stil gilt. Ich bin auch an der Aufführung interessiert; Ich bin fest davon überzeugt, dass vorzeitige {Optimierung, Pessimisierung} ist die Wurzel allen Übels, und versuchen, Mikro-Optimierung zu vermeiden sowie Engpässe einzuführen.
Ich bin ziemlich neu bei LINQ, also hätte ich gerne ein paar Kommentare zu den beiden alternativen Versionen, die ich mir ausgedacht habe, sowie alle anderen Vorschläge. Lesbarkeit.
private bool AllItemsAreSatisfactoryV2(IEnumerable<Source> collection)
{
return null ==
(from foo in collection
where !(SomeFancyLookup(foo).Satisfactory)
select foo).First();
}
private bool AllItemsAreSatisfactoryV3(IEnumerable<Source> collection)
{
return !collection.Any(foo => !SomeFancyLookup(foo).Satisfactory);
}
Ich glaube nicht, dass V2 bietet viel über V1 in Bezug auf Lesbarkeit, auch wenn kürzer. Ich finde V3 klar zu sein & prägnant, aber ich bin nicht allzu lieb der Method().Property
Teil; natürlich könnte ich das Lambda in einen vollen Delegierten verwandeln, aber dann verliert es seine Einlinien-Eleganz.
Was Ich mag würde Kommentare zu sind:
- Style - immer so subjektiv, aber was fühlen Sie lesbar ist?
- Leistung - sind irgendwelche von diesen ein definitives Nein-Nein? Soweit ich es verstehe, sollten alle drei Methoden frühzeitig auslaufen.
- Debuggability - alles zu berücksichtigen?
- Alternativen - alles geht.
Vielen Dank im Voraus :)
Wenn ich LINQ lese, kann ich niemals den Sinn der "natürlichen Sprache" verstehen (all 'von x in xs select ... '). Die 'xs.Select (x => ...)' Version erscheint immer klarer und macht mehr Sinn für mich (aber dann bin ich es nur). V3 ist für mich am lesbarsten. –
@ Callum Rogers: Ich fühle mich ziemlich ähnlich; Leute, die viel SQL machen, könnten sich jedoch anders fühlen :) – snemarch