Die Programmiersprache auf dieser Website ist eine Teilmenge von Java, die in folgenden kleinen Bereichen etwas vereinfacht wurde:
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)
.
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 ist dies ebenso möglich. Darüber hinaus fasst LearnJ auch alle Anweisungen, die außerhalb einer Klassendefinition stehen, als Hauptprogramm auf. Dadurch lassen sich auf sehr einfache Weise kurze Programmbeispiele schreiben. Das obige Hello-World-Programm sieht in LearnJ also so aus:
Seit Version 2.0 der Online-IDE ist es auch möglich, Methoden im Hauptprogramm zu deklarieren und zu verwenden:
Im Hauptprogramm definierte lokale Variablen und Methoden sind nur im Hauptprogramm sichtbar, nicht innerhalb anderer Methoden/Klassen.
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 ==
.
Erbt eine Klasse von einer anderen Klasse, die keinen parameterlosen Konstruktor besitzt, so muss sie gemäß Java Specification einen eigenen Konstruktor haben. In der Online-IDE gibt es diese Pflicht nicht, so dass folgendes geht:
new MyRectangle(10, 10, 100, 100); // direkter Zugriff auf den Konstruktor der Oberklasse Rectangle möglich class MyRectangle extends Rectangle { }
Derzeit sind Nachbildungen folgender Klassen aus der Java Standard Library vorhanden:
Math
,String
,Timer
und des Interfaces Runnable
,System
,LocalDateTime
,Iterable
Collection
Map
, HashMap
List
, ArrayList
, LinkedList
Set
, HashSet
Stack
Boolean
, Integer
, Character
, Float
und Double
LearnJ besitzt über die Java Standard Library-Klassen hinaus aber viele weitere Klassen, z.B.
Input
zum Einlesen von Tastatur-Benutzereingaben,Sound
zur Ausgabe von Tönen und Sound-Stücken,PApplet
, die die einen Großteil der Processing-Library enthält,Vector2
mit Methoden zur 2D-Vektorrechnung,WebSocket
und WebSocketClient
zur Programmierung von Chat-Programmen, Netzwerkspielen u.ä.World
, Circle
, Ellipse
, Rectangle
, Polygon
, Triangle
, Sprite
, Turtle
, Text
, Bitmap
, Group
, Gamepad
usw.)Links:
Hier eine grobe Übersicht über den vorhandenen Sprachumfang von LearnJ und die Features der Online-Entwicklungsumgebung:
class
, enum
, interface
extends
, implements
static
Attribute und Methodenprivate
, public
, protected
Attribute und Methodenprivate
Konstruktoren bei enums
)final
Attributefor(…;…;…)
, while()
, do
… while()
, break
, continue
for
-Schleife bei Iterables und Arrays (for(var a: list){…}
)if
… then
… else
switch
… case
… default
… break
mit char
, String
, int
und enum
-Konstantenint
, double
, char
, boolean
, float
String
als primitiver Datentyp und Klassearray
(auch mehrdimensional und als Array-Konstanten)final
deklariert werden.class Liste<K> { … }
var
aus Java 11 (local variable type inference) zur Deklarationen von initialisierten Variablen ohne explizite Typangabe, var i = 10;
oder var liste = new ArrayList<Integer>();
ArrayList<Integer> liste = new ArrayList<>();
+
, -
, *
, /
, &&
, ||
, !
, %