Benutzer-Werkzeuge

Webseiten-Werkzeuge


unterschiede_zu_java:start

Dies ist eine alte Version des Dokuments!


LernJ vs. Java: Unterschiede

Die Programmiersprache auf dieser Website ist eine Teilmenge von Java, die in folgenden kleinen Bereichen etwas vereinfacht wurde:

1. System.out.print -> print

Statt System.out.print und System.out.println kann auch einfach print bzw. println geschrieben werden. Es ist zudem möglich, als zweiten Parameter eine Textfarbe anzugeben, z.B. println("Roter Text", Color.red).

2. Hauptprogramm

In Java befindet sich das "Hauptprogramm" einer Anwendung (also die Anweisungen, die zu Beginn gestartet werden) in einer statischen main-Methode mit der Signatur public static void main(String[] args). Das kürzeste Hello-World-Programm sieht in Java also so aus:

class Beispiel {
 
  public static void main(String[] args){
    // Hier beginnen die Anweisungen des Hauptprogramms:
    System.out.println("Hallo Welt!");
  }
 
}

In LearnJ besteht das Hauptprogramm einfach aus allen Anweisungen, die außerhalb einer Klassendefinition stehen. Dadurch lassen sich auf sehr einfache Weise kurze Programmbeispiele schreiben. Das obige Hello-World-Programm sieht in LearnJ also so aus:


3. Vergleich zweier String-Werte

In Java bewirkt der Vergleichsoperator == bei Zeichenketten (Strings) den Vergleich der Objekte, nicht den Vergleich der Zeichenketten. Das folgende Programm etwa gibt "Die Strings sind ungleich!" aus, da s1 und s2 nicht auf das selbe Objekt zeigen:

String s1 = "Test";
String s2 = "Tes";
 
s2 = s2 + "t";
 
if(s1 == s2){
   System.out.println("Die Strings sind gleich!");
} else {
   System.out.println("Die Strings sind ungleich!");
}

Will man in Java zwei Zeichenketten vergleichen, so muss man die equals-Methode verwenden, also if(s1.equals(s2)){….

Die Programmiersprache dieser Website unterscheidet sich von Java dahingehend, dass der Vergleichsoperator == bei Strings nicht die Gleichheit der Objekte prüft, sondern einen Zeichenkettenvergleich durchführt. Das obige Programm gibt also "Die Strings sind gleich!" aus. Natürlich gibt es in der Programmiersprache dieser Seite auch die Methode equals. Sie liefert exakt das selbe Resultat wie der Vergleichsoperator ==.

4. Standard Library

Es war nicht möglich, die umfangreiche Standard Library von Java komplett abzubilden. Derzeit sind Nachbildungen folgender Klassen vorhanden:

  • die Klasse Math,
  • die Klasse String,
  • eine vereinfachte Version der Klasse Timer und des Interfaces Runnable,
  • ein großer Teil des Collection-Frameworks von Java, insbesondere die Klassen und Interfaces
    • Iterable
    • Collection
    • Map, HashMap
    • List, ArrayList, LinkedList
    • Set, HashSet

LearnJ besitzt zudem eine eingebaute Grafikbibliothek, die die Programmierung einfacher Spiele möglich macht, z.B.

LearnJ: Sprachumfang/Features

Hier eine grobe Übersicht über den vorhandenen Sprachumfang von LearnJ und die Features der Online-Entwicklungsumgebung:

Klassen
  • class, enum, interface
  • extends, implements
  • abstrakte Klassen
  • static Attribute und Methoden
  • private, public, protected Attribute und Methoden
  • Überladen von Methoden, Überschreiben von Attributen und Methoden
  • Konstruktoren (auch private Konstruktoren bei enums)
  • final Attribute
  • casten (implizit und explizit)

Strukturanweisungen

  • for(…;…;…), while(), dowhile(), break, continue
  • Vereinfachte for-Schleife bei Iterables und Arrays (for(var a: list){…})
  • ifthenelse
  • switchcasedefaultbreak mit char, String, int und enum-Konstanten

Datentypen

  • primitive Datentypen int, double, char, boolean, float
  • Sonderrolle von String als primitiver Datentyp und Klasse
  • array (auch mehrdimensional und als Array-Konstanten)
  • implicit casting und explicit casting (mit cast-operator)
  • lokale Variablen und Parameter können als final deklariert werden.
  • Generics, z.B. class Liste<K> { … }
  • Variablendeklaration mit var ist möglich (|local variable type inference)

Operatoren

Editor

  • Verwendet wird der Monaco-Editor von Visual Studio Code. Viele der darin möglichen Editor-Kommandos und Shortcuts sind auch in den Editor-Bereichen dieser Webseite möglich.
  • Syntax-Highlighting
  • markiert alle Positionen, an denen die Variable/die Methode/der Typ vorkommt, auf der der Cursor steht
  • springt zur Definition eines Symbols (Strg + click)
  • Auto-Format während der Eingabe (immer nach Enter oder mit Alt + Shift + f)
  • Codeverfollständigung
  • Refactor-Rename (F2)
  • Laufendes Compilieren während der Eingabe mit Anzeige der Fehler
  • Parameter hints (Strg + Shift + Leertaste)
  • Show References (Shift + F12)

Debugger

  • Zeigen aller Variablen im aktuellen Scope
  • Auswertung von Termen
  • Zeigen des Variableninhalts beim Mouseover
  • Auswerten von Termen durch Markieren mit der Maus
  • Step into, Step over
  • Breakpoints

Console

  • Code completion
  • Auswertung beliebiger Terme
  • Ausführen von Statements
  • Während des Debuggings: Zugriff auf den aktuellen Scope des gerade ausgeführten Programms
  • History (mit Pfeil nach oben/unten)
unterschiede_zu_java/start.1593414318.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki