Frage C #, längere Methode schreiben oder kürzere Methode?


Ich bekomme zwei widersprüchliche Ansichten dazu. Einige Quellen sagen, es sollte weniger Methoden geben, um Methodenaufrufe zu reduzieren, aber eine andere Quelle sagt, dass das Schreiben einer kürzeren Methode gut ist, um JIT die Optimierung zu ermöglichen.

Also, welche Seite ist richtig?


9
2018-04-26 16:12


Ursprung


Antworten:


Der Aufwand, den Methodenaufruf tatsächlich auszuführen, ist in den meisten Fällen vernachlässigbar gering. Sie müssen sich niemals Sorgen machen, es sei denn, Sie können ein Problem auf dem Weg, das eine erneute Untersuchung des Problems erfordert, eindeutig identifizieren (Sie werden es nicht tun).

Es ist viel wichtiger, dass Ihr Code einfach, lesbar, modular, wartbar und modifizierbar ist. Methoden sollten nur eine Sache tun und Subdinge an andere Routinen delegieren. Dies bedeutet, dass Ihre Methoden so kurz wie möglich sein sollten, aber nicht kürzer. Sie werden weitaus mehr Leistungsvorteile sehen, wenn Sie Code haben, der weniger anfällig für Fehler und Bugs ist, weil er einfach ist, als wenn Sie versuchen, den Compiler oder die Laufzeit zu überlisten.

Die Quelle, die Methoden sagt, sollte lang sein falschauf vielen Ebenen.


30
2018-04-26 16:15



Keine, du solltest relativ kurze Methoden erreichen Lesbarkeit.


8
2018-04-26 16:16



Es gibt keine einfache Regel über die Funktionsgröße. Die Leitlinie sollte eine Funktion sein, sollte "eine Sache" tun. Das ist ein bisschen vage, wird aber einfacher mit Erfahrung. Kleine Funktionen führen in der Regel zur Lesbarkeit. Große sind gelegentlich notwendig.

Sich über den Overhead von Methodenaufrufen Sorgen zu machen, ist eine vorzeitige Optimierung.


3
2018-04-26 16:17



Wie immer geht es darum, ein gutes Gleichgewicht zu finden. Das Wichtigste ist, dass Die Methode macht nur eine Sache. Längere Methoden neigen dazu, mehr als eine Sache zu tun.


2
2018-04-26 16:22



Das beste Einzelkriterium, um Sie in Sizing-Methoden zu führen, ist halte sie gut testbar. Wenn Sie jede einzelne Methode gründlich testen können (und tatsächlich TUN! -), ist Ihr Code wahrscheinlich ziemlich gut; Wenn Sie beim Testen sparen, ist Ihr Code bestenfalls mittelmäßig. Wenn es schwierig ist, eine Methode gründlich zu testen, dann ist diese Methode wahrscheinlich "zu groß" - zu viele Dinge zu tun und daher auch schwerer zu lesen und zu warten (sowie schlecht getestet und daher ein wahrer Hafen für Fehler).


2
2018-04-26 16:18



Zu allererst sollten Sie die Performance auf der Anzahl der Methoden nicht mikrooptimieren. Sie werden wahrscheinlich keinen messbaren Leistungsvorteil erhalten. Nur wenn Sie eine Methode haben, die millionenfach in einer engen Schleife aufgerufen wird, könnte es eine Idee sein - aber beginnen Sie nicht damit, diese zu optimieren, bevor Sie sie brauchen.

Sie sollten sich an kurze prägnante Methoden halten, die eine Sache machen, die die Absicht der Methode deutlich macht. Dadurch erhalten Sie leichter lesbaren Code, der leichter zu verstehen ist und die Wiederverwendung von Code fördert.


1
2018-04-26 17:20



Die wichtigsten Kosten, die beim Schreiben von Code zu berücksichtigen sind, sind Wartbarkeit. Du wirst ausgeben viel, viel mehr Zeit für die Pflege einer Anwendung und das Beheben von Fehlern als jemals zuvor, um Leistungsprobleme zu beheben.

In diesem Fall sind die fast sicher unbedeutenden Kosten des Aufrufs einer Methode im Vergleich zu den Kosten einer großen unhandlichen Methode unglaublich gering. Kleine prägnante Methoden sind einfacher zu pflegen und zu verstehen. Darüber hinaus haben die Kosten für den Aufruf der Methode mit hoher Wahrscheinlichkeit keine wesentlichen Auswirkungen auf die Leistung Ihrer Anwendung. Und wenn dies der Fall ist, können Sie dies nur mithilfe eines Profilers sicherstellen. Entwickler sind bekanntlich schlecht darin, Leistungsprobleme vorher zu identifizieren.

Sobald ein Leistungsproblem erkannt wurde, können diese leicht behoben werden. Eine Methode zu erstellen oder, was noch wichtiger ist, eine Code-Basis, die wartbar ist, sind viel höhere Kosten.


1
2017-09-02 09:27



Persönlich habe ich keine Angst vor langen Methoden, solange die Person, die sie schreibt, sie gut schreibt (jede Unteraufgabe ist durch zwei Zeilenumbrüche und einen netten Kommentar davor usw. getrennt. Auch die Identität ist sehr wichtig.). Tatsächlich bevorzuge ich sie sogar oft (z. B. wenn ich Code schreibe, der Dinge in einer bestimmten Reihenfolge mit sequentieller Logik ausführt).

Außerdem verstehe ich wirklich nicht, warum das Brechen einer langen Methode in 100 Stücke die Lesbarkeit verbessern wird (wie andere vorschlagen). Nur das Gegenteil. Sie werden nur am Ende des Spiels springen und Code-Teile in Ihrem Speicher behalten, nur um ein vollständiges Bild davon zu bekommen, was in Ihrem Code vor sich geht. Kombinieren Sie das mit möglichem Mangel an Kommentaren, schlechten Funktionsnamen, vielen ähnlichen Funktionsnamen und Sie haben das perfekte Rezept für Chaos. Sie könnten auch das andere Ende gehen, während Sie versuchen, die Größe der Methoden zu reduzieren: um VIELE Klassen und VIELE Funktionen zu erstellen, von denen jede VIELE Parameter annehmen kann. Ich denke nicht, dass dies auch die Lesbarkeit verbessert (besonders für einen Anfänger zu einem Projekt, das keine Ahnung hat, was jede Klasse / Methode macht).

Und die Forderung, dass "eine Funktion" eine Sache "tun sollte, ist sehr subjektiv. "Eine Sache" kann eine Variable um eins erhöhen, um eine Menge Arbeit für das "gleiche Ding" zu tun.

Meine Regel ist nur Wiederverwendbarkeit: Der gleiche Code sollte an vielen Stellen nicht oft vorkommen. Wenn dies der Fall ist, benötigen Sie eine neue Funktion. Der ganze Rest ist nur philosophisches Gespräch. In einer Frage von "warum machen Sie Ihre Methoden so groß" antworte ich, "warum nicht, wenn der Code einfach ist?".

(nur meine Meinung - stimme so viel ab wie du willst)


0