ソースを読む際の変数のデータ型の判別に関して

おとといの問題をもう少し考えてみる。例えば、ソースを読んだ時に、関数に引数として渡された変数のデータ型が何かを判別する方法を考えてみる。また、そもそも判別する必要があるのかも考えてみる。


まず、判別方法だが、きちんとした型を知るには、ソースをさかのぼって初期化や代入により定義されているところを見るしかない。一方、データが使われているところを見ると、データがどう振舞えるかという情報しか得られない。つまり、動的片付け言語では、Duck Typingにより、そのデータが振舞える操作が行われた/操作に与えられた場合のみエラーが発生せずプログラムが通る。つまり、データがどういう性質(プロパティ)を持っているかという情報しか基本的には得られない。しかし、この仕組みは動的片付け言語の仕組みで汎用的な処理を書くのに貢献してくれるので問題ない。


次に、データの型を常にきちんと(頭の中で)判定しておく必要があるかを考えてみる。結局、ある処理に対してデータが与えられたときに、想定通りの動作をしてくれる性質を持ったデータであれば問題ない訳で、具体的な型の情報は必要ない。但し、その部分のプログラムを拡張する場合、基本的には、具体的なデータの型を知っておく必要があると思う。と言うのも、具体的なデータの型により性質(プロパティ)が決まってくるからだ。


結論をまとめるのは難しいが、一つ言えるのは、Duck Typingの性質は重要なので、汎用度の高い処理の中ではなるべく型を規定した処理にせず、型の決定権をより上側(呼び出し側)の階層に委譲してあげた方が良い。