Ruby、PHP、Java、JSでの書き方の違い


##はじめに
「Rubyでプログラミングの基礎を学んだから、次はjsやってみようかな！」
↓
「書き方ごちゃごちゃになって、何が何だかよくわかんねー！！」

こんな人もいるのでは？


僕自身も以前、詰め込みすぎでパンパンになりましたので、書き方の違いをわかりやすくまとめてみました。
一つ一つ覚える必要はありませんので、この記事を、ストックしていただければと思います。
オブジェクト指向の理解も多少深まると思いますので、最後までご覧ください！


## 文字出力
基本となる文字の出力。言語によって処理のされ方が違うので難しいところですが、基本なのでしっかり押さえましょう。Javaはやっぱり記述が長いですねw

```ruby:
  #Ruby
  puts "こんにちは"
```
```php:
  #PHP
  echo "こんにちは";
```
```java
  //Java
  System.out.println("こんにちは");
```
```javascript
  //JavaScript
  console.log("こんにちは");
```


## 変数代入
プログラミングの超基本、変数代入です。

```ruby:
  #Ruby
  name = "Tom"
```
```php:
  #PHP
  $name = "Tom";
```
```java
  //Java(String、intなどの型を指定する)
  String name = "Tom";
```

```javascript
  //JavaScript
  let name = "Tom";
```

## 変数展開、文字列+変数
これもよく使いますね。全部似てますが、違いがあります。※書き方はあくまで一例です

```ruby:
  #Ruby
  "私の名前は#{name}です。"
```
```php:
  #PHP
  "私の名前は{$name}です。"
```
```java
  //Java
  "私の名前は"+ name + "です。"
```

```javascript
  //JavaScript(''ではなく``(バッククオーテーション)で囲む)
  `私の名前は${name}です。`
```

##if文
処理の代表と言えばif文でしょう。elsifのところの違いに注意です。

```ruby:
  #Ruby
  if age >= 20
    #処理
  elsif age >= 10
    #処理
  else
    #処理
  end
```
```php:
  #PHP
  if (age>= 20){
    #処理
  }elseif (age >= 10){
    #処理
  }else{
    #処理
  }
```
```java
  //Java & JavaScript
  if (age>= 20){
    //処理
  }else if (age >= 10){
    //処理
  }else{
    //処理
  }
```

## 配列と取り出し方
配列の取り出しもよく使いますね、1つづつ取り出す方法も言語によっていろんなのがあります。

```ruby:
  #Ruby
  names = ["Tom","Kenta","John"]
  names[0]
```
```php:
  #PHP
  $names = array("Tom","Kenta","John");
  $names[0];
```
```java
  //Java
  String names[] = {"Tom","Kenta","John"};
  names[0];
```
```javascript
  //JavaScript
  const names = ["Tom","Kenta","John"];
  names[0];
```

## ハッシュ、連想配列、オブジェクトと取り出し方
言語によって呼び方が違うので、検索する際には注意してください。

```ruby:
  #Ruby(ハッシュ)
  user = {name: "Tom",age: 20}
  user[:name]
```
```php:
  #PHP(連想配列)
  $user = array("name" => "Tom","age" => 20)
  $user["name"]
```
```javascript
  //JavaScript(オブジェクト)
  const user = {name: "Tom",age: 20};
  user.name
```

##通常のメソッド、関数
ここからが重要なところです。今回は2つの値を合計するaddメソッド(関数)を作りました。
戻り値も重要なので、しっかり押さえましょう。

```ruby:
  #Ruby
  def add(a, b)
    return a + b
  end
  sum = add(5, 2)
```
```php:
  #PHP
  function add($a, $b){
    return $a + $b;
  }
  $sum = add(5, 2);
```
```java
  //Java
  public static int add(int a, int b){
  //staticの後のintは戻り値の型を指定、戻り値がないメソッドの場合はvoidを使用
    return a + b; 
  }
  int sum = add(5, 2);
```
```javascript
  //JavaScript
  const add = function(a, b){
    return a + b;
  };
  let sum = add(5,2);

  //または
  const add = (a, b) => {
    return a + b;
  };
  let sum = add(5,2);

  //または
  function add (a, b){
    return a + b;
  }
  let sum = add(5,2);
```
jsはバージョンによって推奨されている記述が違います。

## クラスとインスタンス作成
さあ、待ちに待ったオブジェクト指向の始まりです！
Menuクラスを作って、そのクラスをもとに、インスタンスを作成し変数menu1に代入しています。

```ruby:
  #Ruby
  class Menu
    ##処理
  end
  menu1 = Menu.new
```
```php:
  #PHP
  class Menu{
    ##処理
  }
  $menu1 = new Menu();
```
```java
  //Java
  class Menu{
    //処理
  }
  Menu menu1 = new Menu();
```
```javascript
  //JavaScript
  class Menu{
    //処理
  }
  const menu1 = new Menu();
```

## インスタンス変数、インスタンスフィールド、プロパティの定義
メニューには名前や値段などの"情報"が含まれます。それをクラス内で事前に宣言しておきます。

```ruby:
  #Ruby
  attr_accessor :name
  attr_accessor :price
```
```php:
  #PHP
  private $name;
  private $price;
```
```java
  //Java
  private String name;
  private int price;
```
```javascript
  //JavaScript
  //事前定義は不要？
```

## 初期メソッドでのインスタンス変数、プロパティへの代入
さあ、さらに訳わからないところにやってきました！
初期メソッドとはnewされた時(一番最初)に呼ばれるメソッドになります。
今回はnewの引数に指定された値が初期メソッド内で、インスタンスの情報として変数に入ります。

```ruby:
  #Ruby
  def initialize(name, price)
    self.name = name
    self.price = price
  end
  menu1 = Menu.new("ハンバーガー",300)
```
```php:
  #PHP
  public function __construct($name,$price){
    this->name = $name;
    this->price = $price;
  }
  $menu1 = new Menu("ハンバーガー",300);
```
```java
  //Java
  //クラス内でクラスと同名のメソッドを定義する
  Menu(String name, int price){
    this.name = name;
    this.price = price;
  }
  Menu menu1 = new Menu("ハンバーガー",300)
```
```javascript
  //JavaScript
  constructor (name, price){
    this.name = name;
    this.price = price;
  }
  const menu1 = new Menu("ハンバーガー",300)
```

##インスタンスメソッドと呼び出し
さて最後になります。インスタンスは"情報"の他に"処理"を持っています。
今回はその処理の定義方法と呼び出し方です。
変数menu1にはMenuクラスから作られたインスタンスが代入されているので、
出力は"こちらのハンバーガーは300円です"となります。

```ruby:
  #Ruby
  def show
    puts "こちらの#{self.name}は#{self.price}円です"
  end
  menu1.show
```
```php:
  #PHP
  public function show(){
    echo "こちらの{$this->name}は{$this->price}円です";
  }
  $menu1->show();
```
```java
  //Java
  public void show(){
    System.out.println("こちらの"+this.name+"は"+this.price+"円です");
  }
  menu1.show();
```
```javascript
  //JavaScript
  show(){
    console.log(`こちらの${this.name}は${this.price}円です`);
  }
  menu1.show();
```

## 終わりに

最後までご覧いただきありがとうございました。
抜けや間違いがあるかもしれませんが大目に見てください！！

この世の中では浅く広く学ぶのはあまり良くないとされていますが、知識を深めるために別言語に挑戦してみるのもいいと私は思います。