How about deprecating and renaming?

isNumber -> isJavaNumberLiteral
createNumber -> parseNumber

this way there would be a clearer connection between isParsebale and the
method that parses the number. Furthermore it is clearer what isNumber
really does.

Benedikt

Rob Tompkins <chtom...@gmail.com> schrieb am Sa., 30. Juli 2016 um 21:17:

>
> > On Jul 30, 2016, at 12:41 PM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
> >
> > Can this all be solved with better Javadocs?
> >
>
> I don’t think so. So, I would think that we would do one of two things:
>
> (1) Clarify Javadocs, and set up unit tests to reflect the intent (that
> being that createNumber and isNumber as slightly different)
>
> or
>
> (2) Refactor the code so that they use the same checks to either return
> the boolean or create the number.
>
> Personally I’m indifferent, but I think those are the two different tacks
> we can take.
>
> -Rob
>
> > Gary
> >
> > On Jul 29, 2016 7:59 AM, "Rob Tompkins" <chtom...@gmail.com> wrote:
> >
> >> Hi Benedikt,
> >>
> >> Thanks for the insights here.
> >>
> >>> On Jul 29, 2016, at 3:53 AM, Benedikt Ritter <brit...@apache.org>
> wrote:
> >>>
> >>> Hello Rob,
> >>>
> >>> Rob Tompkins <chtom...@gmail.com <mailto:chtom...@gmail.com>> schrieb
> >> am Do., 28. Juli 2016 um
> >>> 14:23 Uhr:
> >>>
> >>>> In short, I’m trying to generalize LANG-1060, LANG-1040, LANG-1038,
> and
> >>>> LANG-992 with a single issue that actually hits all the bases here
> with
> >>>> NumberUtils.isNumber.
> >>>>
> >>>> Bug (1):
> >>>>
> >>>>       System.out.println(lang.math.NumberUtils.isNumber(“+2”)); ---->
> >>>> false
> >>>>
> >>>> while
> >>>>
> >>>>       System.out.println(lang.math.NumberUtils.createNumber(“+2));
> >> ---->
> >>>> 2
> >>>>
> >>>> Bug (2):
> >>>>
> >>>>
> >>>>       System.out.println(lang.math.NumberUtils.isNumber(“01.5”));
> ---->
> >>>> false
> >>>>
> >>>> while
> >>>>
> >>>>       System.out.println(lang.math.NumberUtils.createNumber(“01.5));
> >>>> ----> 1.5.
> >>>>
> >>>>
> >>>>
> >>>> It seems to me that we could externalize a considerable amount of the
> >> code
> >>>> underlying the two methods into shared methods, as it seems like all
> the
> >>>> validations in createNumber that predicate object creation should be
> >>>> directly used in isNumber. I would love to hear folks’ thoughts.
> >>>>
> >>>
> >>> I think it is important to pay close attention to the JavaDocs in this
> >> case.
> >>>
> >>> NumberUtils.isNumber :
> >>> Checks whether the String a valid Java number.
> >>>
> >>> This has nothing to do with createNumber:
> >>> NumberUtils.createNumber: Turns a string value into a java.lang.Number
> >>>
> >>> What you're probably looking for is:
> >>>
> >>> NumberUtils.isParsebale: Checks whether the given String is a parsable
> >>> number.
> >>>
> >>> The difference is, that isNumber tells you, whether putting the given
> >>> String into Java code woul compile, while isParseble stells you
> whether a
> >>> call to createNumber will be successful.
> >>
> >> This feels confusing to me (mainly because I’m not clear of the context
> of
> >> the word “compile” here). But, I’m mostly agnostic regarding intent
> here.
> >> So let’s not concern ourselves with that.
> >>
> >> Maybe the Jira issue that I created, LANG-1252, should just make the
> >> javadoc clearer in this case.
> >>
> >> Along the same line of thought, in NumberUtilsTest
> >>        testIsNumber()
> >> calls the function
> >> private void compareIsNumberWithCreateNumber(final String val, final
> >> boolean expected) {
> >>    final boolean isValid = NumberUtils.isNumber(val);
> >>    final boolean canCreate = checkCreateNumber(val);
> >>    if (isValid == expected && canCreate == expected) {
> >>        return;
> >>    }
> >>    fail("Expecting "+ expected + " for isNumber/createNumber using \"" +
> >> val + "\" but got " + isValid + " and " + canCreate);
> >> }
> >> where “checkCreateNumber” is declared as:
> >> private boolean checkCreateNumber(final String val) {
> >>    try {
> >>        final Object obj = NumberUtils.createNumber(val);
> >>        if (obj == null) {
> >>            return false;
> >>        }
> >>        return true;
> >>    } catch (final NumberFormatException e) {
> >>        return false;
> >>   }
> >> }
> >> which continues to puzzle me. If, indeed, it is the case that isNumber
> and
> >> createNumber necessarily differ, might we also refactor the unit tests
> as
> >> part of LANG-1252 such that they aren’t directly correlated for the
> sake of
> >> validation?
> >>
> >> Again, many thanks for the response here.
> >>
> >> Cheers,
> >> -Rob
> >>
> >>>
> >>> Regards,
> >>> Benedikt
> >>>
> >>>
> >>>> Cheers,
> >>>> -Rob
> >>
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to