最近Rubyを触る機会があり、普段使っているTypeScriptやPythonと何が違うのか気になったので整理してみました。
この記事では同じ処理をそれぞれの言語で書いて比較してみます。
Rubyの特徴
Rubyは「開発者が書きやすいこと」を重視して設計された言語です。
作者のまつもとゆきひろ(Matz)は「プログラマの幸福度」を重視してRubyを設計しました。
そのためRubyは
- コードがシンプル
- 柔軟な書き方ができる
- メタプログラミングが強い
といった特徴があります。
1. すべてがオブジェクト
Rubyの大きな特徴はほぼすべてがオブジェクトであることです。
例えば数値でもメソッドを呼び出せます。
5.times do
puts "Hello"
end
5という数値に対してtimesというメソッドを呼んでいます。
一方、Pythonでも数値はオブジェクトですが、このような書き方はできません。
for i in range(5):
print("Hello")
Rubyでは「すべてがオブジェクト」という思想が強く、オブジェクト指向が言語全体に深く組み込まれているのが特徴です。
2. ブロック構文
Rubyにはブロックという仕組みがあります。
[1,2,3].each do |n|
puts n
end
これは処理のまとまりをメソッドに渡す仕組みです。
同じ処理を
TypeScriptでは関数で書くことが多いです。
[1,2,3].forEach(n => {
console.log(n)
})
Pythonでは通常のループになります。
for n in [1,2,3]:
print(n)
Rubyではこのブロック構文が非常に多く使われます。
3. メタプログラミング
Rubyはメタプログラミングが非常に強い言語です。
例えば実行中にメソッドを追加することもできます。
class User
end
User.define_method(:hello) do
"Hello"
end
このような柔軟な仕組みは
- TypeScript
- PHP
ではあまり一般的ではありません。
Rubyのフレームワーク
Ruby on Rails
が「少ないコードで書ける」のは、このメタプログラミングを多く使っているためです。
4. コードの書き方の自由度
Rubyは書き方の自由度が高い言語です。
例えば条件式でもこのように書けます。
puts "Hello" if true
一方で
TypeScriptでは通常こう書きます。
if (true) {
console.log("Hello")
}
Rubyはコードを短く書ける表現が多いのも特徴です。
5. シンボル(Symbol)
Rubyにはシンボルというデータ型があります。
Ruby
user = { name: "Taro", age: 20 }
これは次のような書き方と同じ意味になります。
user = { :name => "Taro", :age => 20 }
シンボルは主に
- ハッシュのキー
- メソッド名
などで使われます。
他の言語では似た概念として
- TypeScript → オブジェクトキー
- Python → 辞書キー
- PHP → 連想配列キー
がありますが、Rubyのシンボルは軽量で再利用されるオブジェクトという特徴があります。
6. 関数定義の比較
次に「2つの数値を足す関数」を書いてみます。
Ruby
def add(a, b)
a + b
end
TypeScript
function add(a: number, b: number): number {
return a + b
}
Python
def add(a, b):
return a + b
PHP
function add($a, $b) {
return $a + $b;
}
ここで大きく違うのが型システムです。
- TypeScript → 静的型付け
- Ruby / Python / PHP → 動的型付け
TypeScriptでは型を書く必要がありますが、他の3つの言語では型を書かなくても動作します。
動的型付けでも型を扱う方法
最近では動的型付けの言語でも型サポートが追加されています。
例えばPythonでは型ヒントを書くことができます。
def add(a: int, b: int) -> int:
return a + b
Rubyでも
- Sorbet
- Steep
などのツールを使うことで型チェックが可能です。
まとめ
Ruby、TypeScript、Python、PHPを比較すると、それぞれ重視しているポイントが違うことが分かります。
- Ruby → 書きやすさ・柔軟性
- TypeScript → 型による安全性
- Python → シンプルで読みやすい
- PHP → Web開発の手軽さ
同じ処理を書いて比較してみると、言語ごとの設計思想の違いが分かって面白いと感じました。