Zunächst einmal sind diese nicht wirklich gleichwertig. f $ x $ y
als f $ (x $ y)
(weil infixr 0 $
) analysiert, daher würde man tatsächlich die erste Version als
myFunction v1 v2 = (statement_1.. $ statement_2...) $ statement_3...
oder schreiben muß, wenn statement_1
eigentlich nur ein einziges Symbol ist, würde ich eigentlich lieber
myFunction v1 v2 = statement_1 (statement_2...) (statement_3...)
Eigentlich ist Ihre Frage, ob es sinnvoll ist, diesen Zwischenresultaten eigene Namen zu geben. Nun, das ist eine Frage, die wenig mit Haskell zu tun hat - sie kann auf die meisten Programmiersprachen zutreffen, obwohl nur wenige die Möglichkeit bieten, in einem einzigen Ausdruck so viel zu schreiben wie Haskell. Es kann nur beantwortet werden als: geben Sie ihnen Namen, wenn es den Code leichter verständlich macht. Vielleicht ist es schwer zu sehen, was statement_2 ...
eigentlich gut sein soll, aber ein "Single-Word-Kommentar" würde es aufklären? Nun, dann nenne es einen Namen! Wenn es stattdessen nur ein kurzer Ausdruck ist und es klar ist, was es ohnehin bedeutet, würde ich mich nicht darum kümmern.
Beachten Sie, dass dies in manchen Fällen die Leistung (selbst Komplexität) beeinflussen kann, unabhängig davon, ob Sie etwas als benannte Entität definieren. Zum Beispiel, wenn result_1
eine langwierige Berechnung ist, die nicht auf v2
abhängt, macht es Sinn, es auf diese Weise schreiben:
myFunction v1 = \v2 -> statement_1 result_1 $ statement_3..
where result_1 = statement_2
Auf diese Weise können Sie die Funktion teilweise anwenden, um nur das v1
Argument und damit Anteil Ein großer Teil des Rechenaufwands für mehrere Anrufe über v2
, z mit map (myFunction v1₀) listOfV2s
.
Ich denke, das letztere ist lesbarer. Ich mache auch * viele * Funktionen in Imperativsprachen, wenn es zu sofort verständlichen und gut benannten Funktionen führt. Diese Frage ist jedoch zu einseitig, um gute Antworten zu erhalten. –
Ich benutze letztere, wenn ich den 'result_i' Variablen aussagekräftige Namen geben kann. Ansonsten tendiere ich dazu, die erste Form zu verwenden, möglicherweise in mehreren Zeilen, und oft '.' anstelle von' $ 'für alle außer der letzten. – chi
Nur eine semantische Anmerkung: Haskell hat keine Aussagen, die im Körper einer Funktion vorkommen können, nur Ausdrücke. – chepner