Vergleich der Programmiersprachen IBM RPG (fully free) und Java

tiny-tool.de

tiny-tool.de

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.