RubyとJavaScriptの文法簡易比較

# はじめに
新しい言語を学習していく中で、今まで学習した各言語の文法を比較整理したくなり記事にします。
初学者のため、比較している内容も基礎的な内容になります。
間違いがあればご指摘いただけると幸いです。


# 文字列の出力
```ruby:Ruby
puts 'Hello World'
```
```javascript:JavaScript
console.log('Hello World');
```


# 変数、定数
- 変数
データ（数値、文字列など）を入れておく箱のようなもの。
- 定数
変数同様にデータを入れておく箱のようなものですが、一度値が設定されると、その値を変更することはできません（変更しようとするとエラーになるか、警告が出ます）。  

Rubyの定数は調べていて初めて知りました。  
Ruby の定数は、アルファベットの大文字で始まる決まりです。  
2 文字目以降は小文字でもOKのようですが、慣例ではすべて大文字とのこと。
```ruby:Ruby
number = 10 #変数
PI = 3.14 #定数
```
```javascript:JavaScript
var number = 10; //変数
let number = 10; //変数
const number = 10; //定数
```

- var
原則使用しない
- let
値が変わる(予定がある)変数を定義する際に使用
- const
値が変わらない変数を定義する際に使用

|  | 再代入 | 再宣言 |
| ---- | ---- | ---- |
| var| ○ | ○ |
| let | ○ | × |
| const | × | × |

- 宣言
変数という箱を用意すること
- 代入  
箱に値を入れること  
- 再宣言
前の値が入った箱ごと捨てて新しい箱を用意する
- 再代入
箱の中の値を入れ直す


# 文字列の中で変数を使用するとき(式展開)
```ruby:Ruby
name = "太郎"
puts "私の名前は#{name}です。"
```
Rubyでは、ダブルクオート（"）で囲まれた文字列の中で#{変数名}を使用して変数の値を埋め込むことができます。シングルクオート（'）では式展開は行われません。
```javascript:JavaScript
const name = "太郎";
console.log(`私の名前は${name}です。`);
```
JavaScriptではバッククオート（ ）で囲まれたテンプレートリテラルの中で${変数名}`を使用して変数の値を埋め込むことができます。


# if
#### 書き方
```ruby:Ruby
if 条件式1
# 条件式1がtrueのときの処理
elsif 条件式2
# 条件式1がfalseで条件式2がtrueのときの処理
else
# 条件式1も条件式2もfalseのときの処理
end
```
```javascript:JavaScript
if (条件式1) {
  // 条件式1がtrueのときの処理
} else if (条件式2) {
  // 条件式1がfalseで条件式2がtrueのときの処理
} else {
  // 条件式1も条件式2もfalseのときの処理
}
```
#### 例
```ruby:Ruby
# 変数の宣言
number = 5


# 条件分岐
if number > 7
  puts "大きい"
elsif number < 3
  puts "小さい"
else
  puts "中間"
end
```
```javascript:JavaScript
// 変数の宣言
const number = 5;

// 条件分岐
if (number > 7) {
  console.log("大きい");
} else if (number < 3) {
  console.log("小さい");
} else {
  console.log("中間");
}
```


# 繰り返し処理(each)
#### 書き方
```ruby:Ruby
配列.each do |変数|
  # 各要素に対する処理
end
```
```javascript:JavaScript
配列.forEach(function(変数) {
  // 各要素に対する処理
});
```
#### 例
```ruby:Ruby
# 配列の宣言
numbers = [1, 2, 3]


# eachメソッドで繰り返し処理
numbers.each do |num|
  puts num
end
```
```javascript:JavaScript
// 配列の宣言
const numbers = [1, 2, 3];

// forEachメソッドで繰り返し処理
numbers.forEach(function(num) {
  console.log(num);
});

```
配列の各要素に対して繰り返し処理を行います。この例では配列の各要素（1, 2, 3）を出力します。

# RubyのメソッドとJavaScriptの関数
#### 書き方
```ruby:Ruby
def メソッド名(引数)
  # 処理
end
```
```javascript:JavaScript
function 関数名(引数) {
  // 処理
}
```
#### 例
```ruby:Ruby
def say_hello
  puts "こんにちは！"
end

say_hello # "こんにちは！"と出力される
```
```javascript:JavaScript
function sayHello() {
  console.log("こんにちは！");
}

sayHello(); // "こんにちは！"と出力される
```


# コメントアウト

```ruby:Ruby
# コメント
 
=begin 
複数行を
コメントアウトします
=end
 
__END__
以降を全てコメントアウトします
```
```javascript:JavaScript
// 一行をコメントアウトします

/*
複数行を
コメントアウトします
*/
```


# シングルクオートとダブルクオートとバッククオート
#### Rubyにおけるシングルクオートとダブルクオート
Rubyではシングルクオートとダブルクオートを使用します。  
調べた感じでは、ダブルクオートのほうが制約が少なく使いやすそうです。  
例えば、式展開ではシングルは使えません。
```ruby:Ruby
name = "太郎"
puts 'こんにちは、#{name}'  # => こんにちは、#{name}
puts "こんにちは、#{name}"  # => こんにちは、太郎
```
#### JavaScriptにおけるシングルクオート、ダブルクオート、バッククオート
シングルクオートとダブルクオートの間には機能的な違いはありません。
バッククオートは式展開（${変数}）などを記述できます。
```javascript:JavaScript
const name = "太郎";
console.log('こんにちは、' + name);  // => こんにちは、太郎
console.log("こんにちは、" + name);  // => こんにちは、太郎
console.log(`こんにちは、${name}`);  // => こんにちは、太郎
```
変数や式を埋め込む必要がある場合にはバッククオートのほうが可読性が高そうです。


# 最後に
書き足したいことがあれば追記していきます。  
次は、用語の比較もやりたいです。


# 参考にした記事
[Ruby、PHP、Java、JSでの書き方の違い](https://qiita.com/tamutomo223/items/37338f51d9bdcb7587ad)