Wann kann man boolesche Werte in IFs direkt nutzen?

Getting started ... Alles für einen gelungenen Start.
92 Beiträge • Seite 1 von 7 (current) Nächste
92 Beiträge Seite 1 von 7 (current) Nächste

Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Hallo zusammen,

es gibt zwar diese netten Konstanten abap_true und abap_false alias 'X' und SPACE, aber so wirklich boolesch sind sie in der Realität ja doch nicht, denn ein Coding der Form:

Code: Alles auswählen.

IF abap_true.
  WRITE 'ja1'.
ENDIF.
funktioniert nicht. Ich habe aber bei jemandem gesehen, dass er eine Methode aufruft, die einen booleschen RETURNING-Wert zurückliefert, und da sagt er in seinem Programm sinngemäß:

Code: Alles auswählen.

IF methode( exportwert = x ). " Returning-Wert ist vom Typ BOOLE_D
  WRITE 'ja1'.
ENDIF.
Und das funktioniert. Kann man das pauschal so sagen, dass ABAP boolesche Werte genau dann tatsächlich als boolesch akzeptiert, wenn sie Returning-Parameter einer Methode sind? Kommt mir etwas willkürlich vor. Gibt es noch andere Umstände, unter denen das funktioniert?

Das fand ich so toll am C64, dass jede Integervariable sich zugleich auch boolesch interpretieren ließ mit der einfachen Faustregel 0 = falsch, alles andere = true. Da konnte man elegante Konstrukte programmieren, etwa IF Y - X THEN... :-D

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hey,

also irgendwie kann das ja auch nicht funktionieren... "IF abap_true".... da fehlt doch sinngemäß etwas ;) IF lv_wert = abap_true. das funktioniert.

Und deine zweite Ausführung funktioniert wohl in der Richtung:

Code: Alles auswählen.

IF methode( exportwert = x ) = abap_true.
  WRITE 'ja!'.
ENDIF
Was ich für mich aber ganz gerne nutze ist folgendes:

Code: Alles auswählen.

CASE abap_true.
  WHEN lv_wert1.
    WRITE 'ja!'.
  WHEN lv_wert2.
    WRITE 'auch ja!'.
ENDCASE.
Gruß,
der Matze

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
In diesem Blogartikel ist erklärt, dass diese Kurzform seit 7.4 möglich ist. Ist imo eher ein Workaround (abap_false = Initialwert) für weiterhin fehlende Boolsche Werte ;)
https://blogs.sap.com/2014/09/29/abap-n ... pressions/

Code: Alles auswählen.

IF methode( ). "Kurzform für IF methode( ) IS NOT INITIAL.
 write 'ja'.
endif.

"ohne Methode geht das dann halt immer noch nicht
IF abap_true.
 write 'ja'.
endif.

Folgende Benutzer bedankten sich beim Autor fr-g für den Beitrag:
DeathAndPain


Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Thanatos82 hat geschrieben:Hey,

also irgendwie kann das ja auch nicht funktionieren... "IF abap_true".... da fehlt doch sinngemäß etwas ;)
Das war der Sinn meines Threads. Wobei ich da explizit ausgeführt habe, dass es eben doch funktioniert; insofern hättest Du mir das gerne glauben können. Das war ja gerade meine Frage, warum das wider Erwarten funktioniert.

Würde es nicht funktionieren, dann wäre mein ganzer Thread ja gegenstandslos gewesen. So dusslig bin ich dann auch wieder nicht.

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Thanatos82 hat geschrieben:Was ich für mich aber ganz gerne nutze ist folgendes:

Code: Alles auswählen.

CASE abap_true.
  WHEN lv_wert1.
    WRITE 'ja!'.
  WHEN lv_wert2.
    WRITE 'auch ja!'.
ENDCASE.
Es gibt Leute, die das sehr, sehr unschön finden. Mit anderen Worten: Ich hatte schon Kunden, die mir so einen "falsch-rummen" CASE schon um die Ohren gehauen haben.


Ralf *nur mal so als Hinweis
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Mit einem klitze kleinen Macro kriegt man etwas Vergleichbares hin:

