はじめに
こんにちは。最近フロントエンド中心の開発から、バックエンドでRuby(+Rails)を書くことが増えてきたので、JavaScriptとの違いを意識しながらRubyの超基本構文をまとめました。
この記事では、JSとRubyの構文の違いに戸惑ったポイントを中心に、「JSならこう書くけど、Rubyだとこう書くんだな」という形で紹介します。これからRubyを学ぶJS経験者の方に向けた内容です。
💡 基本構文比較一覧
項目 | Ruby | JavaScript | 補足 |
---|---|---|---|
変数宣言 | name = "さくら" |
let name = "さくら"; |
Rubyは型宣言不要。let/const も不要 |
出力 | puts "こんにちは" |
console.log("こんにちは"); |
puts は改行あり、print は改行なし |
文字列展開 | "こんにちは、#{name}さん" |
`こんにちは、${name}さん` |
どちらもテンプレートリテラル的な構文 |
if / else | if 条件 ... elsif ... else ... end |
if (...) { ... } else if (...) {} |
Rubyは end が必要 |
三項演算子 | 条件 ? 真 : 偽 |
条件 ? 真 : 偽 |
書き方は同じ |
後置if | puts "OK" if 条件 |
×(類似構文なし) | Ruby特有の簡潔な表現 |
配列定義 | [1, 2, 3] |
[1, 2, 3] |
両方同じ構文 |
配列ループ | `[1,2,3].each { | x | puts x }` |
map(変換) | `[1,2,3].map { | x | x * 2 }` |
filter/select | `[1,2,3].select { | x | x.even? }` |
変数がnilなら | `name | "デフォルト"` | |
null/undefined対策 | `name | "N/A"` | |
関数定義 | def greet(name); ... end |
function greet(name) { ... } |
Rubyは def 、JSは function やアロー関数 |
クラス | class User; def initialize... end |
class User { constructor(...) { ... }} |
概念は同じ |
インスタンス化 | user = User.new("さくら") |
const user = new User("さくら"); |
Rubyでは .new が必要 |
nilチェック | if name.nil? |
`if (name === null | |
安全呼び出し | user&.name |
user?.name |
&. は JS の ?. に対応 |
例外処理 | begin ... rescue => e ... end |
try { ... } catch(e) { ... } |
書き方は違うが意味は同じ |
コメント | # コメント |
// コメント |
Rubyは =begin ... =end も使える |
いくつかピックアップして深掘り
1. puts
と console.log
の違い
JSでは console.log を使いますが、Rubyでは puts を使います。改行付きで表示されるので便利です。
puts "こんにちは" # => 改行あり
print "こんにちは" # => 改行なし
2. each
, map
, select
はよく使う
JSで forEach, map, filter をよく使う人は、Rubyでは以下のように書きます
[1, 2, 3].each { |n| puts n }
[1, 2, 3].map { |n| n * 2 } # => [2, 4, 6]
[1, 2, 3, 4].select { |n| n.even? } # => [2, 4]
※ { |n| ... }
の部分がブロックです。
3. ||
は null
や false
の代替に使う
user_name = name || "ゲスト"
これは JS の const name = name || "ゲスト"
と同じ意味です。
おわりに
RubyはJavaScriptと違う部分も多いですが、どちらも柔軟で読みやすい言語です。Rubyは「人にやさしい構文」が多く、慣れると気持ちよく書ると思うので、お勉強したいと思います。