2012-10-20 4 views
23

Ich schaue manchmal auf Scalaz und finde es ziemlich schwer für einen Anfänger Scala Programmierer zu verstehen.Warum verwendet Scalaz komplexe Symbole und keine In-Code-Dokumentation?

Scalaz Methoden scheinen für erfahrene funktionale Programmierer offensichtlich, aber für jeden anderen ist es schwer zu verstehen.

Warum gibt es so wenige Dokumentationen im Scalaz-Code?

Warum verwenden sie so viele Operatoren, die für die meisten Menschen nicht lesbar sind? Ich weiß nicht einmal, wie man oder ohne Kopieren/Einfügen eingibt. Und es ist nur ein Beispiel, weil es viele gibt.

Einige Leute sagen, dass Scalaz zu Beginn unlesbar war, aber 2 Jahre später finden sie es großartig. Ich frage mich, wo ich mit Scalaz anfangen soll. Die Scala-Validierung scheint der einfachste Teil zu sein, aber danach?

+4

Soweit ich weiß, die meisten Sonderzeichen haben einen ausführlichen, Nicht-Unicode-Begleiter. Scalaz ahmt Haskell nach und viele dieser Symbole kommen aus dem Haskell Land (also ist die nächste Frage [* warum Haskell so viele Symbole benutzt]) (http://ro-che.info/ccc/15.html)). Und persönlich glaube ich nicht, dass * Anfänger * Scala Programmierer Scalaz verwenden sollten. –

+0

@ om-nom-nom Ich verstehe. Ich sage, ich bin ein Scala-Anfänger, das ist mein Standpunkt, aber ich folge Martin Oderskys Kursen auf Coursera, lese das Buch und benutze es seit 3 ​​Monaten, um eine echte Webapp zu erstellen, die bald in Produktion gehen wird . Ich frage mich nur, wann ich versuchen sollte, Scalaz zu benutzen, denn bis ich es nicht verstehe, werde ich mich weiterhin als Scala-Anfänger betrachten. –

+3

scalaz ist auf dem gleichen Level wie formlos und wahrscheinlich das nächste Mal, dass es sein wird eine Bibliothek zur umfassenden Makroprogrammierung in Scala. Alle diese Teile haben zusammen, dass sie nicht Teil des Benutzerkerns von Scala sind - sie sind Experimente, um zu beweisen, was möglich ist und wie man zu neuen Ebenen abstrahiert. Man darf sagen, dass er/sie ein fortgeschrittener Scala-Programmierer ist, ohne die höherwertigen Teile von Scala verstehen zu können - das hat auch Odersky in seinen [Scala-Levels] gesagt (http://www.scala-lang.org/ Knoten/8610). – sschaef

Antwort

13

Ich stimme zu, dass Scalaz größtenteils undokumentiert ist. Das Problem ist, dass es viele fortgeschrittene Konzepte von Haskell (und die zugrundeliegende Mathematik) sammelt und sie alle im Detail dokumentiert, würde ein ganzes Buch über funktionale Programmierung (und Mathematik) schreiben. Also ich glaube, Scalaz Ansatz ist:

  • Wenn Sie wissen und brauchen einige Konzept von funktionalen Programmierung für Scala vorbereitet, werden Sie wahrscheinlich finden Sie es hier.
  • Wenn Sie es nicht wissen, müssen Sie es anderswo lernen.
  • Werfen wir einen Blick auf Ihr Beispiel: Wenn Sie wissen, Kleisli categories und wie jede Monaden zu einem führt, ist die Definition ziemlich eigenständig. Wenn nicht, dann hat sowieso nichts für Sie.

    (Nach meiner Erfahrung Haskell ist besser für fortgeschrittene Konzepte der funktionalen Programmierung lernen. Während Scala weit besser als Java, ist es noch schleppt um Java OO/Imperativ Erbe, das clutters Dinge ein bisschen.)


    Betrachtet die Unicode-Symbole. Mit Blick auf Quellen scheint es, dass sie nur als syntaktischen Zucker gewöhnt sind oder zumindest haben sie ein Nicht-Unicode-Pendant:

    def ☆[M[_], A, B](f: A => M[B]): Kleisli[M, A, B] = kleisli(f) 
    def η[F[_]](implicit p: Pure[F]): F[A] = pure 
    def cokleisli[W[_], A, B](f: W[A] => B): Cokleisli[W, A, B] = ★(f) 
    

    So kann man ohne sie gehen, wenn Sie wollen.

    Dennoch bin ich mir nicht sicher, ob es eine gute Idee ist, sie in Scalaz zu haben. Es könnte dazu führen, dass der Code für jemanden, der nicht über die richtigen Schriftarten verfügt, nicht gelesen werden kann. Ich bevorzuge lieber reine ASCII-Symbole.

    7

    Ein Platz zum Beginnen ist, Lerne dich ein Haskell zu lesen, das viele Konzepte umfaßt.

    Uhr Chris Marshall (@oxbow_lakes) scalaz Gespräche: http://skillsmatter.com/expert/scala/chris-marshall

    eine Kopie der funktionalen Programmierung in Scala Erhalten von von einigen der Autoren von scalaz geschrieben Manning.

    Ich habe ein paar kleine Beispiele auf meinem Blog http://www.casualmiracles.com/blog/

    Ich würde sagen, dass es noch einfacher Orte ist mit scalaz als Validierung zu starten, die die verschiedenen Anreicherungen auf Option wie ~ foo ist, die den Wert enthalten kehrt in die Option oder die 'Null' für den Typ der Optionen (0 für Zahlen, leere Zeichenfolge für String usw.).

    ich über eine sehr detaillierte Reihe von Artikeln vergessen bei http://eed3si9n.com/ Learning Scalaz genannt

    5

    Wie bei jeder Open-Source-Projekt, das einzige wirklich echte und annehmbare Antwort auf „Warum ist nicht ihre bessere Dokumentation?“ ist "Weil noch niemand es geschrieben hat. Sie sind frei, sich freiwillig zu melden."

    (Ich habe ehrlich gesagt keine Ahnung, ob diese Antwort in upvotes oder downvotes. Interessantes Experiment führen wird.)

    +10

    Ich denke, das Problem ist, dass man keine Dokumentation für etwas schreiben kann, das man nicht versteht. – cdmckay