Zurück zu den Zusätzlichen Informationen.
=Übersetzen von gemeinsamen Programm-Teilen= Die verlinkte englischsprachige Seite zeigt, wie gemeinsame Probleme in verschiedenen Programmiersprachen, einschließlich Java und FreePascal / Object Pascal gelöst werden können.
Rosetta Code
Übersetzen von Java-Operatoren
Arithmetische Operatoren
| Java |
Pascal |
Kommentare |
| + |
+ |
Addition |
| - |
- |
Subtraktion |
| * |
* |
Multiplikation |
| / |
/ |
Gleitkommadivision |
| % |
Mod |
Modulo (Division ohne Rest) |
| ++ |
Inc |
inkrementieren (Hochzählen) |
| -- |
Dec |
dekrementieren (Herunterzählen) |
Relationale Operatoren
| Java |
Pascal |
Kommentare |
| == |
= |
gleich |
| != |
<> |
ungleich |
| < |
< |
kleiner |
| <= |
<= |
kleiner gleich |
| > |
> |
grösser |
| >= |
>= |
grösser gleich |
Logische Operatoren
<table>
<thead>
<tr>
<th>Java</th>
<th>Pascal</th>
<th>Kommentare</th>
</tr>
</thead>
<tbody>
<tr>
<td> !</td>
<td> Not</td>
<td> Negation (Den Wahrheitswert in sein Gegenteil ändern)</td>
</tr>
<tr>
<td> &&</td>
<td> And</td>
<td> logisches UND mit Kurzschlussauswertung<br />
In Free Pascal ist dies die Standard-Compilereinstellung</td>
</tr>
<tr>
<td> <nowiki></td>
<td></td>
<td> Or</td>
</tr>
<tr>
<td> &</td>
<td> And</td>
<td> logisches UND mit Komplettauswertung<br />
In Free Pascal ist dies die Compilerdirektive {$B ON}</td>
</tr>
<tr>
<td> |</td>
<td> Or</td>
<td> logisches ODER mit Komplettauswertung In Free Pascal ist dies die Compilerdirektive {$B ON}</td>
</tr>
<tr>
<td> ^</td>
<td> Xor</td>
<td> exclusives ODER</td>
</tr>
</tbody>
</table>
Bit Operatoren
| Java |
Pascal |
Kommentare |
| ~ |
Not |
Einerkomplement |
| & |
And |
bitweises UND |
| | |
Or |
bitweises inclusives ODER |
| ^ |
Xor |
bitweises exclusives ODER |
| >> |
Shr |
bitweises Rechtsschieben mit Vorzeichen |
| >>> |
ist in Free Pascal nicht vorhanden |
bitweises Rechtsschieben ohne Vorzeichen |
| << |
Shl |
bitweises Linksschieben |
Zuweisungs Operatoren
Hinweis: C-artige Operatoren werden in Free Pascal über die Kommandozeilenoption -Sc ermöglicht. C-artige Operatoren werden in Lazarus über die Projekteinstellungen ermöglicht.
{| class="wikitable" ! Java !! Pascal !! Kommentare |- | = | := | Einfache Zuweisung |- | += | += | Additionszuweisung |- | -= | -= | Subtraktionszuweisung |- | *= | *= | Multiplikationszuweisung |- | /= | /= | Divisionszuweisung |- | %= | ist in Free Pascal nicht vorhanden | Modulo Zuweisung |- | &= | ist in Free Pascal nicht vorhanden | UND Zuweisung |- | |= | ist in Free Pascal nicht vorhanden | ODER Zuweisung |- | ^= | ist in Free Pascal nicht vorhanden | Exclusive ODER Zuweisung |- | >>= | ist in Free Pascal nicht vorhanden | Rechtsschiebe Zuweisung |- | >>>= | ist in Free Pascal nicht vorhanden | Rechtsschiebe Zuweisung mit Nullexpansion |- | <<= | ist in Free Pascal nicht vorhanden | Linksschiebe Zuweisung |}
Sonstige Operatoren
| Java |
Pascal |
|
| & |
@ |
Adresse von ... |
| * |
^ |
Zeiger / Pointer |
Ternärer Operator
{| class="wikitable" ! Java !! Pascal !! Kommentare |- | ? | ist in Free Pascal nicht vorhanden | Erlaubt die verkürzte Schreibweise von If-Else Verzweigungen und gibt einen Wert zurück
Verwendung:
Ergebnisfeld = Bedingung <b>?</b> Wahrfall : Falschfall
Beispiel:
Für ein Maximum in Java:
max = ( a > b ) ? a : b;
Dies entspricht in Pascal folgendem if-else-Konstrukt:
if a > b Then
max := a
else
max := b;
|}
Übersetzen von Java Kommentarzeichen
| Java |
Pascal |
Kommentare |
| /* |
{ |
Anfang eines Kommentars |
| /* |
(* |
Anfang eines Kommentars |
| */ |
} |
Ende eines Kommentars |
| */ |
*) |
Ende eines Kommentars |
| // |
// |
Kommentarzeile |
Übersetzen von Java Anweisungsblöcken
| Java |
Pascal |
Kommentare |
| { |
Begin |
Anfang eines Anweisungsblocks |
| } |
End |
Ende / Abschluss eines Anweisungsblocks |
Übersetzen von Java Schleifentypen
| Java |
Pascal |
Kommentare |
| for( ...; ...; ...++) |
For ... To ... Do |
Kopfgesteuerte Schleife, die hochgezählt wird |
| for(...; ...; ...--) |
For ... Downto ... Do |
Kopfgesteuerte Schleife, die heruntergezählt wird |
| for (Datentyp ...: Array) // For Each Schleife |
For ... in |
Kopfgesteuerte Schleife, für das Durchsuchen von Mengen |
| while (...) |
While ... Do |
Kopfgesteuerte Schleife |
| do ... while(...) |
Repeat ... Until |
Fussgesteuerte Schleife |
| do ... while!(...) |
Repeat ... Until ... Not |
Fussgesteuerte Schleife mit Nichtung des Ergebnisses des Ausdrucks |
Übersetzen von Java Verzweigungen / Bedingungen
| Java |
Pascal |
Kommentare |
| if(...) |
If ... Then |
If-Bedingung |
| if(...) ... else |
If ... Then ... Else |
If-Bedingung mit Sonstzweig |
| switch(...) case ...: ...break; |
Case ... Of ...: ... End; |
Case-Bedingung |
| switch(...) case ...: ... break; default ...; |
Case ... Of ...: ... Else ... End; |
Case-Bedingung mit Sonst-Zweig |
Übersetzen von Java Verzweigungen- / Schleifenabbrüchen
| Java |
Pascal |
Kommentare |
| break |
Break |
Die break-Anweisung ermöglicht es, vorzeitig eine Schleife (oder ein switch-case-Konstrukt) zu verlassen |
| continue |
Continue |
Die continue-Anweisung ermöglicht es, den aktuellen Schleifendurchlauf zu beenden |
Übersetzen von Java Prozeduren und Funktionen
| Java |
Pascal |
Kommentare |
| void Prozedurname(...) |
Procedure Prozedurname(...) |
Unterprogramm (Prozedur) ohne Rückgabewert |
| datentyp Funktionsname(...) |
Function Funktionsname(...): Datentyp |
Unterprogramm (Funktion) mit Rückgabewert |
| return |
FunctionName := ... |
Diese Pascal-Schreibweise ist überholt (deprecated) |
| return |
Result := ... |
Einer Funktion Ihren Rückgabewert zuweisen |
Übersetzen von Java Dateiheadern
| Java |
Pascal |
Kommentare |
| package ...; |
Unit ...; |
Einbinden der Pascal Unit bzw. des Java Packages |
| import ...; |
Uses ...; |
Bindet Bibliotheken und Klassen ein |
| public static void main(String[...] args) {...} |
Program ProgramName; Begin ... End. |
Hauptprogramm |
Übersetzen von Java Datentypen
| Java Datentyp |
Pascal Datentyp |
Speichergrösse in Bits |
Range |
| byte |
Shortint |
8-Bit |
-128 .. 127 |
| short |
SmallInt |
16-Bit |
-32768 .. 32767 |
| int |
LongInt |
32-Bit |
-2147483648..2147483647 |
| long |
Int64 |
64-Bit |
-9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 |
| float |
Single |
32-Bit |
1.5E-45 .. 3.4E+38 |
| double |
Double |
64-Bit |
5.0E-324 .. 1.7E+308 |
| boolean |
Boolean |
8-Bit |
False bzw. True |
| char |
WideChar |
16-Bit |
2 Bytes codieren ein sichtbares Zeichen |
| String |
WideString |
0-Bit bis ∞ |
Zeichenkette |
Übersetzen von Java Aufzählungen (Enumerationen)
<table>
<thead>
<tr>
<th>Java</th>
<th>Pascal</th>
<th>Kommentare</th>
</tr>
</thead>
<tbody>
<tr>
<td> enum TheEnum = {MINVALUE, MAXVALUE}</td>
<td> TheEnum = (MINVALUE, MAXVALUE)</td>
<td> Die Konstante MINVALUE enthält den Wert 0<br />
Die Konstante MAXVALUE enthält den Wert 1</td>
</tr>
</tbody>
</table>
Übersetzen von Java Arrays
| Java |
Pascal |
Kommentare |
| Datentyp[] arrayName = new Datentyp[...]; |
Datentyp: Array[...] Of Datentyp; |
|
| Datentyp arrayVar[...] = new Datentyp[...]; |
Datentyp: Array[...] Of Datentyp; |
|
Übersetzen der Java Objektorientierung
<table>
<thead>
<tr>
<th>Java</th>
<th>Pascal</th>
<th>Kommentare</th>
</tr>
</thead>
<tbody>
<tr>
<td> class Klassenname{...}</td>
<td> Klassenname = Class ... End;</td>
<td> Leitet eine Klassendeklaration ein Schreibweise für Free Pascal und Delphi</td>
</tr>
<tr>
<td> class Klassenname{...}</td>
<td> Klassenname = Object ... End;</td>
<td> Leitet eine Klassendeklaration ein Schreibweise für Free Pascal und Turbo Pascal</td>
</tr>
<tr>
<td> class Klassenname<T> {...}</td>
<td> Generic Klassenname = Class<T> ... End;</td>
<td> Leitet eine Klassendeklaration ein Generische Klassen werden erst ab Free Pascal 2.2.2 unterstützt</td>
</tr>
<tr>
<td> Klassenname(...)</td>
<td> Constructor Klassenname.Konstruktorname(...);</td>
<td> In Java ist der Name des Konstructors der Klassenname<br />
In Free Pascal ist der Name des Konstruktors Create</td>
</tr>
<tr>
<td> abstract</td>
<td> Abstract</td>
<td> Kennzeichnet eine abstrakte Klasse oder eine abstrakte Methode, d. h. die Klasse oder Methode wird nicht implementiert.</td>
</tr>
<tr>
<td> implements</td>
<td> SomeClass = Class(SomeInterface)</td>
<td> Implementiert ein Interface</td>
</tr>
<tr>
<td> extends</td>
<td> SubClass = Class(BaseClass)</td>
<td> Bezeichnet die Klasse von der geerbt wird</td>
</tr>
<tr>
<td> final</td>
<td> Final</td>
<td> Verhindert das nachträgliche Ändern oder Überschreiben von virtuellen Methoden</td>
</tr>
<tr>
<td> interface</td>
<td> TheInterface = Interface</td>
<td> Deklariert die Schnittstelle einer Klasse</td>
</tr>
<tr>
<td> new Class()</td>
<td> InstanzVariable := Klassenname.Create</td>
<td> Initialisierung von Referenz-Datentypen</td>
</tr>
<tr>
<td> private</td>
<td> Private</td>
<td> </td>
</tr>
<tr>
<td> protected</td>
<td> Protected</td>
<td> </td>
</tr>
<tr>
<td> public</td>
<td> Public</td>
<td> </td>
</tr>
<tr>
<td> static</td>
<td> Static</td>
<td> </td>
</tr>
<tr>
<td> static</td>
<td> Class Function</td>
<td> </td>
</tr>
<tr>
<td> static</td>
<td> Class Procedure</td>
<td> </td>
</tr>
<tr>
<td> super</td>
<td> Inherited</td>
<td> Ruft den Elternkonstruktor auf</td>
</tr>
<tr>
<td> this</td>
<td> Self</td>
<td> Bezeichnet die Klasse "in der man sich gerade befindet" (Selbstreferenz)</td>
</tr>
<tr>
<td> transient</td>
<td> </td>
<td> Die Variable soll bei der Speicherung von Objekten (Serialisierung) nicht gespeichert werden.</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
Freigabe eines Objektes
<table>
<thead>
<tr>
<th>Java</th>
<th>Pascal</th>
<th>Kommentare</th>
</tr>
</thead>
<tbody>
<tr>
<td> null</td>
<td> Nil</td>
<td> Gibt die Referenz auf ein Objekt frei. Mehr ist in Java nicht nötig, den Rest erledigt in Java der Garbage-Collektor.<br />
In Pascal führt der Aufruf FreeAndNil(...) zum selben Ergebnis.</td>
</tr>
</tbody>
</table>
Klassenbestimmung
| Java |
Pascal |
Kommentare |
| instanceof |
Is |
Bestimmt die Klassenzugehörigkeit eines Objektes |
Werfen von Exceptions
| Java |
Pascal |
Kommentare |
| throw |
Raise |
Wirft eine Exception |
| throws |
ist in Free Pascal nicht vorhanden |
Gibt im Methodenkopf einer Klasse oder Methode an, welche Ausnahme(n) von der Klasse bzw. Methode ausgelöst werden kann. |
Fangen von Exceptions
| Java |
Pascal |
Kommentare |
| try { ... } catch { ... } |
Try Begin ... End Except Begin ... End |
Fehlerbehandlung mit einem Try-Block |
| try { ... } catch { ... } finally { ... } |
begin ... try try ... except ... end; finally ... end; ... end; |
Fehlerbehandlung mit einem Block für Abschlussarbeiten |
Threadprogrammierung
<table>
<thead>
<tr>
<th>Java</th>
<th>Pascal</th>
<th>Kommentare</th>
</tr>
</thead>
<tbody>
<tr>
<td> synchronized</td>
<td> Synchronize(@...)</td>
<td> Dient der Synchronisation mit dem Hauptthread.</td>
</tr>
<tr>
<td> volatile</td>
<td> </td>
<td> Variablen, die dem Datenaustasch mit anderen Threads dienen, werden in Java mit volatile deklariert.<br />
In Free Pascal sind alle global definierten Variablen volatile.</td>
</tr>
</tbody>
</table>
Aufruf von Fremdfunktionen (z. B. aus Dll's)
| Java |
Pascal |
Kommentare |
| native |
StdCall |
Pascal / FPC Standardaufrufkonvention |
| native |
CDecl |
C Standardaufrufkonvention |
--Olaf 14:28, 24 March 2013 (UTC)
From the Free Pascal wiki, page "Pascal for Java users/de", as it stood on 2014-01-12 after a change by Olaf, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.