great! looking at STON next! thanks!

On Thu, May 22, 2014 at 2:26 PM, Clément Bera <bera.clem...@gmail.com>wrote:

> Hello,
>
> I think you should look at the STON framework. STON looks like JSON for
> smalltalk objects. Basically it does the same as your idea but instead of a
> dictionary it loads fields of an objects from a STON file which looks like
> a JSON file (a STON is kind of an extended Dictionary exported as a string,
> but it has support for more that instance variables).
>
> Now if you want to go your way, to me what you want to do looks fine.
> These methods can be used for development tools but also for frameworks and
> stuff like that. The thing to do it is to add this method in Object and add
> support so it can work on all objects in the system.
>
> Object>>#intializeWithDictionary: aDictionary
>     self class isVariable ifTrue: ["specific case ?"]
>     self class isBytes ifTrue: ["specific case ?"]
>     self class isCompiledMethod ifTrue: ["specific case ?"]
>     self class isSmallInteger ifTrue: ["specific case"]
>     aDictionary keysAndValuesDo: [ :key :value |
>         self instVarNamed: key put: value ifAbsent: [ self error: 'no ',
> key , ' found'].
>
> But as you can see there are many specific cases: CompiledMethod, bytes
> objects, word objects, immediate objects, variable-sized objects, weak
> objects and for Pharo 4 even others that you may need to handle in your
> code (Ephemerons, 2bytes and 4 bytes objects).
>
> If you don't get the specific cases (you may not know programming language
> internals), then imagine how you would make your code work to initialize an
> Array, a ByteArray or a CompiledMethod from a dictionary. Not easy, huh ?
>
> That's why I strongly recommend to use something like STON, because it is
> very easy to use, handle already all the specific cases, well documented
> (Sven always does fancy documentation) and it will be maintained in Pharo 4
> for recent changes (because Sven likes to use the bleeding edge version of
> Pharo).
>
> Regards,
>
> Clement
>
>
> 2014-05-22 19:37 GMT+02:00 sergio_101 <sergio....@gmail.com>:
>
>
>> is it possible to initialize a class with a dictionary? my first thought
>> would be to create a method like:
>>
>> intializeWithDictionary: aDictionary
>>
>> then, loop through the elements and do something like:
>>
>> instVarNamed: key put: value
>>
>> but the book says:
>>
>> Caveat: Although these methods are useful for building development tools,
>> using them to develop conventional applications is a bad idea: these
>> reflective methods break the encapsulation boundary of your objects and can
>> there- fore make your code much harder to understand and maintain.--
>>
>> should i avoid this?
>>
>>
>> ----
>> peace,
>> sergio
>> photographer, journalist, visionary
>> #BitMessage BM-2D8VWUJSS41RFKh1ec83preVabHrnniExa
>>
>> http://www.Village-Buzz.com
>> http://www.ThoseOptimizeGuys.com
>> http://www.CodingForHire.com
>> http://www.coffee-black.com
>> http://www.painlessfrugality.com
>> http://www.twitter.com/sergio_101
>> http://www.facebook.com/sergio101
>>
>
>


-- 
----
peace,
sergio
photographer, journalist, visionary
#BitMessage BM-2D8VWUJSS41RFKh1ec83preVabHrnniExa

http://www.Village-Buzz.com
http://www.ThoseOptimizeGuys.com
http://www.CodingForHire.com
http://www.coffee-black.com
http://www.painlessfrugality.com
http://www.twitter.com/sergio_101
http://www.facebook.com/sergio101

Reply via email to