前回の記事「Javaエンジニアにこそ、Rubyの良さが分かる」で、Rubyの特徴として「動的言語」というキーワードを挙げました。この考え方の特徴の1つとして、「Rubyでは変数やメソッドの引数、戻り値に対して型宣言をする必要がない」というものがあります。
ただし、型宣言がないといっても、「型という概念がない」「実行時に型のチェックをしていない」という意味ではないことに注意してください。Rubyでも、それぞれのオブジェクトには当然ながら型が存在しています。Javaでは型宣言が必須なため、コンパイル時に型の整合性をチェックしています。対してRubyはインタプリタ言語であり実行前のコンパイルがないため、実行時に型の整合性をチェックしています。
Javaエンジニアからすれば、型定義がないのは少し心配かもしれません。ですが慣れてくると意外に型定義がなくても平気になり、簡潔に書けることが楽しくなってくるのではないでしょうか。
int number = 10000; String name="ナレッジエックス";
number = 10000 name = "ナレッジエックス"
これも、Javaエンジニアが驚く点ではないでしょうか。「メソッド呼び出しに()がないと、引数なしのメソッドを見たとき、メソッド呼び出しなのか、変数へのアクセスなのか分からないではないか」と感じられると思います。
Rubyでは、いわゆるインスタンス変数(Rubyでは@で始まる変数)やクラス変数(同じく@@で始まる変数)に対しては、クラスの外部から直接アクセスできないことになっています。すなわち、クラス名やオブジェクト名の後の「.」に続く呼び出しは、メソッドであると考えてよいことになります。そのため、混乱を招く可能性は少ないのです。
String name="knowledge-ex."; System.out.println(name.toUpperCase());
name = "knowledge-ex." puts name.upcase
上記の例では、どちらも実行結果は、
KNOWLEDGE-EX.
となります。
Javaでは、例えば整数を表すための「基本データ型(プリミティブ型)」としてint型があります。int型の値はインスタンスではないため、引数や戻り値がインスタンスでなければいけないメソッドに対しては、Integer型への変換を行って渡したり、Integer型からint型への変換を行って受け取ったりする必要があります。
一方、RubyにはJavaでいうところの基本データ型がありません。Rubyではすべての値はオブジェクトとして表現されているのです。つまり、Rubyのコード中で「100」と書けばそれは数値オブジェクトであり、これに対してメソッドを実行することもできます。
初学者がJavaを学ぶとき、「どうしてintがあるのにIntegerというラッパクラスを覚えないといけないのか」と疑問を感じることがあると思います。Rubyではそのような心配は不要です。そもそも基本データ型がないので、それらの違いについて意識する必要もないわけです。
逆に、Javaエンジニアは100という数値にメソッドが実行できてしまうことに違和感を覚えると思いますが、これも慣れれば気にならなくなります。
String str = new String(100);
str = 100.to_s
Copyright © ITmedia, Inc. All Rights Reserved.