2009-12-11 9 views
5

Ich möchte eine Liste mit den nagenden Dingen von Java erstellen und nach welcher Funktion von Scala wurde sie ersetzt.Eine Liste von Dingen aus Java, die wir uns nun glücklich verabschieden wollen nach Scala

Ich muss zugeben, ich bin neu in Scala, also kann ich nicht viel beitragen. Aber ich fühle, diese Liste wird sowohl für mich als auch für andere hilfreich sein, um Scala zu schätzen. Für z. Wir verwenden das Schlüsselwort "val" und dies macht den Wert nach der Initialisierung unveränderlich. In Java mussten wir den Typ des Objekts und auch das Schlüsselwort final eingeben. Scala befreit uns von diesem Schmerz.

Concurrency-Unterstützung ist offensichtlich besser in Scala, aber ich suche nicht danach. Das ist ein zu großes Feature, um ignoriert zu werden. Ich bin auf der Suche nach den feineren Details, die, obwohl winzig, eine gute Wirkung haben werden.

Einige Bereiche sind: Typ-Systeme, Exception Handling, Regexes, OOPS-Funktionen, syntaktischer Zucker usw.

+10

"In Java mussten wir den Typ des Objekts und auch das Schlüsselwort final eingeben. Scala befreit uns von diesem Schmerz. " Wenn das deine Definition von Schmerz ist, hast du ein sehr geschütztes Programmleben gelebt. – David

+0

Nein. Ich habe kein behütetes Leben gelebt ... aber ja, meine Aussage bedeutet, dass ich es getan habe ertrug viel mehr Schmerzen :) – user855

Antwort

0

Ich mag die Tatsache, dass Funktionen sind jetzt Objekte, und das Primitive standardmäßig eingewickelt werden. Die Fähigkeit des Compilers, intelligent auf den Typ zu schließen, ist ebenfalls gut.

0

Ich stimme einigen Annahmen der Frage nicht zu.

Scala läuft auf der JVM, daher kann die Unterstützung für den gemeinsamen Zugriff (auf VM-Ebene) nicht besser sein als Java. Wohlgemerkt, actors ist möglicherweise ein besseres Modell als Java threads, aber ich wäre überrascht, wenn Akteure nicht in Java implementiert werden könnten.

Ferner hat Java Regular Expressions.

+1

... aber so hat Scala ... –

6
  • Null gegangen ist (meistens) in Scala
  • für Ausdrücke
  • Covariant und kontra Definition seitige generics
  • Infixoperatoren/Methoden (a + b, list map f)
  • Mustervergleich
  • impliziter Typkonvertierungen
  • statische ist weg (mit Objekt)
  • es ist Teil des Design-
  • leistungsfähiges Paket Unterstützung (verschachtelte Pakete)

Aber wie jedes Merkmal sie ihre Auswirkungen haben, wenn zu verwenden: vs

  • für die Expression Karte/flatMap/filter/...
  • Muster vs Polymorphismus passenden
  • Infix vs Methodenaufruf Syntax

Wenn implizite verwenden Geben Sie Konvertierungen und Generika überhaupt ein.

Nichts ist kostenlos. Scala ist ein mächtiges Werkzeug, damit Sie sich verletzen können.

8

Eine Sache Ich mag ist in der Lage zu sein, wie etwas zu schreiben:

case class Person(name: String, age: Int) 

Statt:

class Person { 

    private String name; 
    private int age; 

    public Person(String name, int age) { 
    this.name=name; 
    this.age=age; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getAge{ 
     return age; 
    } 

    public String toString() { 
     return String.format("Person(%s, %d)", name, age); 
    } 

    public boolean equals(Object other) { 
     if (other == this) 
      return true; 
     if (other.getClass() != getClass()) 
      return false; 
     Person p = (Person) other; 
     return getName().equals(p.getName()) && getAge().equals(p.getAge()); 
    } 

    public int hashCode() { 
     int h = getName().hashCode(); 
     h = 37 * h + getAge(); //or whatever it is! 
     return h; 
    } 
} 
+2

Sie vergessen die Getters! Machen Sie es zu einer 'Fall-Klasse' und Sie erhalten auch' equals', 'hashCode' und' toString' in dort auch ! –

+0

Er hat die Setter nicht vergessen, die 'case class' gibt Ihnen nur' val's per default –

+0

Aber vals sind effektiv Getter dank Scala's Uniform Access Prinzip –

4

Ich denke, zwei der wichtigsten Merkmale der Scala sind:

  • Static type inference - Mit dieser coolen Sprachfunktion können Sie Ihren Code zwar kürzer, aber unbedingt schneller machen.
  • Varianzanmerkungen, d. H. Nichtvarianz (Standard in Scala & Java), Kovarianz & Kontra-Varianz - ein weiteres Merkmal, das Ihnen zugeordnete Typen in Ihrer Anwendung ermöglicht, ohne zu viel Code zu schreiben.

jedoch eine Sache, die nicht so gut mit mir nicht sitzt, ist die Existenz von impliziten Konvertierungen (sie sind ähnlich wie C++ 's implizite Konvertierung), die wie eine schnelle Hack dh klingt Kanal-Taping

Für Ihre Betrachtung

0

Ich freue mich auf optional benannte Parameter in 2.8. Sie erleichtern selbst-dokumentierenden Code auf unveränderlichen Objekten, da Sie die Parameternamen beim Aufrufen des Konstruktors verwenden können.

Auch die Kopierfunktionen für Fallklassen in 2.8 erleichtern die Implementierung von "Copy-on-Modify" -Objekten, ähnlich wie die bereits in Scala vorhandenen unveränderlichen Sammlungen.

2

Arbeiten an Scala 2.8 hier, so dass einige dieser noch nicht vollständig freigegeben ...

Scala vor allem mit dem Entfernen von vorformulierten hilft:

  • Type Inference
  • Traits/Mixins
  • Uniform Access-Prinzip - keine Getter und Setter mehr
  • Überlastung des Bedieners

und funktionelle Konstrukte Hinzufügen der Größe des Programms weiter zu reduzieren:

  • First-Class-Funktionen - Ja, das bedeutet, Verschlüsse :)
  • For-Comprehensions. Das sind KEINE Loops, aber ein viel mächtigeres Biest.
  • Spiel/Fall Blöcke - Pattern Matching, viel mächtiger als Schalter/Fall

Es funktioniert auch gut um einige der Design-Fehler in Java

  • Manifest Klasseninformationen durch Löschen verloren zurückzuerobern
  • Singletons - Weit mehr objektorientierte als statische Methoden in einer Klasse
  • Declaration-Site Varianz - nicht mehr <? T erstreckt >
  • Keine Ausnahmen geprüft

Und ein paar netten Extras

  • Benannte und Standardparameter
  • implizite Konvertierungen und Parameter
  • XML-Literale
  • Wiki-Syntax scaladoc

Siehe auch http://www.artima.com/weblogs/viewpost.jsp?thread=275983 für einen Überblick über einige der funktionalen Programmierkonzepte

Verwandte Themen