SAP / styleguides

This repository provides SAP style guides for coding and coding-related topics.
Other
1.68k stars 446 forks source link

Returning a value #290

Open Quappel opened 2 years ago

Quappel commented 2 years ago

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 commented 2 years ago

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 commented 1 year ago

Hi I am just back from vacation and will check tomorrow

Quappel commented 1 year ago

The ABAP release is 751.

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

fabianlupa commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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

blackfish5 commented 5 months ago

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

pokrakam commented 5 months ago

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.