[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.406
    Hallo,

    was dahinter steckt ist CALL by reference und call bei value.
    CALL BY REFERENCE: es wird die Adresse des Parameters übergeben
    - Veränderungen werden im aufrufenden Programm direkt sichtbar
    - auf der AS400 grundsätzlich default
    - auf der AS400 keinerlei Typprüfung
    - Risiko: falsche Definition im aufgerufenen Programm erzeugt Probleme bis zum Absturz im aufrufenden Programm
    mein Resumee: Finger weg, wenn möglich immer (in Worten: immer) VALUE nehmen. (Sclüsselwort VALUE bei gebundenen Calls, CONST bei dynamischen Calls wirkt ähnlich)

    CALL BY VALUE: Übergabe eines Wertes
    - Veränderungen des Parameters im aufgerufenen Programm werden nicht sichtbar im aufrufenden
    - genaue Kontrolle des Rückgabeflusses
    - Rückgabe über return, bei mehreren Werten Verbundtypen nehmen (DS im RPG)
    - (fast) vollständige Typprüfung auch in ILE RPG (über Prototyp) möglich.

    Weitergabe von Referenzen (CALL BY REFERENCE, oder Pointer) nur in klar definierten Ausnahmefällen, wofür ein positiver Grund vorliegen muss.

    mfg

    Dieter Bender

    @Baldur: wo der C Vergleich hinkt: C weiss üblicherweise auf was ein Pointer zeigt (Ausnahme Pointer auf Pointer), RPG weiss nie auf was ein Pointer zeigt!!!

    Zitat Zitat von BUG
    Das gefällt mir, ich werd's mal probieren!

    Aber vielleicht nochmal ganz kurz zu meiner anderen Frage:
    Könnt ihr mir vielleicht sagen, wie ich mir eine I/O-Variable vorzustellen habe? Ich mag mich hier blamieren weil ich eine Riesenlücke in meinem Basiswissen rausposaune, aber ich finde partout nirgends eine konkrete Definition finde oder eine Anleitung zur Implementierung... Was wie genau geh ich damit um?

    Ich meine, der Name sagt natürlich schon einiges. Geht's dabei dann einfach nur darum, einen Parameter zu übergeben, zu verarbeiten und zurückzugeben?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    20
    Also, wenn ich euch beide richtig verstehe, werden laut Fuerchau I/O-Parameter generell per Referenz uebergeben? Dann würde ich also eine Adresse übergeben, mir daher den Wert besorgen, eine Verarbeitung vornehmen und dann das Ergebnis (direkt) auf die Speicheradresse schreiben, so gesehen also keinen Rückgabewert im eigentlichen Sinne (Return) haben?

    Und nach Dieter geht beides, sowohl per Adresse als auch per Wert, mit Tendenz zu call by value?
    Außerdem gehst du bem Thema Sichtbarkeit auch wirklich von externen Programmen aus, oder?


    @Fuerchau, wie ist das gemeint mit der Eindeutigkeit? Wenn ich einen numerischen Wert als teil der DS hätte, würde ich trotzdem einen String zurückbekommen -> weitere Verarbeitung erst nach erneuter Umwandlung in ursprünglichen Datentyp? Ich bin da vielleicht etwas nachlässig, aber ich finde die Vorstellung nicht so schlimm! Ich mein, so BI-Functions wie %Char gibt's ja auch nicht ohne Grund, oder?

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.406
    Hallo,

    irgendeine Auswahl hast du nur im ILE bei der verwendung von Prototypen, sagst du da beim Parameter VALUE, dann geht er nur hin und es wird ein call by value generiert. In allen anderen Fällen hast du immer einen call by reference vor dirmit allen bereits diskutierten Konsequenzen.
    Rückgabe von Parametern kann beim return erfolgen und dann kommt man in einer Zuweisung an das Ergebnis; im (free) RPG:

    ergebnis = machwas(....);

    wenn du da mehr als einen Wert zurück haben willst, muss dann halt eine Datenstruktur verwendet werden. An die Einzelwerte kommt man dann per Unterfeld wieder dran (da braucht man keinen %irgendwas. Unschön ist hierbei, dass eine DS für RPG letztlich ein Alfastring ist, aber rpg ist halt eine Schmuddel Programmiersprache und ich finde das noch eine der kleineren Übel.
    Sichtbar sind die einzelnen Parameter und Variablen in Abhängigkeit ihrer Definition, wobei bei der Übergabe von Referenzen Seiteneffekte entstehen (die man ja gerade für Parameter Rückgabe nutzt).

    mfg

    Dieter Bender

    Zitat Zitat von BUG
    Also, wenn ich euch beide richtig verstehe, werden laut Fuerchau I/O-Parameter generell per Referenz uebergeben? Dann würde ich also eine Adresse übergeben, mir daher den Wert besorgen, eine Verarbeitung vornehmen und dann das Ergebnis (direkt) auf die Speicheradresse schreiben, so gesehen also keinen Rückgabewert im eigentlichen Sinne (Return) haben?

    Und nach Dieter geht beides, sowohl per Adresse als auch per Wert, mit Tendenz zu call by value?
    Außerdem gehst du bem Thema Sichtbarkeit auch wirklich von externen Programmen aus, oder?


    @Fuerchau, wie ist das gemeint mit der Eindeutigkeit? Wenn ich einen numerischen Wert als teil der DS hätte, würde ich trotzdem einen String zurückbekommen -> weitere Verarbeitung erst nach erneuter Umwandlung in ursprünglichen Datentyp? Ich bin da vielleicht etwas nachlässig, aber ich finde die Vorstellung nicht so schlimm! Ich mein, so BI-Functions wie %Char gibt's ja auch nicht ohne Grund, oder?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Aug 2004
    Beiträge
    20

    Smile

    Klasse, alle Klarheiten beseitigt Herzlichen Dank für diese Fülle an Info!

    Ihr seid ne super Truppe hier,

    Gruß Björn

Similar Threads

  1. Prozedur, in welchem Modul
    By loeweadolf in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-11-06, 15:05
  2. SQL-Update mit Werten aus der gleichen Tabelle
    By Ewald in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 14-02-06, 14:51
  3. Prozedur variabel aufrufen
    By rolf in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 14-10-05, 17:06
  4. Externe Prozedur
    By Muchi in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 23-03-05, 08:04
  5. Parameterübergabe in Prozedur -> Compiler schmiert ab
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 23-11-04, 16:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •