Frage

Ich habe diese beiden Teile des Codes, weicht man ist besser lesbar?

  1. foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. Linq

    return risks.Sum(risk => risk.TechnicalPremium);
    
War es hilfreich?

Lösung

Wenn das Team, das auf dem Code arbeitet, weiß, was die Linq-Version tut und weiß, ihr Innenleben, dann ist es besser lesbar.

Andere Tipps

Verwenden Sie je nachdem, was Sie bevorzugen, aber verstecken sie in einem Verfahren:

return risks.SumTechnicalPremium();

Weder noch. Die erste ist ausführlicher und wahrscheinlich von allen verstanden werden. Das zweite ist knapper und leicht von jedermann mit sogar eine vorübergehende Wissen von Linq verstanden.

Ich würde sagen, Sie Ihre Wahl auf die Umwelt stützen können Sie in sind.

Für jemanden, der LINQ lesen können, die eine LINQ.

Für jemanden, der den Code Schritt für Schritt zu interpretieren hat (unter Verwendung von Intellisense / Dokumentation der kürzeren.

Gehen Sie mit Linq. Wenn Sie denken, es erklärt werden muss, wird eine eine Zeile Kommentar darum kümmern. Da die Menschen mehr an Linq zu bekommen, wird die Notwendigkeit für Kommentare geht weg.

Der LINQ-Code ist sowohl sehr gut lesbar und selbsterklärend.

Die erste Option ist besser lesbar zu einem breiteren Spektrum von Menschen. Die zweite Option hat eine ‚Eintrittsbarriere‘, dass der Leser könnte oder kennen und verstehen LINQ. Es ist knapper und könnte sich daher besser, wenn Ihr Publikum über diese Eintrittsbarriere ist.

Ich denke, die zweite Option in besser ist, dass es effizienter sein sollte. Es ist jedoch weniger offensichtlich, was passiert (zumindest für mich).

Ich würde sagen, die erste seit ich weiß, Linq nicht. Bei Gefahr einer Über dokumentieren ich, dass man mit einer kurzen Beschreibung verwenden würde, was vor sich geht. Oder einfach nur sagen, es ist Linq für Leute, die keine Ahnung haben.

Wenn Sie einen Kommentar zur Verfügung stellen zu erklären seinen Zweck, dann würde ich für die Linq Option gehen.

Die erste, wenn Sie keine Kenntnis von Linq haben. Jeder Entwickler kann die ersten lesen und verstehen.

Es gibt keine Lesbarkeit Problem. Klicken Sie auf Sum und drücken Sie F1.

Linq für den Sieg.

Jede Sprache hat Konventionen für den besten Weg, um solche Dinge zu codieren, so was ist am besten lesen, um Menschen, die regelmäßig diese Sprache verwenden nicht universell ist. Für eine Java oder normalen C # -Programmierer, ist die erste Option besser lesbar. Für jemanden zu LINQ oder funktionale Programmierung verwendet wird, ist die zweite besser lesbar.

Ich weiß nicht, c #, aber die zweite Alternative sieht mir viel sauberer und ich konnte verstehen, was es tut (ok, mit etwas zu raten und Gegenprüfung mit der ersten Version). Probabably wegen einer funktionalen Hintergrund. Aber in der ersten müssen Sie für technicalPremium aussehen in 4 (!) Plätze. Das zweite ist viel kürzer und leichter zu verstehen, wenn Sie nur über den Code zu lesen.

oder

dezimal technicalPremium = 0;

foreach (Risikorisiko Risiken) technicalPremium = technicalPremium + risk.TechnicalPremium;

Rückkehr technicalPremium;

Ich sehe Menschen sagen, dass sie die erste, die „wenn Sie wissen, Linq nicht“. Ja, und die erste ist nicht lesbar, wenn Sie nicht wissen, C #. Dies ist keine Frage von „die besser lesbar ist“, sondern „die Sprache Funktionen sind wir bequem mit?“

Starten Sie durch ein Gespräch mit Ihrem Team über die Teile der Sprache / Rahmen / Toolset hat, die jeder hasst, und erklären sie tabu. Alles andere ist Teil des Standardvokabular betrachtet, und jeder soll fließend sein. Diese Liste soll in Ihrem Coding-Standards doc gehen, direkt neben " nicht die Mühe mit trivialen Eigenschaften für nicht-öffentliche Mitglieder “.

Solange Linq nicht auf „ausschließen“ -Liste ist, das zweite Beispiel ist far besser lesbar als die erste. Warum? Weil es Absicht des Codes erklärt, anstatt nur zu präsentieren, den Mechanismus für den Leser zu entziffern.

Wenn Ihr Ziel ist es besser lesbar für „jedermann“ zu machen, die nach Ihnen kommen könnten, dann die foreach verwenden. Ich interpretiere „lesbar“ zu bedeuten jemand mit Erfahrung in den Grundlagen der Sprache sollte in der Lage zu begreifen. Für jemanden nicht vertraut mit Linq und immer noch mit VS2005 oder früher, würde die Linq-Syntax verwirrend sein.

Ich würde sagen, dass der erste Teil des Codes auf jeden Fall besser lesbar ist, und es wäre noch besser lesbar, wenn Sie zumindest das variable Risiko umbenannt, so dass er einen anderen Namen aus der Klasse hatte. Es wäre wahrscheinlich auch besser, wenn Sie die Array-Risiken umbenannt.

ich mit denjenigen überein, die den zweiten sagen wird leicht als Linq mehr wird weithin angenommen verstanden werden. Es ist sicherlich prägnanter.

Allerdings habe ich einige Bedenken über eine einfache Fehlersuche. Es scheint viel einfacher, um den Code in der foreach-Schritt durch, um genau zu sehen, was es in jedem Durchlauf tut.

Ich denke, es hängt davon ab, was Sie unter „lesbar“. Das erste Beispiel zeigt deutlich die Programmlogik und soll von jedem mit einem Programmier Hintergrund verständlich sein.

Für mich ist das zweite Beispiel intuitiver basierend auf dem Kontext (das heißt, ein Array nehmen (oder eine andere Sammlung Typ) und eine Methode namens Sum Ausführung auf jedem Element des Arrays). Der einzige Ort, das zweite Beispiel weniger deutlich, in der tatsächlichen Lambda-Ausdruck ist selbst besonders für jemanden, der keine Erfahrung mit Lambda-Ausdrücke oder alraedy hatte haben einen Hintergrund in der funktionalen Programmierung.

Ich denke, wie Lambda-Ausdrücke häufiger in .NET-Programmierung wird dies weniger ein Problem sein wird. Wie es aussieht, glaube ich, gibt es eine sehr kleine Lernkurve ist, die Grundlagen für das Verständnis, wie Lambda-Ausdrücke in .NET verwenden.

Die zweite, auf jeden Fall. einen so großen Block von Code für etwas so einfaches wie Summieren tun, ist einfach nicht notwendig. Ich weiß auch nicht, was LINQ ist, aber es ist perfekt lesbar zu mir.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top