Dynamic Type Check
2 June 2009
Recently some of our developers ran into the accusation that with a dynamic language like ruby you use so many dynamic type checks that you end up effectively writing your own type system. So they thought, since we've written a lot of real ruby code - how often do we make dynamic type checks? Michael Schubert gathered up the data.
The table below contains the data. We define a dynamic type check
as the use of the methods is_a?, kind_of?,
and instance_of?. The lines of code come from the
standard rake stats command in rails.
| Project ID | Code type checks | Code LOC | Test type checks | Test LOC | LOC / type check | test LOC / code LOC |
|---|---|---|---|---|---|---|
| A | 16 | 13318 | 0 | 9856 | 1448 | 0.7 |
| B | 14 | 19138 | 0 | 17123 | 2590 | 0.9 |
| C | 0 | 2607 | 0 | 2981 | ∞ | 1.1 |
| D | 7 | 4265 | 3 | 4069 | 833 | 1.0 |
| E | 32 | 29619 | 60 | 97688 | 1384 | 3.3 |
| F | 18 | ~9500 | N/A | N/A | 528 | N/A |
| G | 0 | 2455 | 0 | 3290 | ∞ | 1.3 |
| H | 9 | 2220 | 6 | 6404 | 575 | 2.9 |
| I | 23 | 10633 | 2 | 12331 | 919 | 1.2 |
| J | 196 | 40461 | 24 | 88511 | 586 | 2.2 |
| K | 17 | 5769 | 6 | 9848 | 679 | 1.7 |
The moral of this data is that you shouldn't expect to see a lot of type check calls in your ruby code base. This, of course, is true of any dynamic language. It was generally considered bad form in Smalltalk circles I inhabited too.
The methods that were checked for in this data aren't the only ones
that can be considered a dynamic type check. Other cases are
respond_to? and aClass === anInstance. Our
folks felt that these cases were no more common than the ones they
checked for.
Most uses are those of dealing with liberal input - eg where a method parameter can be a string, symbol, or array. These crop up in DSLish situations where you want liberal input for the high readability.

