2009-04-21 6 views
6

Ich möchte eine kleine Scala-Bibliothek schreiben, um ein Gefühl für sein Actor-Programmiermodell zu bekommen.Folgen Scala-Bibliotheken der gleichen umgekehrten Domänenkonvention für die Benennung von Paketen wie Java?

In dem Beispiel-Code, den ich gefunden habe, verwenden einige Bibliotheken invertierte Domäne (z. B. org.foo.bar) für Pakete und einige nicht (vielleicht nur der Kürze halber).

Ist es ratsam, dass Scala-Bibliotheken die gleichen Paketnamenskonventionen wie Java verwenden? Allgemeiner, gibt es irgendwelche guten Scala Coding Style Vorschläge wie Python mit PEP 8?

Ja, wahrscheinlich Wagen vor Pferd, aber ich finde, dass ich ein anständiges Gefühl für eine Sprache bekommen kann, indem ich auch einige der Konventionen sehe, die sich erschüttert haben.

Dank

Antwort

8

Lift, eines der größeren Projekte in Scala, den Domain-Namenskonvention invertiert verwendet, die sehr viel Sinn macht tatsächlich, wie Scala und Java zusammenarbeiten können, steht es würden Sie wollen an die Vernunft halte die Dinge so schmerzlos wie möglich, und ich kann mir wirklich keine lohnenden Vorteile vorstellen, es anders zu machen.

+0

Danke, auf die Art und Weise zu schauen, wie Lift strukturiert ist, hilft mir, Verpackungen/Module besser zu verstehen. Die umgekehrte Domain-Konvention ist in Ordnung, aber ich benutze Python jetzt lange genug, um auch flachere Pakethierarchien zu schätzen. Die Fähigkeit, Importe zu aliasieren, scheint eine gute Lösung für die seltenen Umstände zu sein, unter denen eine Namensraumkollision auftritt, obwohl sie das Problem nicht vollständig löst. –

+0

Ein Beispiel für ein potenzielles Problem finden Sie unter http://www.drmaciver.com/2009/07/how-packages-work-in-scala/. Trotzdem ist es sinnvoll, der Java-Norm zu folgen. – mauhiz

2

Scala erbt grundsätzlich die meisten Konventionen von Java (in fast allen). Es gibt ein paar Ausnahmen. Zum Beispiel Scala „Getter und Setter“ sind tatsächlich in der folgenden Weise:

class Person { 
    private var _name: String = _ 

    def name = _name 

    def name_=(s: String) { 
    _name = s 
    } 
} 

Im Zweifelsfall leihen, um die Konvention von Java, Ruby-oder Haskell (in dieser Reihenfolge der Präferenz). In Bezug auf Pakete lautet die Antwort "Ja", Scala-Pakete werden mit der umgekehrten Domänenkonvention benannt.