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 tudor@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 tudor@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.bergel@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 stepharong@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-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Moose-dev mailing list Moose-dev@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-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev