4 ms·
“OOP” is an anemic special case of the multiple dispatch that Julia provides. So if you don’t know any better you can program in that style using Julia. “str.p
by leephillips 6y ago
“OOP” is an anemic special case of the multiple dispatch that Julia provides. So if you don’t know any better you can program in that style using Julia.
“str.parse(Int).abs is more readable” No, but it makes sense if you also think that OOP makes sense.
You can index based on anything you want.
- RivieraKid 6y agoNo it's not. OOP is regularly used for new projects by experienced programmers. Julia doesn't have interfaces for example. I know that I can set indexing to be 0-based. Not a good solution.
- cbkeller 6y agoRegardless of what is a subset of what, I certainly agree with the OP that OOP feels "anemic" in comparison to the dispatch-based paradigm of Julia. I can't tell you how many times I've seen disparate packages written by different authors with no explicit effort towards interoperability "just work" together in Julia (e.g., [1]), something I have never seen to a comparable degree in any other language. [1] https://www.youtube.com/watch?v=kc9HwsxE1OY https://www.youtube.com/watch?v=kc9HwsxE1OY
- socialdemocrat 6y agoMost dynamic OOP languages don't have interfaces either, so that is kind of a poor argument. You cannot compare Julia to something like Java. You got to compare it to Ruby, Python etc. Also I have no idea what an interface definition would look like in Julia. A function in Julia isn't bound to one specific type like in an OOP language.
- newen 6y agoI think interfaces in Julia might go something like interface AnimalActions function walk(x::Animal) end function call(x::Animal, y::Animal) end function eat(x::Animal, z::Food) end end struct Dog <: Animal name::String end AnimalActions.walk(x::Dog) = true AnimalActions.call(x::Dog, y::Animal) = true AnimalActions.eat(x::Dog, z::Food) = true setinterface Dog AnimalActions end and then I guess using it like using AnimalActions d = Dog("rufus") walk(d)
- dklend122 6y agoThe below package implements something like that, but better imo: https://tk3369.github.io/BinaryTraits.jl/dev/ https://tk3369.github.io/BinaryTraits.jl/dev/