Giter Site home page Giter Site logo

Comments (5)

HrFlorianHoffmann avatar HrFlorianHoffmann commented on June 11, 2024

An observation: The argument runs both ways.

Suppose I have a method drive and want to rename its parameter speed to speed_in_mph.

Consumers calling ->drive( 50 ) are fine. Consumers calling ->drive( speed = 50 ) have to adjust to ->drive( speed_in_mph = 50 ). In this case, naming the parameter is worse than omitting the name.

from styleguides.

HrFlorianHoffmann avatar HrFlorianHoffmann commented on June 11, 2024

Another observation: Adding parameters that are OPTIONAL or have a DEFAULT is compatible.

Suppose I have a method drive with a parameter speed and want to add a parameter unit.

Adding unit TYPE char3 OPTIONAL or unit TYPE char3 DEFAULT 'MPH' is okay. Neither breaks consumers that call ->drive( 50 ).

from styleguides.

HrFlorianHoffmann avatar HrFlorianHoffmann commented on June 11, 2024

One more observation: This touches key questions of stable API design.

APIs, and that includes classes and functions that serve as APIs, should change only in compatible ways.

For a method, this means that the change must not break any existing calls, neither from a technical nor from a logical point of view. Renaming a parameter or adding a mandatory parameter are incompatible changes because it (likely) breaks existing calls. Adding an OPTIONAL or DEFAULT parameter is compatible if omitting the parameter produces the same behavior as before, when the parameter did not exist.

from styleguides.

janrichter03 avatar janrichter03 commented on June 11, 2024

Hello again,
I have tested your points and you are right.
a) If method has just one parameter and OPTIONAL of DEFAULT is added, the CALL without parameter name remains OK.
b) If a method has 1 normal parameter + 1 OPTIONAL parameter, it must be called with the parameter names (if uses both), so again no harm to add a third parameter, also OPTIONAL.
c) But there is a case, which can be wrong: If a method has only one parameter, which is OPTIONAL.
If such method is called without the parameter name... Then if we add a second OPTIONAL parameter, the method call will be wrong. I see just one advice to put PREFERRED PARAMETER on the first one.

from styleguides.

Jelena-P avatar Jelena-P commented on June 11, 2024

IMHO in the example given either the method name (drive) is not descriptive enough or it violates "the method should do one thing" concept. Either there should be 2 methods, e.g. set_speed( 50 ) and drive( ) or the method should be drive_with_speed or something more than just "drive".

I feel there is no issue here and the problem is that Clean ABAP was not followed in other parts of the program, which lead to it causing such ambiguity.

Side note. "Drive" example is not the best here as we don't really set speed and then drive IRL but in SAP world, similar business object methods frequently end up being "overloaded" with parameters. I fall into this trap myself frequently because especially for experienced ABAPers creating more smaller things goes counter to what we've been taught for years before. But the whole point of Clean ABAP is to get away from such mentality, not to indulge it.

from styleguides.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.