[ 
https://issues.apache.org/jira/browse/NUMBERS-123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16876445#comment-16876445
 ] 

Heinrich Bohne commented on NUMBERS-123:
----------------------------------------

While pondering over the impact of converting this constructor to a factory 
method (and over the possible reasons for choosing one over the other in 
general), I couldn't help but notice one consequence that I would consider a 
drawback:

The constructor {{BigFraction(BigInteger, BigInteger)}} not only initializes 
the fields {{numerator}} and {{denominator}}, but it also ascertains that the 
denominator is not zero, it ensures that the sign, if present, is held by the 
numerator, and it reduces the numerator and denominator to lowest terms.

All of these conditions are already fulfilled by the values passed to this 
constructor from the method {{from(double)}}, even if they were enforced in a 
completely different way, so subjecting the calculated numerator and 
denominator to the checks and conversions of the constructor 
{{BigFraction(BigInteger, BigInteger)}} is redundant. I don't think this 
redundancy is outweighed by the benefits of having the code inside a static 
factory method instead of a constructor (although admittedly, this is because I 
don't really know what these benefits are), so actually, I find the original 
design where this code was inside a constructor to be preferable (by the way, 
the same also applies to the constructor converted in 
[NUMBERS-124|https://issues.apache.org/jira/browse/NUMBERS-124]). What do you 
think, Gilles?

> "BigFraction(double)" is unnecessary
> ------------------------------------
>
>                 Key: NUMBERS-123
>                 URL: https://issues.apache.org/jira/browse/NUMBERS-123
>             Project: Commons Numbers
>          Issue Type: Improvement
>          Components: fraction
>            Reporter: Gilles
>            Assignee: Gilles
>            Priority: Trivial
>             Fix For: 1.0
>
>         Attachments: NUMBERS-123__Javadoc.patch
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Constructor {{BigFraction(double value)}} is only called from the 
> {{from(double value)}} method.
>  Actually, this constructor is misleading as it is indeed primarily a 
> conversion from which appropriate {{numerator}} and {{denominator}} fields 
> are computed; those could be set by
>  the "direct" constructor {{BigFraction(BigInteger num, BigInteger den)}}.
> Moreover, the private field {{ZERO}} goes through this conversion code 
> whereas it could constructed "directly", e.g. using {{of(0)}}. Similarly for 
> field {{ONE}}.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to