Object select or create methods

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Object select or create methods

sergio_101
During my daily work in another framework, we are able to do something very handy like so:

myThing := Thing findOrCreateByKey: 'red_thing'.

where the key is some underscored all lower case unique name for an object we will be calling all the time.

this will return either a new thing with a key of 'red_thing' or the current one that already exists.

We can also do something like:

myThing updateWithDictionary: aDictionary.

and it will flip through the dictionary and assign values to the instance variables.

The above is very handy.

I am currently creating a bunch of methods that populate my image with real objects, and could use these methods.

My question is. Does a behavior like this already exist? If not, I'd like to add these methods to my project (in monticello). They will be used with several different objects, so should I add the methods to Object?

I would imagine this is something I would want to use a great deal. How would I go aobut making this something I could include easily in further projects?

I realize that the 'updateWithDictionary' is very inefficient, but this will just be somethign that runs once, during data import, and never again.

I just want to make sure I am not doing anything whacky.

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: Object select or create methods

Paul DeBruicker
Hi - comments below

sergio_101 wrote
During my daily work in another framework, we are able to do something very
handy like so:

myThing := Thing findOrCreateByKey: 'red_thing'.

where the key is some underscored all lower case unique name for an object
we will be calling all the time.

this will return either a new thing with a key of 'red_thing' or the
current one that already exists.
In your example above what type of object is Thing?
If the object stored at red_thing is to be a global then you'd want

Thing>>findOrCreateByKey: aKey
  ^Smalltalk at: aKey ifAbsentPut:[self createThingFor:aKey]

Look at the senders/implementors of #at:ifAbsentPut: for other ideas e.g.

Dictionary>>#at:ifAbsentPut:

We can also do something like:

myThing updateWithDictionary: aDictionary.

and it will flip through the dictionary and assign values to the instance
variables.
MyClass>>updateWithDictionary: aDictionary

  aDictionary keysAndValuesDo:[:key :value|
        self perform: key asMutator with: value].


The above is very handy.

I am currently creating a bunch of methods that populate my image with real
objects, and could use these methods.

My question is. Does a behavior like this already exist? If not, I'd like
to add these methods to my project (in monticello). They will be used with
several different objects, so should I add the methods to Object?

I would imagine this is something I would want to use a great deal. How
would I go aobut making this something I could include easily in further
projects?

I realize that the 'updateWithDictionary' is very inefficient, but this
will just be somethign that runs once, during data import, and never again.

I just want to make sure I am not doing anything whacky.

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: Object select or create methods

sergio_101
oh! Thing, in this case, is just an object.. that extends Object.. where 'red_thing' is just a string.. 

so, myThing's key would just be a string..

that way, i could do something like

myThing := Thing getByKey: 'red_thing' .. or 
myThing := Thing getByKey: 'blue_thing'

yes, this will be a global thing.. 

>>  Thing>>findOrCreateByKey: aKey
 >>   ^Smalltalk at: aKey ifAbsentPut:[self createThingFor:aKey]

i am not sure this is what i want to do.. i jus want to use the above to create a bunch of object.. then later, do something like:

newThing := Thing findByKey: 'green_thing'.

the above looks like i would have a nebulous 'key'.. and from there, i can use it to grab my instance of Thing. is that correct? 

oh! and asMutator is what i was looking for..

thanks so much!



On Tue Jan 13 2015 at 1:07:42 PM Paul DeBruicker <[hidden email]> wrote:
Hi - comments below


sergio_101 wrote
> During my daily work in another framework, we are able to do something
> very
> handy like so:
>
> myThing := Thing findOrCreateByKey: 'red_thing'.
>
> where the key is some underscored all lower case unique name for an object
> we will be calling all the time.
>
> this will return either a new thing with a key of 'red_thing' or the
> current one that already exists.

In your example above what type of object is Thing?
If the object stored at red_thing is to be a global then you'd want

Thing>>findOrCreateByKey: aKey
  ^Smalltalk at: aKey ifAbsentPut:[self createThingFor:aKey]

Look at the senders/implementors of #at:ifAbsentPut: for other ideas e.g.

Dictionary>>#at:ifAbsentPut:


> We can also do something like:
>
> myThing updateWithDictionary: aDictionary.
>
> and it will flip through the dictionary and assign values to the instance
> variables.

MyClass>>updateWithDictionary: aDictionary

  aDictionary keysAndValuesDo:[:key :value|
        self perform: key asMutator with: value].



> The above is very handy.
>
> I am currently creating a bunch of methods that populate my image with
> real
> objects, and could use these methods.
>
> My question is. Does a behavior like this already exist? If not, I'd like
> to add these methods to my project (in monticello). They will be used with
> several different objects, so should I add the methods to Object?
>
> I would imagine this is something I would want to use a great deal. How
> would I go aobut making this something I could include easily in further
> projects?
>
> I realize that the 'updateWithDictionary' is very inefficient, but this
> will just be somethign that runs once, during data import, and never
> again.
>
> I just want to make sure I am not doing anything whacky.
>
> Thanks!





--
View this message in context: http://forum.world.st/Object-select-or-create-methods-tp4799266p4799384.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.