Interview questions I have never been asked, Episode I
Compare and contrast:
some_array.any? { |n| n > 100 }
And:
!!some_array.detect { |n| n > 100 }
Which do you think is easier to read?
Are classes and modules easier to read and understand when they have lots and lots of specific methods like
#any? or are they easier to read and understand with a small number of axiomatic methods that can be composed and combined like #fold and #unfold? When you design a module or class, do you write lots of convenience methods in advance? Or do you refactor code by writing convenience methods when you find yourself repeating the same code?
The Ruby Way is the perfect second Ruby book for serious programmers. The Ruby Way contains more than four hundred examples explaining how to do everything from distribute Ruby with Rinda to functional programming techniques.
If you do refactor code to eliminate duplication, is there an amount of duplication that is too small to matter, like "!!"? Or is there an underlying principle of documenting intent that you wish to make explicit?
Is:
do_something() if some_array.detect { |n| n > 100 }
Misleading because it doesn’t actually
use the element it detects? Or is it a reasonable idiom to test for an element’s existence without using a specific method like #any or #nil?
Are applications easier to read and understand when they make use of lots and lots of specific methods like #any or are they easier to read and understand when they compose and combine a smaller number of axiomatic methods so that you aren’t constantly looking things up?
Do you think applications should have large or small vocabularies?
This example can be easily translated to the language du jour, the underlying principle applies to programming in general