😊

RubyとJavaScriptの基本的な文法

2023/06/04に公開

RubyとJavaScriptを学習したので、
基本的な文法を復習していこうと思います。

変数の宣言

Rubyでは変数名だけ、JavaScriptでは、変数はvar、let、またはconstキーワードを使用して宣言します。
なお、varの使用は推奨されていません。

Ruby
name = "Taro"
age = 20
JavaScript
let name = "Taro";
const age = 20;

条件分岐

Rubyでは、if、elsif、elseを使用し、endで終了します。
JavaScriptでは、if、else if、elseを使用し、波括弧{}でブロックを示します。

Ruby
if age >= 18
  puts "You are an adult."
elsif age >= 13
  puts "You are a teenager."
else
  puts "You are a child."
end
JavaScript
if (age >= 18) {
  console.log("You are an adult.");
} else if (age >= 13) {
  console.log("You are a teenager.");
} else {
  console.log("You are a child.");
}

ループ

RubyもJavaScriptもforを使用できます。

Ruby
for i in 1..5
  puts i
end
JavaScript
for (let i = 1; i <= 5; i++) {
  console.log(i);
}

関数・メソッド

Rubyでは関数を通常「メソッド」と呼びます。
JavaScriptでは関数を通常「関数」と呼びます。

Rubyではdefを使用してメソッドを定義します。
JavaScriptではfunctionを使用して関数を定義します。また、アロー関数の形式もよく使用されます。

Ruby
def greet(name)
  "Hello, #{name}!"
end
JavaScript
function greet(name) {
  return `Hello, ${name}!`;
}

const greet = (name) => `Hello, ${name}!`;

オブジェクト

Rubyはクラスベースのオブジェクト指向言語です。新しいクラスを定義するためにはclassを使用します。定義されたクラスをインスタンス化したものがオブジェクトです。

JavaScriptはプロトタイプベースのオブジェクト指向言語です。プロトタイプはオブジェクトが他のオブジェクトからプロパティ(データやメソッド)を継承するための仕組みです。
大まかなイメージとして、オブジェクトを設計図として新しいオブジェクト生成できるといったイメージです。なお、プロトタイプベースのオブジェクト指向において設計図という表現は適切ではないので、あくまで大まかなイメージだということにご留意ください。

Ruby
class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
  
  def greet
    puts "Hello, my name is #{@name}"
  end
end

taro = Person.new("Taro", 20)
taro.greet  # "Hello, my name is Taro"
JavaScript
let obj = {
  name: "Taro",
  age: 20
};
JavaScript
function Person(name, age) {
  this.name = name;
  this.age = age;
}

let taro = new Person("Taro", 20);
JavaScript
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

let taro = new Person("Taro", 20);

例外処理

Rubyではbegin、rescue、ensure、endを用いて例外処理をします。
JavaScriptではtry、catch、finallyを用いて例外処理をします。

Ruby
begin
  # 何かしらの処理
rescue => e
  puts e.message
ensure
  # 必ず実行したい処理
end
JavaScript
try {
  // 何かしらの処理
} catch (e) {
  console.log(e.message);
} finally {
  // 必ず実行したい処理
}

【補足】プロトタイプについて

プロトタイプはオブジェクトが他のオブジェクトからプロパティを継承するための仕組みです。JavaScriptでは、あるオブジェクトは他の「プロトタイプオブジェクト」からプロパティを継承することができます。JavaScriptのすべてのオブジェクトは、何らかの他のオブジェクトをプロトタイプとして持っており、そのプロトタイプからプロパティやメソッドを継承します。

例えば、"dog"というオブジェクトを作り、その中に"bark"というメソッドを作リます。
そして、新たに"poodle"というオブジェクトを作るとします。

let dog = {
  bark: function() {
    console.log("Bowwow!");
  }
}

let poodle = Object.create(dog);

この例では、"poodle"オブジェクトは"dog"オブジェクトをプロトタイプとして持ちます。つまり、"poodle"オブジェクトは"dog"オブジェクトから"bark"メソッドを使用することができます。

poodle.bark(); // Bowwow!

Discussion