Hacker News new | past | comments | ask | show | jobs | submit login

Defensive programming? You still don't have any guarantees that your code is in fact free of side effects. There isn't a way to easily test for it either. So, even if you don't use any libraries and write all your code in this style, you could have bugs that will be very hard to track down. Functional languages ensure, by design, that this doesn't happen.



It's not that hard to check for. Simply do a regexp search on your code for "variable =", where "variable" is one of the instance variables in the class, and ensure that all occurrences are in the constructor. Also need to avoid calling mutating methods of built-in classes - this is easy with Strings and Dates, but you need to be very careful to make copies of all your collections. I could write a simple script or Eclipse plugin that does it all for me.

This, again, assumes you can trust your libraries. A single method that doesn't follow this convention will pollute anything that calls it.

I've done things like this, in Python and to a lesser extent in Java. It works. It is pretty easy to slip up - I've had some bugs introduced because I forgot to copy a list - but it's at least a tractable problem. Gets easier if you use things like list comprehensions and slicing, which copy by default. Though Java's lack of support for closures can make this difficult.


Sure, it's possible. But this now sounds similar to arguing that you can do OO programming in C. Doing inheritance with function pointers and defining all "object" methods to take the data structure as the first parameter. I just think if you're going to code in a specific style, it's better to choose a language that better supports the style.


Yeah, it's a lot like doing OO programming in C.

Not everyone gets to choose their language. When I do, it's usually something saner than Java.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: