Benutzer-Werkzeuge

Webseiten-Werkzeuge


unterschiede_zu_java:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
unterschiede_zu_java:start [2020/06/29 09:05] – [LearnJ: Sprachumfang/Features] Martin Pabstunterschiede_zu_java:start [2023/03/22 10:10] (aktuell) Martin Pabst
Zeile 1: Zeile 1:
 ====== LernJ vs. Java: Unterschiede ====== ====== LernJ vs. Java: Unterschiede ======
 Die Programmiersprache auf dieser Website ist eine Teilmenge von Java, die in folgenden kleinen Bereichen etwas vereinfacht wurde: Die Programmiersprache auf dieser Website ist eine Teilmenge von Java, die in folgenden kleinen Bereichen etwas vereinfacht wurde:
-== 1. System.out.print -> print ==+=== 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)''. 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 ==+=== 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: 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:
 <code java> <code java>
Zeile 16: Zeile 16:
 } }
 </code> </code>
- +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:
-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:+
 <HTML> <HTML>
  
Zeile 30: Zeile 29:
 </HTML> </HTML>
  \\   \\ 
-== 3. Vergleich zweier String-Werte ==+=== 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: 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:
 <code java> <code java>
Zeile 47: Zeile 46:
 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 ''==''. 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. Keine Pflicht zur Erstellung eines Konstruktors ===
 +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:
 +<code java>
 +new MyRectangle(10, 10, 100, 100);     // direkter Zugriff auf den Konstruktor der Oberklasse Rectangle möglich
  
