3 ms·
His argument against using classes/objects is that objects (in mainstream PLs) can't be accessed in a dictionary-like fashion. But switching to dictionaries wh
by pwpwp 15y ago
His argument against using classes/objects is that objects (in mainstream PLs) can't be accessed in a dictionary-like fashion.
But switching to dictionaries wholesale for this reason seems to throw out the baby with the bathwater. The loss of abstraction is real, and could be worked around trivially by making every object respond to a dictionary protocol. This would give you the best of both worlds.
- kenjackson 15y agoDon't most mainstream languages now give you this? I think Javascript, C#, Ruby, Python give you this. C++ and Java don't. And as you say, you do lose a fair bit giving this away.
- swannodette 15y agoNo all those languages suffer (except JS) from the fact they don't give you uniform access. Consider the different forms of access for dict types, array types, object types in said languages.
- kenjackson 15y agoI have to admit that this distinction seems really minor. But maybe I'm missing something here. I'd love to see an example if anyone has one.
- swannodette 15y ago(get "foo" 0) ; \f (get {:foo 'bar} :foo) ; bar (get #{0 1 2} 1) ; 1 (get [:a :b :c] 1) ; :b (def path [0 :foo 1]) (get-in [{:foo "bar"} 1 2] path) ;\a Being able to deal with data generically in a first class manner is very, very useful. You can only get this in all the languages you've mentioned (including JS) w/ more or less custom code writing.
- swannodette 15y ago> and could be worked around trivially by making every object respond to a dictionary protocol. This would give you the best of both worlds. You do realize that's the approach Clojure takes right?
- cageface 15y agoThe whole point of OO is that you don't want code reaching into the internal member data of the object. The real reason that algorithmic code reuse is so difficult in C++ and Java is that they lack usable first-order function literals.
- DanielRibeiro 15y agoNot to mention that lack of structural typing and Mixins make it even harder to actually have reuse. Dynamic languages like Python and Ruby solve this beautifully, and so do Go and Scala on the more static type side.