「Ruby は型宣言がないけど、ちゃんとしたシステムに使えるのか」という質問にどう答えるか
Ruby というプログラミング言語には、変数やメソッドの型(type)を宣言しなくてもいい、という特徴があります。
いろんなところで Ruby on Rails について話をすると、しばしばこの点について質問を受けます。
Ruby は型宣言がないけど、ちゃんとしたシステムにも使えるのか、という質問です。
要するに、Ruby で作ったシステムは信頼性が低いんじゃないのか、と。
この質問にどう答えたらいいでしょうか。
型宣言はシステムの信頼性をたいして向上させない、というのが答えです。
型宣言のおかげで発見されるバグ(不具合)が存在するのは事実です。
例えば、a という変数が文字列型を持つと宣言されているのに、そこに整数型の値を格納する処理があれば、それは間違いです。
しかし、現代のプログラミングにおいては、この種類のバグはあまり生じないのです。
最大の要因は、オブジェクト指向プログラミングと単体テストの考え方が普及したことです。
オブジェクト指向プログラミングでは、アプリケーションの構成要素を「オブジェクト(物)」と捉えます。
メッセージをオブジェクト同士が送り合うことで、アプリケーションが機能します。
オブジェクトが正しく機能しているかどうかは、「単体テスト」と呼ばれる別のプログラムによって確認します。
単体テストは、オブジェクトが保持する変数やメソッドが受け取ったり、返したりするオブジェクトについて様々な側面からチェックします。
変数やメソッドの型だけではありません。値の範囲や要素の個数などもチェックします。
単体テストによって、コンパイラによる型チェックよりも深い検証が行われるのです。
また、近年広まったプログラミング作法によっても型宣言の役割は小さくなりました。
メソッドは短くすべきであるとされ、長すぎるメソッドは分割するように教えられています。
また、変数やメソッドに分かりやすい名前を与えることが強く推奨されています。
このような作法でプログラミングをしていれば、型を取り違えるというミスは滅多に起きません。
型宣言は、コンパイラによる最適化を助けるので、システムの性能向上には役に立ちます。
しかし、システムの信頼性とはあまり関係ありません。
参考文献
- 『プログラミング Ruby 第2版』 オーム社、p.315-316
- まつもと直伝 プログラミングのオキテ 第4回(3)Duck Typingが生まれるまで ITPro
- そろろろRailsについて本音を書いてみるか ひがやすを blog
- Re: そろろろRailsについて本音を書いてみるか moro の日記
--
黒田努
(2008/11/23)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- Rails はエンタープライズの世界で主流になるか (2008/03/29)
- Rails 2.0 ベンチマーク (2008/03/30)
- テスト駆動開発とデバッグコード (2008/04/07)
- Git or Mercurial (2008/04/22)
- RESTful Ruby on Rails -- その美しさと難しさ (2008/04/23)
- RESTful Ruby on Rails -- 単数と複数 (2008/04/24)
- Rails のソースコードを読む (2008/05/02)
- sudo: no passwd entry for app! (Capistrano 2.3.0) (2008/05/12)
- Rails on GlassFish (2008/06/18)
- 「Ruby は型宣言がないけど、ちゃんとしたシステムに使えるのか」という質問にどう答えるか (2008/11/23)
- 「Ruby はスクリプト言語だけど、遅くないですか」という質問にどう答えるか (2008/11/24)
- どのプログラミング言語が将来的に有望か (2009/01/10)
- どのフレームワークが将来的に有望か (2009/01/11)
- フレームワーク対 CMS (2009/01/12)
- Rails 2.3 で spawner/reaper は DEPRECATED に (2009/03/25)
- db/seeds.rb (2009/06/08)
- LESSとSass (2009/08/03)
- Rails 2.3.4 と I18n (2009/08/15)
- RubyGems のアップデート(上書きインストール) (2010/02/03)
- クリエイティブ・コモンズの Rails 教材 (2010/03/08)
- Yet Another Ruby Reference (2010/03/12)
- Rails で MongoDB を使ってみた (2010/03/23)
- Rails で MongoDB を使ってみた(2) (2010/03/25)
- 祝 Ruby on Rails 3.0 beta2 リリース (2010/04/02)
- Rails 3.x 時代のテストフレームワーク (2010/04/24)
- 続・Rails 3.x 時代のテストフレームワーク (2010/05/06)
- Test::Unit と RSpec と Shoulda (2010/05/06)
- Windows + Rails + MySQL 5.1 (2010/07/20)

