今まで自分なりにプログラミングについて学んできたつもりでしたが、知識は少しずつ増えるものの体系化されていないと感じていました。本書は、
- 複数の言語を比較することから学ぶ
- 歴史から学ぶ
という点に力をおいて解説されています。
前者は今まで自分でも経験していた部分ですが、後者の歴史から学ぶは今まであまり意識したことがなくとても新鮮でした。
本書は、自分のように何年も学んできた(つもりの)人が自分の知識をまとめるためにも有効だと思いますが、今からプログラミングを学ぼうとする人が回り道をせず効果的に学ぶための下準備をするために良いのではと感じました。
ところで、「第12章 継承によるコードの再利用」では、名前が衝突したときの振る舞いの例として、以下のようなコードが紹介されています。
module Foo def hello puts "foo!" end end module Bar def hello puts "bar!" end end class FooBar include Foo include Bar end class BarFoo include Bar include Foo end FooBar.new.hello BarFoo.new.hello
モジュールFooとBarの両方にhelloメソッドがあり衝突が起こってますが、Rubyの場合は後からincludeした方が上書きしていますので以下のような実行結果となります。
bar! foo!
Ruby 2.0になり何か解決法があるのではと思い、「Matzにっき(2010-11-13)」を見るとmixメソッドを導入し名前の重複を検出するとありましたが、結局は導入が見送られたようですね。実はそのことをtwitter上でMatzさんより教えて頂きました。ありがとうございます。
@maehrm mixはその後の議論の結果採用されませんでした。そういうことってあるよね。名称重複問題は今までどおりaliasで解決することになります。
2014-02-02 22:57:38 via web to @maehrm
以下のように書くのでしょうか。
module Foo def hello puts "foo!" end end module Bar def hello puts "bar!" end end class FooBar include Foo alias_method :foo_hello, :hello include Bar alias_method :bar_hello, :hello end class BarFoo include Bar alias_method :bar_hello, :hello include Foo alias_method :foo_hello, :hello end FooBar.new.bar_hello FooBar.new.foo_hello BarFoo.new.bar_hello BarFoo.new.foo_hello
コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)
- 作者: 西尾泰和
- 出版社/メーカー: 技術評論社
- 発売日: 2013/04/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (32件) を見る