http://codezine.jp/a/article/aid/2144.aspxは間違いだらけの糞記事
JavaとRubyの言語比較は興味あるから読んでみたんだが、あまりにひどかったので。
Rubyでは、requireステートメントを使用してパッケージやモジュールをインポートします。 たとえば、extensionsパッケージ/モジュールをインポートするには次のようにします。
まず、requireはステートメントとか構文ではない。れっきとしたメソッドだ。
Javaな人向けの記事だろうけど、ここで「モジュール」という表現を使ってはいけない。Rubyのモジュールはファイル名とは関係なく定義できるんだ。Rubyの場合はライブラリのファイル名とモジュールは直交している。
ここまではまぁギリギリ我慢できるんだが、ここからがひどすぎる。
module Catalog PI=3.1419 @journal # *1 def setJournal(journal) @journal=journal # *2 end end
おいおい、*1と*2は別の変数だろ。*1はCatalogというモジュールオブジェクトのインスタンス変数で、*2はモジュールメソッド(インスタンスメソッド)のインスタンス変数だよ。
こんなこともわからんと比較記事書いてんじゃねーよ。それもプロの技術者がよぉ。
モジュールは、mixinを使用して他のクラスに含めることができます。クラスにモジュールを 含めるには、まずそのモジュールのrequireステートメントを指定し、その後にincludeを使用 してそのモジュールを含めます。たとえば、CatalogEntryというクラスにCatalogモジュールを 含めるには次のようにします。
require Catalog class CatalogEntry include Catalog end
ここを読んで俺の怒りは頂点に達した。
はぁ?なんでそこにrequireが出てんだよ!requireとincludeは直交してんだよ。わかってねーな、コイツ。動作確認してないだろ。
begin rescue RubyException1 RubyException1が発生したときに実行するステートメント rescue RubyException2 RubyException2が発生したときに実行するステートメント ensure 例外が発生してもしなくても実行するステートメント end
StandardErrorな例外の場合はrescueの後にクラスを省略できることも書かないとな。
この記事が個人のブログとかだったら「ここは違うよ」と普通に言えるのだが、プロの技術者がコードの動作確認すらしてない記事をこういう大きいサイトに載せてるのが許せなかったので。