Code: Alles auswählen.

define if_true.
if &1 = abap_true.
end-of-definition.

if_true abap_true.
   write: /01 'Ja'.
endif.

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Also, bei Makros streike dann ICH - nicht zu debuggen, schwer zu verstehen (deutlich schwerer als "normales ABAP").

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Was übrigens auch kaum noch einer weiß:

Code: Alles auswählen.

SELECT-OPTIONS s FOR sy-datum DEFAULT sy-datum.
START-OF-SELECTION.
  IF s.
    WRITE: / sy-datum.
  ENDIF.

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ob man diesen Bug unbedingt weitersagen soll, weiß ich nicht - versehentlich kommt da keiner drauf und so wirft man nur Fragen auf ;)


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
ralf.wenzel hat geschrieben:Ob man diesen Bug unbedingt weitersagen soll, weiß ich nicht - versehentlich kommt da keiner drauf und so wirft man nur Fragen auf ;)
Nu ist's zu spät... :D

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Was macht denn dieser IF? Ist das auch eine implizite Prüfung gegen IS INITIAL, so wie bei den funktionalen Methoden?
Ralf hat geschrieben:Es gibt Leute, die das sehr, sehr unschön finden. Mit anderen Worten: Ich hatte schon Kunden, die mir so einen "falsch-rummen" CASE schon um die Ohren gehauen haben.
Das würde ich aber nicht unbedingt zum Maßstab nehmen. Es gibt fast nichts, was man je nach Geschmack nicht unschön finden kann, und lesbar ist das auf jeden Fall. Wenn ein Kunde sich da affig hat, dann kann man es bei dem ja anders machen. Dass man sich mit so einem Statement kundenübergreifend den Ruf versaut, halte ich für ein Gerücht. Da haben die Codes der meisten Entwickler ganz andere Mängel.

Ich habe ja schon an anderer Stelle geschrieben, dass ich eine Prüfung gegen mehrere Werte, die man sonst in einem CASE x WHEN Wert1 OR Wert2 OR Wert3... oder gar in einem IF mit lauter Einzelvergleichen aufzählen müsste, mit einem "falsch-rummen" IF wesentlich eleganter löse:

IF 'Wert1;Wert2;Wert3' CS x.

Da muss man auch erst einen Augenblick drüber nachdenken, was ich da mache, aber dann ist es erheblich besser lesbar (und kürzer).

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Daniel


Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
DeathAndPain hat geschrieben:IF 'Wert1;Wert2;Wert3' CS x.
Da muss man auch erst einen Augenblick drüber nachdenken, was ich da mache, aber dann ist es erheblich besser lesbar (und kürzer).
Nee, ich würde dich fragen, warum du in einem Literal nach einem X suchst - das siehst du doch schon beim codieren, ob da eins drin ist.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Dir ist aber aufgefallen, dass das x nicht in Hochkommata steht? ;-)

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
OMG - das Missverständnis zeigt gleich mal, wie missverständlich das Coding ist. Beim ersten Praxistest durchgefallen ;)


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wann kann man boolesche Werte in IFs direkt nutzen?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Na ja, ein einfaches x ist auch nicht unbedingt ein vorbildlicher Variablenname, sondern hier eher als Platzhalter für einen solchen zu verstehen. ;-)

Vergleichbare Themen

7
Antw.
4219
Views
Werte direkt nach Eingabe ermitteln
von cschmoel » 27.08.2012 11:10 • Verfasst in ABAP® für Anfänger
4
Antw.
2701
Views
Abhängige Werte-Liste (F4-Werte)
von Gast » 27.12.2005 10:34 • Verfasst in ABAP® Core
2
Antw.
1784
Views
Kommunikation aus SAP direkt mit SPS
von Helmut Rückert » 15.10.2008 15:45 • Verfasst in ABAP® Core
13
Antw.
5608
Views
substring direkt in IF
von pherweg » 09.02.2018 17:08 • Verfasst in ABAP® Core
4
Antw.
5552
Views
SQL Befehle direkt absetzen
von Nautilus » 21.03.2006 15:53 • Verfasst in Basis

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140