Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Returning a value #290

Open
Quappel opened this issue Nov 7, 2022 · 9 comments
Open

Returning a value #290

Quappel opened this issue Nov 7, 2022 · 9 comments

Comments

@Quappel
Copy link

Quappel commented Nov 7, 2022

In the guideline, as well as all trainings, it is said that one should name the return value result and then assign the return parameter in the code.

CLASS /clean/string_utils DEFINITION [...].
  CLASS-METHODS trim
   IMPORTING
     string TYPE string
   RETURNING
     VALUE(result) TYPE string.
ENDCLASS.

METHOD retrieve.
  DATA(trimmed_name) = /clean/string_utils=>trim( name ).
  result = read( trimmed_name ).
ENDMETHOD.

//not mentioned
METHOD retrieve.
  DATA(trimmed_name) = /clean/string_utils=>trim( name ).
  return read( trimmed_name ).
ENDMETHOD.

In other languages the form return Value; is used. This works also in Abap ( at least in the newest version ), I find it much easier to read. Why is it not mentioned? Also in the Language Help it is not mentioned. Is it a bug, is the feature coming soon?

@suynwa
Copy link

suynwa commented Nov 17, 2022

Where did you this form of return? What is the ABAP release you are on?

My gut feeling is someone defined a macro with the same name as return. Could you check the table TRMAC with name = 'RETURN'?

~Suhas

@Quappel
Copy link
Author

Quappel commented Nov 30, 2022

Hi I am just back from vacation and will check tomorrow

@Quappel
Copy link
Author

Quappel commented Dec 1, 2022

The ABAP release is 751.

I checked the TRMAC and there is no entry for 'RETURN'.

@fabianlupa
Copy link
Contributor

You also cannot redefine keywords using macros (I assume this also applies to TRMAC) "RETURN" is an ABAP key word and cannot be redefined as a DEFINE macro.. I cannot reproduce this on 7.56 and the info doesn't quite add up for me.

This works also in Abap ( at least in the newest version )

is the feature coming soon?

The ABAP release is 751.

7.51 was released 6 years ago.

@Quappel
Copy link
Author

Quappel commented Dec 1, 2022

Ohh sorry, I had no idea how to look it up and must have been looking at the wrong value. My coworker just told me that it is 7.58

@fabianlupa
Copy link
Contributor

Ah now it makes sense, then we externals got another sneak peek with this styleguide repo ;)

(S/4 2022 was just released with 7.57 and the BTP ABAP Environment is on the equivalent 7.89.)

@HrFlorianHoffmann
Copy link
Contributor

Let's wait till that ABAP version is available to the external world, then recommend it as the default variant.

@blackfish5
Copy link

As 7.58 is already officially supported, can this be added as recommended variant?

@pokrakam
Copy link
Contributor

pokrakam commented Jun 10, 2024

This is interesting, and appears to work on A4H 2022 / 7.58

Now a question is whether this is a recommended approach?
The ABAP Doco says: The statement RETURN is generally intended for early but proper returns from processing blocks.
This implies not to use it at the end of a method.

But it does read nicely, and eliminates the need for naming the result variable anywhere other than the declaration. I like this simplification. I mean it would be awkward if we compacted the result assignment into a RETURN in the middle of a method and not at the end:

METHOD calculate_stuff. 
  IF someattribute < 0. 
    RETURN -1.
  ENDIF.
  ...
  result = a + b.
ENDMETHOD.

So for consistency I'd rather use RETURN throughout:

METHOD calculate_stuff. 
  IF someattribute < 0. 
    RETURN -1.
  ENDIF.
  ...
  RETURN a + b.
ENDMETHOD.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants