Re: [PHP-DEV] [RFC] Duration class

"Marc B." <[email protected]>
Newsgroups gmane.comp.php.devel
Message-ID <[email protected]>
Hi

On 04.07.26 00:16, Tim Düsterhus wrote:
> Hi
>
> On 7/3/26 22:45, Marc B. wrote:
>> An alternative would be to use the same sign for nanoseconds as for
>> seconds (while 0 seconds is neither positive or negative)
>
> Yes, this is effectively mentioned in the “Design Considerations” 
> section of the RFC.

I think you missed my point and truncated my explanation example.

1.5s = 1 second + 500_000_000 nanoseconds
-1.5s = -1 seconds + -500_000_000 nanoseconds
-0.5s = 0 seconds + -500_000_000 nanoseconds

No negative flag needed to be handled separately.


>
>> "... if you are interested in absolute values, you have the magnitude
>> right there and can ignore the `$negative` flag."
>>
>> No I can't
>> * adding two durations does NOT guaranties a value greater than the two
>> * passing a negative duration as timeout might throw
>> * ...
>
> The use cases you listed there are all passing the Duration object 
> somewhere else, which I do not consider to be a case of “if you are 
> interested […]”.
>
> The quoted sentence if referring to situations where your code is the 
> end user of the Duration object and extracts the contents from it for 
> further processing. And in those situations a sign-magnitude 
> representation makes processing easier, because you have a single 
> authoritative source of the sign, not one in each component and 
> because you can extract the magnitude right away, without needing to 
> flip the sign of each component.

If you care about positive values only - use `absolute()`
If you want to know the sign of the duration - the is still the is 
negative property - but it's a getter and not a required to be stored flag.


>
>> This does not answer the meaning difference of `seconds` vs.
>> `nanoseconds` - it's confusing naming that `seconds` is the total amount
>> of seconds in this duration but `nanoseconds` is the number of fractions
>> of a second.
>
> A value-object, such as Duration, is uniquely described by the sum of 
> its properties. And in this case, it's quite literally the sum of the 
> $seconds and $nanoseconds.

You missed your own $negative flag

Am I get you right that you dislike property get hooks on value objects 
in general?

See https://externals.io/message/131376#131755


>
> I'm afraid I don't see how one would get the assumption that $seconds 
> would redundantly be equal to ($nanoseconds / 1_000_000_000) or 
> something like that when the object only has $seconds and $nanoseconds 
> properties without also having $milliseconds, $minutes, or something 
> else. The confusion would also be quickly cleared up just by looking 
> at the object and seeing that the $nanoseconds value is always smaller 
> than 1 billion.
>
> In my opinion renaming the $nanoseconds to $fractionalNanoseconds 
> would greatly decrease the ergonomics of the class.

I more thought about renaming `$seconds` into `$totalSeconds`.

Regards,
Marc
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.