Betrachten Sie das folgende Problem: Gibt es bei einer Liste der Länge dreier Tupel (String, Int) ein Paar Elemente mit demselben "Int" -Teil? (Zum Beispiel enthält [("bob",5),("gertrude",3),("al",5)]
ein solches Paar, aber [("bob",5),("gertrude",3),("al",1)]
nicht.)Was macht einen guten Namen für eine Hilfsfunktion?
Dies ist, wie ich eine solche Funktion implementieren würde:
import Data.List (sortBy)
import Data.Function (on)
hasPair::[(String,Int)]->Bool
hasPair = napkin . sortBy (compare `on` snd)
where napkin [(_, a),(_, b),(_, c)] | a == b = True
| b == c = True
| otherwise = False
I Muster verwendet haben, passende Namen zu binden an den „Int "Teil der Tupel, aber ich möchte zuerst sortieren (um Gruppen wie Mitglieder), so habe ich die Muster-Matching-Funktion in eine where
Klausel. Aber das bringt mich zu meiner Frage: Was ist eine gute Strategie für die Auswahl Namen für Funktionen, die innerhalb where
Klauseln leben? Ich möchte schnell an solche Namen denken können. Für dieses Beispiel scheint "hasPair" eine gute Wahl zu sein, aber es ist schon vergeben! Ich finde, dass dieses Muster sehr häufig vorkommt - der natürlich erscheinende Name für eine Hilfsfunktion wird bereits von der äußeren Funktion, die es aufruft, übernommen. So habe ich manchmal solche Hilfsfunktionen wie "op", "foo" und sogar "helper" genannt - hier habe ich "serviette" gewählt, um seine Gebrauch-es-einmal-weg-weg-Natur zu betonen.
Also, liebe Stackoverflow-Leser, was hättest du "Serviette" genannt? Und noch wichtiger: Wie gehen Sie generell mit diesem Thema um?
'go' ist der Weg :) –
Eine allgemeine Metrik - _use kurze beschreibende Namen, wenn Sie Mühe haben, geeignet beschreibend sein, machen Sie sie kurz_. Übrigens ist die "Serviette", wie sie derzeit geschrieben wird, nicht sehr robust (die Liste muss genau drei Mitglieder haben), wenn Sie darüber nachdenken, wird sie vielleicht einen besseren Namen vorschlagen. –
@stephen Ja, das habe ich über 'Serviette' bemerkt, als ich es geschrieben habe. Würdest du sagen, dass das im Allgemeinen wahr ist: Wenn es dir schwer fällt, eine Funktion zu benennen, muss dein Design wahrscheinlich verbessert werden? Wenn das stimmt, das ist ein ziemlich starkes Konzept ... – gcbenison