Hi damien

why not :)
Now I do not know if may be is helping me in my scenario.



On Wed, 21 Dec 2016 13:54:12 +0100, Damien Pollet <damien.pol...@gmail.com> wrote:

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



--
Using Opera's mail client: http://www.opera.com/mail/

Reply via email to