On a more general note, what do you think of how it's done in other
languages (Haskell's "Maybe") ?

We already have it in the form of nil / all other objects and #ifNil:, but
that would make it explicit with a couple of classes:

Maybe subclass: ActualValue
Maybe subclass: MissingValue
and a #default: or #orElse: accessor to get the wrapped value, defaulting
to something else, or some block-evaluating message similar to #ifNotNilDo:

On 21 December 2016 at 12:05, Tudor Girba <tu...@tudorgirba.com> wrote:

> Hi,
>
> I forgot to mention that another option I played with was to always use a
> metric object, and never numbers. So, numberOfLinesOfCode would return a
> MetricValue. I think the same idea is present in acqoncagua.
>
> Cheers,
> Doru
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>
> > On 21 Dec 2016, at 08:21, Tudor Girba <tu...@tudorgirba.com> wrote:
> >
> > Hi Alex,
> >
> > Following the design proposed by Stef, in your case you would use a
> different collection.
> >
> > Cheers,
> > Doru
> >
> >
> >> On Dec 21, 2016, at 8:13 AM, Alexandre Bergel <alexandre.ber...@me.com>
> wrote:
> >>
> >> Hi Stef,
> >>
> >> You are raising an interesting point to discuss. This MissingValue is
> indeed better than having -1
> >> Something to keep in mind: it may be that one would like to focus on
> the missing value and not really the value.
> >>
> >> Consider:
> >>
> >>> testCollect
> >>>
> >>>    | uarray collected |
> >>>    uarray := UniformOrderedCollection new.
> >>>    uarray add: 10.
> >>>    uarray add: 20.
> >>>    uarray add: (MissingValue discarding).
> >>>    collected := uarray collect: [ :each | each ].
> >>>    self assert: collected size equals: 2.
> >>
> >> It could well be that I would like to be able to query over the
> MissingValue.
> >> Can something like possible: uarray collect: #isMissing
> >> ?
> >>
> >> Cheers,
> >> Alexandre
> >>
> >>
> >>> On Dec 20, 2016, at 10:15 PM, stepharong <stephar...@free.fr> wrote:
> >>>
> >>> Hi dear great OO designers
> >>>
> >>> Here is a little challenges for your brainy souls :)
> >>>
> >>> In Moose when we compute metrics it may happen than a tool (often
> external to pharo) does not compute a metrics
> >>> and when we request it in moose we check and often we return a not so
> good -1.
> >>>
> >>> I'm trying to brainstorm on a solution
> >>>
> >>> - first may be the simplest way is to not invoke a metrics when it is
> not computed. But it means that we should know it and that we should have a
> registration mechanism. After all this is probably the best solution.
> >>>
> >>> - Second we were thinking to use exception but when we have multiple
> entities missing one metrics.... I have serious doubts.
> >>>
> >>> - Second I was thinking about having the following behavior
> >>>
> >>> testCollect
> >>>
> >>>    | uarray collected |
> >>>    uarray := UniformOrderedCollection new.
> >>>    uarray add: 10.
> >>>    uarray add: 20.
> >>>    uarray add: (MissingValue discarding).
> >>>    collected := uarray collect: [ :each | each ].
> >>>    self assert: collected size equals: 2.
> >>>
> >>> testDo
> >>>
> >>>    | res uarray |
> >>>    uarray := UniformOrderedCollection new.
> >>>    uarray add: 10.
> >>>    uarray add: 20.
> >>>    uarray add: (MissingValue discarding).
> >>>    uarray add: 40.
> >>>    res := 0.
> >>>    uarray do: [ :each | res := res + each ].
> >>>    self assert: res equals: 70.
> >>>
> >>>
> >>> testCollectDefaulting
> >>>
> >>>    | uarray collected |
> >>>    uarray := UniformOrderedCollection new.
> >>>    uarray add: 10.
> >>>    uarray add: 20.
> >>>    uarray add: (MissingValue default: 33).
> >>>    collected := uarray collect: [ :each | each ].
> >>>    self assert: collected size equals: 3.
> >>>    self assert: collected third equals: 33
> >>>
> >>>
> >>> I basically started to implement
> >>>
> >>>
> >>> do: aBlock
> >>>    "Refer to the comment in Collection|do:."
> >>>    1 to: self size do:
> >>>        [:index | (self at: index) toDo: aBlock on: self]
> >>>
> >>>
> >>>
> >>> collect: aBlock
> >>>    "Evaluate aBlock with each of the receiver's elements as the
> argument.
> >>>    Collect the resulting values into a collection like the receiver.
> Answer
> >>>    the new collection."
> >>>
> >>>    | newCollection |
> >>>    newCollection := self species new.
> >>>    self
> >>>        do: [ :each | each toCollect: aBlock on: newCollection ].
> >>>    ^ newCollection
> >>>
> >>>
> >>> and
> >>>
> >>> DiscardingValue >> toCollect: aBlock on: aCollection
> >>>    "discard computation"
> >>>    ^ self
> >>>
> >>>
> >>> Object >> toCollect: aBlock on: aCollection
> >>>
> >>>    ^ aCollection add: (aBlock value: self)
> >>>
> >>>
> >>> So I imagine that you see the design and I wanted to get your point of
> view.
> >>>
> >>> --
> >>> Using Opera a kind of bad mail client but far better than thunderbird
> >>> _______________________________________________
> >>> Moose-dev mailing list
> >>> moose-...@list.inf.unibe.ch
> >>> https://www.list.inf.unibe.ch/listinfo/moose-dev
> >>
> >> --
> >> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> >> Alexandre Bergel  http://www.bergel.eu
> >> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> >>
> >>
> >>
> >> _______________________________________________
> >> Moose-dev mailing list
> >> moose-...@list.inf.unibe.ch
> >> https://www.list.inf.unibe.ch/listinfo/moose-dev
> >
> > --
> > www.tudorgirba.com
> > www.feenk.com
> >
> > "If you interrupt the barber while he is cutting your hair,
> > you will end up with a messy haircut."
> >
> _______________________________________________
> Moose-dev mailing list
> moose-...@list.inf.unibe.ch
> https://www.list.inf.unibe.ch/listinfo/moose-dev
>



-- 
Damien Pollet
type less, do more [ | ] http://people.untyped.org/damien.pollet

Reply via email to