Wann kann man boolesche Werte in IFs direkt nutzen?


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Wann kann man boolesche Werte in IFs direkt nutzen?

Beitragvon DeathAndPain » 01.12.2017, 09:33

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
DeathAndPain
Expert
 
Beiträge: 516
Registriert: 05.05.2006, 10:14
Dank erhalten: 128 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

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

Beitragvon Thanatos82 » 01.12.2017, 09:56

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
Thanatos82
Expert
 
Beiträge: 698
Registriert: 13.09.2012, 13:01
Wohnort: Hagen
Dank erhalten: 125 mal
Ich bin: Entwickler/in

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

Beitragvon fr-g » 01.12.2017, 09:59

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-news-for-740-sp08-logical-expressions/

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.
 

Für diese Nachricht hat fr-g einen Dank bekommen :
DeathAndPain
fr-g
ForumUser
 
Beiträge: 28
Registriert: 26.05.2017, 15:25
Dank erhalten: 11 mal
Ich bin: Entwickler/in

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

Beitragvon DeathAndPain » 04.12.2017, 10:13

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.
DeathAndPain
Expert
 
Beiträge: 516
Registriert: 05.05.2006, 10:14
Dank erhalten: 128 mal
Ich bin: Entwickler/in

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

Beitragvon ralf.wenzel » 06.12.2017, 09:33

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 WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2950
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 158 mal
Ich bin: Freiberufler/in

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

Beitragvon Dele » 06.12.2017, 10:59

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.
Dele
Specialist
 
Beiträge: 291
Registriert: 06.05.2005, 11:07
Dank erhalten: 43 mal

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

Beitragvon ralf.wenzel » 06.12.2017, 11:05

Also, bei Makros streike dann ICH - nicht zu debuggen, schwer zu verstehen (deutlich schwerer als "normales ABAP").

Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2950
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 158 mal
Ich bin: Freiberufler/in

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

Beitragvon ewx » 06.12.2017, 12:03

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.
ewx
Top Expert
 
Beiträge: 3573
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 247 mal

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

Beitragvon ralf.wenzel » 06.12.2017, 12:17

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 WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2950
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 158 mal
Ich bin: Freiberufler/in

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

Beitragvon ewx » 06.12.2017, 12:37

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
ewx
Top Expert
 
Beiträge: 3573
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 247 mal

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

Beitragvon DeathAndPain » 06.12.2017, 12:44

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).

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
Daniel
DeathAndPain
Expert
 
Beiträge: 516
Registriert: 05.05.2006, 10:14
Dank erhalten: 128 mal
Ich bin: Entwickler/in

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

Beitragvon ralf.wenzel » 06.12.2017, 13:07

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 WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2950
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 158 mal
Ich bin: Freiberufler/in

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

Beitragvon DeathAndPain » 06.12.2017, 14:29

Dir ist aber aufgefallen, dass das x nicht in Hochkommata steht? ;-)
DeathAndPain
Expert
 
Beiträge: 516
Registriert: 05.05.2006, 10:14
Dank erhalten: 128 mal
Ich bin: Entwickler/in

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

Beitragvon ralf.wenzel » 06.12.2017, 14:33

OMG - das Missverständnis zeigt gleich mal, wie missverständlich das Coding ist. Beim ersten Praxistest durchgefallen ;)


Ralf
Bild Ralf WenzelHeuristika
SAP-Development • Datenschutzberatung
PublikationenUngarische NotationXing
ralf.wenzel
Top Expert
 
Beiträge: 2950
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 158 mal
Ich bin: Freiberufler/in

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

Beitragvon DeathAndPain » 06.12.2017, 16:43

Na ja, ein einfaches x ist auch nicht unbedingt ein vorbildlicher Variablenname, sondern hier eher als Platzhalter für einen solchen zu verstehen. ;-)
DeathAndPain
Expert
 
Beiträge: 516
Registriert: 05.05.2006, 10:14
Dank erhalten: 128 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
ABAP Übung - ORDER
vor 4 Stunden von DeathAndPain 5 Antw.
export to Memory ID
vor 6 Stunden von DeathAndPain 21 Antw.
gelöst Interne Tabelle mit kopfzeile umwandeln
vor 6 Stunden von DeathAndPain 3 Antw.
Eigene Kalkulation mit CK_F_MATERIAL_CALC
vor 11 Stunden von MartinZapf 0 Antw.
cl_gui_docking_container auf neue ebene anzeigen
vor 10 Stunden von Abapanfänger 8 Antw.

  Ähnliche Beiträge beta
gelöst Tabelle kann Puffer nicht nutzen
23.02.2016, 08:59 von treyfifty 4 Antw.
Werte direkt nach Eingabe ermitteln
27.08.2012, 12:05 von JHM 7 Antw.
welcnen Datentyp wann???
13.12.2004, 10:02 von Gast 2 Antw.
gelöst Wann ist die Tabelle gespeichert auf der Datenbank?
30.11.2016, 06:47 von Tron 1 Antw.
Wann verwendet man Forms (statt Functions)
04.09.2012, 09:40 von ralf.wenzel 8 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!