「Ruby は型が無い」という記述をときどき目にします。
本当でしょうか。
~~あまり正確な表現とは言えません。~~何をもって「型がある/ない」とするかによりますが,「Ruby は型が無い」は誤解を招くおそれがあります。
データ自身の型と,データを受けるもの(変数・仮引数など)の型を分けて考えるべきでしょう。
Ruby では
- 変数
- 定数
- メソッドの仮引数
- ブロックパラメーター
には型がありません。
型宣言というものが文法的に存在しませんし,文字列を代入した変数に浮動小数点数を再代入することもできます。引数を取るメソッドにどんなオブジェクトを渡すことも可能です1。
つまり,データの受け側には型は無いということですね。
一方,組込みクラスだけ見てもデータの型は豊富です。
まあ,ナウいヤングは Ruby のクラスが豊かと言われてもピンとこないかもしれませんが,大昔は文字列型,整数型,実数型(浮動小数点数),論理型,配列型といったように,数えるほどしか型の無いプログラミング言語はざらにあったのです。
現代のプログラミング言語のなかでも,どちらかと言えば組込みの型(クラス)が充実しているほうではないでしょうか。
さて,なんとなく Ruby のデータの型はクラスであるとして書いてきましたが,もう少し広く捉えることもできます。
公式リファレンスの用語集の「データ型」をご覧ください。
Ruby用語集 (Ruby 3.0.0 リファレンスマニュアル)
Ruby 3.0.0 で受け側にも型が導入されました。といっても,Ruby のプログラム自体には型の記述をしないのですが。
-
ただし,実引数を渡してメソッドが実行されたところで TypeError を出すことはあります。 ↩