-== 4. Standard Library == +class MyRectangle extends Rectangle { 
-Es war nicht möglich, die umfangreiche Standard Library von Java komplett abzubilden. Derzeit sind Nachbildungen folgender Klassen vorhanden:+
 +</code> 
 + 
 +=== 5. Standard Library === 
 +Derzeit sind Nachbildungen folgender Klassen aus der Java Standard Library vorhanden:
   * die Klasse ''Math'',   * die Klasse ''Math'',
   * die Klasse ''String'',   * die Klasse ''String'',
   * eine vereinfachte Version der Klasse ''Timer'' und des Interfaces ''Runnable'',   * eine vereinfachte Version der Klasse ''Timer'' und des Interfaces ''Runnable'',
 +  * eine vereinfachte Version der Klasse ''System'',
 +  * die Klasse ''LocalDateTime'',
   * ein großer Teil des **Collection-Frameworks** von Java, insbesondere die Klassen und Interfaces   * ein großer Teil des **Collection-Frameworks** von Java, insbesondere die Klassen und Interfaces
-    * ''Iterable''+    * ''Iterable'' 
     * ''Collection''     * ''Collection''
     * ''Map'', ''HashMap''     * ''Map'', ''HashMap''
     * ''List'', ''ArrayList'', ''LinkedList''     * ''List'', ''ArrayList'', ''LinkedList''
     * ''Set'', ''HashSet''     * ''Set'', ''HashSet''
 +    * ''Stack''
 +  * die Klassen ''Boolean'', ''Integer'', ''Character'', ''Float'' und ''Double''
  
-LearnJ besitzt zudem eine eingebaute Grafikbibliothek, die die Programmierung einfacher Spiele möglich macht, z.B.+LearnJ besitzt über die Java Standard Library-Klassen hinaus aber viele weitere Klassen, z.B. 
 +  * die Klasse ''Input'' zum Einlesen von Tastatur-Benutzereingaben, 
 +  * die Klasse ''Sound'' zur Ausgabe von Tönen und Sound-Stücken, 
 +  * die Klasse ''PApplet'', die die einen Großteil der [[https://processing.org|Processing-Library]] enthält, 
 +  * die Klasse ''Vector2'' mit Methoden zur 2D-Vektorrechnung, 
 +  * die Klassen ''WebSocket'' und ''WebSocketClient'' zur Programmierung von Chat-Programmen, Netzwerkspielen u.ä. 
 +  * sowie eine eingebaute umfangreiche Grafikbibliothek, die die Programmierung einfacher Spiele möglich macht (Klassen ''World''''Circle'', ''Ellipse'', ''Rectangle'', ''Polygon'', ''Triangle'', ''Sprite'', ''Turtle'', ''Text'', ''Bitmap'', ''Group'', ''Gamepad'' usw.)
  
 +**Links:**
 +  * [[https://www.online-ide.de/api_documentation.html|JavaDoc-ähnline Übersicht über alle Klassen von LearnJ]]
 +  * [[api:documentation:start|Dokumentation der Klassenbibliothek mit Erklärungen und vielen Beispielprogrammen]]
 +  * [[api:documentation:grafik:start|Dokumentation der Grafikklassen mit Erklärungen und vielen Beispielprogrammen]]
 +  * [[api:documentation:spiele:start|Dokumentation der Möglichkeiten zur Spieleprogrammierung mit vielen Beispielprogrammen]]
 +
 +== Hier ein einfaches Beispiel zur Verwendung der Grafikklassen ==
 <HTML> <HTML>
 +<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Feuerwerk'}">
 +<script type="text/plain" title="Feuerwerk.java">
 +new Feuerwerk();
  
-<div class="java-online" style="height: 400pxwidth: calc(100% - 20px)" data-java-online="{'withBottomPanel': false}">+class Feuerwerk extends Actor { 
 +    
 +   public void act() { 
 +      if(Math.random() < 0.03) { 
 +          
 +         int funkenzahl Math.floor(Math.random() * 50 + 30); 
 +         int farbe Math.floor(Math.random() * 0xffffff); 
 +         double x = Math.random() * 400 + 200; 
 +         double y Math.random() * 600; 
 +         double lebensdauer = 60 + Math.random() * 60; 
 +         for(int i = 0; i < funkenzahl; i++) { 
 +            new Funke(x, y, farbe, lebensdauer); 
 +         } 
 +         Sound.playSound(Sound.cannon_boom);
  
-<script type="text/plain" title="Test1.java"> +      } 
-new World(800600); +   } 
-Rectangle r = new Rectangle(10, 100300100); + 
-r.setFillColor(Color.green); +
-r.setBorderColor(Color.darkred); + 
-r.rotate(30); +class Funke extends Circle { 
-Circle c new Circle(200, 200, 50); +   double vx; 
-c.setAlpha(0.8); +   double vy; 
-Sprite s new Sprite(400300, SpriteLibrary.Ship_1); +   double lebensdauer;           // lebensdauer in 1/30 s 
-s.scale(0.3);+ 
 +   Funke(double x, double y, int farbedouble lebensdauer{ 
 +      super(xy4); 
 +      double winkel = Math.random() * 2 * Math.PI
 +      double v = Math.random() * 15 + 5
 +      vx = v * Math.cos(winkel); 
 +      vy v * Math.sin(winkel); 
 +      setFillColor(farbe); 
 +      this.lebensdauer lebensdauer; 
 +   } 
 + 
 +   public void act() { 
 +      lebensdauer--; 
 +      move(vxvy); 
 +      vy = vy + 0.2; 
 +      if(lebensdauer < 30) { 
 +         setAlpha(lebensdauer / 30); 
 +      } 
 +      if(isOutsideView() || lebensdauer < 0) { 
 +         destroy(); 
 +      } 
 +   } 
 + 
 +}
 </script> </script>
 </div> </div>
- 
 </HTML> </HTML>
 + \\ 
  
 ====== LearnJ: Sprachumfang/Features ====== ====== LearnJ: Sprachumfang/Features ======
 Hier eine grobe Übersicht über den vorhandenen Sprachumfang von LearnJ und die Features der Online-Entwicklungsumgebung: Hier eine grobe Übersicht über den vorhandenen Sprachumfang von LearnJ und die Features der Online-Entwicklungsumgebung:
-== Klassen ==+==== Klassen ====
   * ''class'', ''enum'', ''interface''   * ''class'', ''enum'', ''interface''
-  * ''extends'', ''implements''+  * ''extends'', ''implements'' 
   * abstrakte Klassen   * abstrakte Klassen
   * ''static'' Attribute und Methoden   * ''static'' Attribute und Methoden
Zeile 94: Zeile 157:
   * casten (implizit und explizit)   * casten (implizit und explizit)
  
-=== Strukturanweisungen ===+==== Strukturanweisungen ====
   * ''for(...;...;...)'', ''while()'', ''do'' ... ''while()'', ''break'', ''continue''   * ''for(...;...;...)'', ''while()'', ''do'' ... ''while()'', ''break'', ''continue''
   * Vereinfachte ''for''-Schleife bei Iterables und Arrays (''for(var a: list){...}'')   * Vereinfachte ''for''-Schleife bei Iterables und Arrays (''for(var a: list){...}'')
Zeile 100: Zeile 163:
   * ''switch'' ... ''case'' ... ''default'' ... ''break'' mit ''char'', ''String'', ''int'' und ''enum''-Konstanten   * ''switch'' ... ''case'' ... ''default'' ... ''break'' mit ''char'', ''String'', ''int'' und ''enum''-Konstanten
  
-=== Datentypen ===+==== Datentypen ====
   * primitive Datentypen ''int'', ''double'', ''char'', ''boolean'', ''float''   * primitive Datentypen ''int'', ''double'', ''char'', ''boolean'', ''float''
   * Sonderrolle von ''String'' als primitiver Datentyp und Klasse   * Sonderrolle von ''String'' als primitiver Datentyp und Klasse
Zeile 107: Zeile 170:
   * lokale Variablen und Parameter können als ''final'' deklariert werden.   * lokale Variablen und Parameter können als ''final'' deklariert werden.
   * Generics, z.B. ''class Liste<K> { ... }''   * Generics, z.B. ''class Liste<K> { ... }''
-  * Variablendeklaration mit ''var'' ist möglich ([[https://blog.codefx.org/java/java-10-var-type-inference/||local variable type inference]])+  * Das Schlüsselwort ''var'' aus Java 11 ([[https://blog.codefx.org/java/java-10-var-type-inference/|local variable type inference]]) zur Deklarationen von initialisierten Variablen ohne explizite Typangabe, \\ z.B.: ''var i = 10;'' oder ''var liste = new ArrayList<Integer>();'' 
 +  * Instanzierung von Generics ohne Angabe der Typen in '<>', z.B. ''ArrayList<Integer> liste = new ArrayList<>();'' 
 +  * Wrapper-Klassen ''Character'', ''Boolean'', ''Integer'', ''Float'' und ''Double'' mit [[https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html|Auto-Boxing/Unboxing]]
  
-=== Operatoren ===+==== Operatoren ====
   * ''+'', ''-'', ''*'', ''/'', ''&&'', ''||'', ''!'', ''%''    * ''+'', ''-'', ''*'', ''/'', ''&&'', ''||'', ''!'', ''%'' 
   * [[https://de.wikipedia.org/wiki/Kurzschlussauswertung|short circuit evaluation]] bei ''&&'' und ''||''   * [[https://de.wikipedia.org/wiki/Kurzschlussauswertung|short circuit evaluation]] bei ''&&'' und ''||''
   * [[https://en.wikipedia.org/wiki/Constant_folding|constant folding]]   * [[https://en.wikipedia.org/wiki/Constant_folding|constant folding]]
  
-=== Editor ===+==== Editor ====
   * Verwendet wird der Monaco-Editor von Visual Studio Code. Viele [[https://www.microsoft.com/de-de/techwiese/know-how/visual-studio-code-keyboard-shortcuts.aspx|der darin möglichen Editor-Kommandos und Shortcuts]] sind auch in den Editor-Bereichen dieser Webseite möglich.   * Verwendet wird der Monaco-Editor von Visual Studio Code. Viele [[https://www.microsoft.com/de-de/techwiese/know-how/visual-studio-code-keyboard-shortcuts.aspx|der darin möglichen Editor-Kommandos und Shortcuts]] sind auch in den Editor-Bereichen dieser Webseite möglich.
   * Syntax-Highlighting   * Syntax-Highlighting
Zeile 126: Zeile 191:
   * Show References (Shift + F12)   * Show References (Shift + F12)
  
-=== Debugger === +==== Debugger ==== 
-  * Zeigen aller Variablen im aktuellen Scope +  * Zeigt alle Variablen im aktuellen Scope 
-  * Auswertung von Termen +  * Auswertung von Termen (watch) 
-  * Zeigen des Variableninhalts beim Mouseover +  * Zeigt den Variableninhalt beim Mouseover im Editor 
-  * Auswerten von Termen durch Markieren mit der Maus +  * Auswertung von Termen durch Markieren mit der Maus im Editor 
-  * Step into, Step over+  * Step into, Step over, Step out
   * Breakpoints   * Breakpoints
  
- === Console === +==== Console ==== 
-  * Code completion+  * Code completion (mit Strg + Leertaste) 
 +  * Parameter hints (mit Strg + Shift + Leertaste)
   * Auswertung beliebiger Terme   * Auswertung beliebiger Terme
   * Ausführen von Statements   * Ausführen von Statements
-  * Während des Debuggings: Zugriff auf den aktuellen Scope des gerade ausgeführten Programms +  * Während des Debuggings: Zugriff auf die Variablen im aktuellen Scope des gerade ausgeführten Programms 
-  * History (mit Pfeil nach oben/unten)+  * Edit 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