Zu beachten ist, dass Code häufig in verschiedenen "Tiefen" gelesen wird. Dieser Code:
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc");
wakeLock.acquire();
ist leicht zu "überfliegen". Es sind 3 Aussagen. Zuerst kommen wir mit einem PowerManager
. Dann kommen wir mit einem WakeLock
. Dann haben wir acquire
die wakeLock
. Ich kann das sehr leicht erkennen, wenn ich mir den Anfang jeder Zeile ansehe. Einfache Variablenzuweisungen sind zum Teil sehr leicht als "Typ varName = ..." zu erkennen und überfliegen geistig das "...". Ebenso ist die letzte Aussage offensichtlich nicht die Form der Zuweisung, sondern es handelt sich nur um zwei Namen, so dass das "Wesentliche" sofort ersichtlich ist. Oft ist das alles, was ich wissen müsste, wenn ich nur versuchen würde zu antworten: "Was macht dieser Code?" auf einem hohen Niveau.
Wenn ich einem subtilen Fehler nachjage, von dem ich denke, dass er hier ist, muss ich das natürlich viel genauer durchgehen und werde mich tatsächlich an die "..." erinnern. Die separate Anweisungsstruktur hilft mir jedoch immer noch dabei, eine Anweisung nach der anderen auszuführen (besonders nützlich, wenn ich mich eingehender mit der Implementierung der in jeder Anweisung aufgerufenen Dinge befassen muss. Wenn ich zurückkomme, habe ich "eine Einheit" vollständig verstanden. und kann dann mit der nächsten Anweisung fortfahren).
((PowerManager)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag")
.acquire();
Jetzt ist alles eine Aussage. Die Struktur der obersten Ebene ist nicht so einfach zu überfliegen; In der Originalversion des OP hätte ich ohne Zeilenumbrüche und Einrückungen, um eine Struktur visuell zu kommunizieren, Klammern zählen müssen, um sie in eine Folge von 3 Schritten zu dekodieren. Wenn einige der mehrteiligen Ausdrücke ineinander verschachtelt und nicht als eine Kette von Methodenaufrufen angeordnet sind, könnte dies immer noch ähnlich aussehen. Daher muss ich vorsichtig sein, wenn ich dem vertraue, ohne Klammern zu zählen. Und wenn ich der Einrückung vertraue und nur bis zum letzten Punkt überfliege, was .acquire()
sagt mir das alles ?
Manchmal kann das aber auch das sein, was Sie wollen. Wenn ich Ihre Transformation auf halbem Wege anwende und schreibe:
WakeLock wakeLock =
((PowerManeger)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLockTage");
wakeLock.acquire();
Nun kommuniziert dies zu einem schnellen überfliegen "ein WakeLock
, dann ist acquire
es". Noch einfacher als die erste Version. Es ist sofort klar, dass es sich bei der erworbenen Sache um eine handelt WakeLock
. Wenn das Erhalten von PowerManager
nur ein Unterdetail ist, das für den Punkt dieses Codes ziemlich unbedeutend ist, aber das wakeLock
ist wichtig, dann könnte es tatsächlich helfen, das PowerManager
Zeug zu vergraben, so dass es natürlich ist, darüber hinweg zu schauen, wenn Sie nur versuchen, schnell ein zu bekommen Vorstellung davon, was dieser Code macht. Und nicht die Namensgebung in Verbindung steht , dass es wird nur einmal verwendet, und manchmal , das ist Was ist wichtig? (Wenn der Rest des Gültigkeitsbereichs sehr lang ist, muss ich alles lesen, um festzustellen, ob er jemals wieder verwendet wird. Die Verwendung expliziter Unterbereiche kann jedoch eine andere Möglichkeit sein, dies zu beheben, sofern Ihre Sprache dies unterstützt.)
Daraus ergibt sich, dass alles vom Kontext und dem, was Sie kommunizieren möchten, abhängt. Wie beim Schreiben von Prosa in natürlicher Sprache gibt es immer viele Möglichkeiten, einen bestimmten Code zu schreiben, die hinsichtlich des Informationsgehalts grundsätzlich gleichwertig sind. Wie beim Schreiben von Prosa in natürlicher Sprache sollten Sie bei der Auswahl der Prosa im Allgemeinen keine mechanistischen Regeln anwenden, wie beispielsweise "lokale Variablen, die nur einmal vorkommen, entfernen". Eher wieWenn Sie sich dazu entschließen, Ihren Code aufzuschreiben, werden bestimmte Dinge hervorgehoben und andere weniger hervorgehoben. Sie sollten sich bemühen, diese Entscheidungen bewusst zu treffen (einschließlich der Entscheidung, aus technischen Gründen manchmal weniger lesbaren Code zu schreiben), basierend auf dem, was Sie tatsächlich hervorheben möchten. Denken Sie vor allem darüber nach, was Lesern helfen soll, die nur den Kern Ihres Codes (auf verschiedenen Ebenen) "verstehen" müssen, da dies weitaus häufiger vorkommt als ein sehr enges Lesen von Ausdruck zu Ausdruck.