Vergleich der Programmiersprachen IBM RPG (fully free) und Java
IBM RPG und Java sind zwei Programmiersprachen, die in unterschiedlichen Kontexten entstanden sind, aber beide ihre Daseinsberechtigung haben. Während RPG traditionell in der Unternehmens-IT auf IBM-Systemen verwendet wird, ist Java eine plattformunabhängige Sprache, die sich in vielen modernen Softwareprojekten etabliert hat.
Deklaration, Initialisierung und Zuweisung von Variablen in RPG und Java
Nachfolgend betrachten wir zunächst wichtigsten Datentypen von IBM RPG (fully free) und Java im direkten Vergleich. Für jeden Datentyp zeigen wir die Deklaration, Initialisierung und Zuweisung in beiden Sprachen. Diese tabellarische Darstellung hilft, die Gemeinsamkeiten und Unterschiede besser zu verstehen.
Datentyp | Deklaration (RPG) | Deklaration (Java) | Initialisierung (RPG) | Initialisierung (Java) | Zuweisung (RPG) | Zuweisung (Java) |
---|---|---|---|---|---|---|
Packed (P) / BigDecimal | dcl-s amount packed(15:2); |
BigDecimal amount; |
amount = 0; |
amount = BigDecimal.ZERO; |
amount = 12345.67; |
amount = new BigDecimal("12345.67"); |
Zoned (S) / int | dcl-s count zoned(7:0); |
int count; |
count = 0; |
count = 0; |
count = 12345; |
count = 12345; |
Date / LocalDate | dcl-s myDate date; |
LocalDate myDate; |
myDate = %date(); |
myDate = LocalDate.now(); |
myDate = %date('2024-11-20'); |
myDate = LocalDate.parse("2024-11-20"); |
Time / LocalTime | dcl-s myTime time; |
LocalTime myTime; |
myTime = %time(); |
myTime = LocalTime.now(); |
myTime = %time('12:34:56'); |
myTime = LocalTime.parse("12:34:56"); |
Timestamp / LocalDateTime | dcl-s myTimestamp timestamp; |
LocalDateTime myTimestamp; |
myTimestamp = %timestamp(); |
myTimestamp = LocalDateTime.now(); |
myTimestamp = %timestamp('2024-11-20-12.34.56'); |
myTimestamp = LocalDateTime.parse("2024-11-20T12:34:56"); |
Char / char | dcl-s myChar char(1); |
char myChar; |
myChar = 'A'; |
myChar = 'A'; |
myChar = 'Z'; |
myChar = 'Z'; |
Numeric (N) / double | dcl-s myNum packed(10:2); |
double myNum; |
myNum = 0.0; |
myNum = 0.0; |
myNum = 123.45; |
myNum = 123.45; |
Binary (B) / byte[] | dcl-s myBinary binary(1024); |
byte[] myBinary; |
myBinary = *null; |
myBinary = null; |
myBinary = %x'FF00'; |
myBinary = new byte[]{(byte) 0xFF, (byte) 0x00}; |
Indicator (L) / boolean | dcl-s myFlag ind; |
boolean myFlag; |
myFlag = *on; |
myFlag = true; |
myFlag = *off; |
myFlag = false; |
Variable Length Character (VARCHAR) / String | dcl-s myVarChar varchar(50); |
String myVarChar; |
myVarChar = 'Hello'; |
myVarChar = "Hello"; |
myVarChar = 'World'; |
myVarChar = "World"; |
Syntax-Vergleich: Unterschiede und Gemeinsamkeiten
Deklarationen
In Java sind Variablen deklarationspflichtig, aber die Deklaration erfolgt meist inline:
int counter = 0;
In RPG werden Variablen oft am Anfang des Programms definiert. Die fully free-Syntax erlaubt eine modernere Struktur:
dcl-s counter int(10);
Bedingungen
Java:
if (counter > 10) {
System.out.println("Counter is greater than 10");
} else {
System.out.println("Counter is 10 or less");
}
RPG:
if counter > 10;
dsply 'Counter is greater than 10';
else;
dsply 'Counter is 10 or less';
endif;
Schleifen
In beiden Sprachen gibt es verschiedene Arten von Schleifen:
For-Schleife
Java:
for (int i = 0; i < 5; i++) {
System.out.println("i: " + i);
}
RPG:
for counter = 1 to 5;
dsply 'Counter: ' + %char(counter);
endfor;
While-Schleife
Java:
int counter = 0;
while (counter < 5) {
System.out.println("Counter: " + counter);
counter++;
}
RPG:
dcl-s counter int(10) inz(0);
dow counter < 5;
dsply 'Counter: ' + %char(counter);
counter += 1;
enddo;
Do-While-Schleife
Java:
int counter = 0;
do {
System.out.println("Counter: " + counter);
counter++;
} while (counter < 5);
RPG:
dcl-s counter int(10) inz(0);
do;
dsply 'Counter: ' + %char(counter);
counter += 1;
enddo until counter >= 5;
Praktisches Beispiel: Verarbeitung von Geschäftsdaten
Im folgenden Beispiel verarbeiten wir eine Liste von Rechnungen und summieren die Beträge. Dieses Szenario ist in Geschäftsanwendungen weit verbreitet.
RPG
dcl-s invoices packed(10:2) dim(3) inz(10.50:20.75:15.30);
dcl-s total packed(10:2) inz(0);
for i = 1 to %elem(invoices);
total += invoices(i);
endfor;
dsply 'Total: ' + %char(total);
Java
import java.util.Arrays;
public class InvoiceProcessor {
public static void main(String[] args) {
double[] invoices = {10.50, 20.75, 15.30};
double total = 0;
for (double invoice : invoices) {
total += invoice;
}
System.out.println("Total: " + total);
}
}
Beispiel: Zahlen eingeben und multiplizieren
In diesem Beispiel zeigen wir, wie in RPG mit einem Display File und in Java über die Konsole zwei Zahlen eingegeben werden. Das Programm berechnet anschließend das Produkt der beiden Zahlen und zeigt das Ergebnis an.
RPG: Display File für interaktive Eingaben
Das Display File definiert eine Eingabemaske für die Zahlen:
Display File: inputscreen.dspf
A* Display File für Eingaben
A DSPSIZ(24 80 *DS3)
A R SCREEN
A NUM1 10P 2B 5 10
A NUM2 10P 2B 6 10
A 8 10'Bitte F3 drücken, um das Programm zu verlassen.'
A CF03(03)
RPG-Programm
finputscreen cf e workstn
dcl-s num1 packed(10:2);
dcl-s num2 packed(10:2);
dcl-s result packed(10:2);
dow not %eof();
// Display anzeigen und Eingaben lesen
exfmt SCREEN;
// Falls F3 gedrückt wird, Schleife beenden
if %in03;
leave;
endif;
// Berechnung des Produkts
result = num1 * num2;
// Ergebnis ausgeben
dsply 'Das Produkt ist: ' + %char(result);
enddo;
Java: Eingabe über die Konsole
Das folgende Java-Programm nutzt die Klasse Scanner
, um zwei Zahlen von der Konsole einzulesen:
import java.util.Scanner;
public class Multiplication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Eingabe der ersten Zahl
System.out.print("Bitte erste Zahl eingeben: ");
double num1 = scanner.nextDouble();
// Eingabe der zweiten Zahl
System.out.print("Bitte zweite Zahl eingeben: ");
double num2 = scanner.nextDouble();
// Berechnung des Produkts
double result = num1 * num2;
// Ausgabe des Ergebnisses
System.out.println("Das Produkt ist: " + result);
scanner.close();
}
}
Funktionsweise
Die beiden Implementierungen verdeutlichen die unterschiedlichen Ansätze von RPG und Java:
- In RPG wird ein Display File genutzt, um eine Eingabemaske bereitzustellen. Diese Methode ist typisch für interaktive Workstation-Programme auf IBM i-Systemen.
- In Java wird die Klasse
Scanner
verwendet, um Konsoleneingaben zu lesen. Dies ist eine einfache und effektive Methode für interaktive Programme in Java. - Beide Programme berechnen das Produkt der beiden eingegebenen Zahlen und geben das Ergebnis aus.