【Java】初めてのJava学習：その1　Javaってなんぞ？から変数の基礎まで（基礎・コード）

# 最初に
自身で学習してきた内容を書き出していきます。
基本的には自分自身でわかるような内容になりますので、ご容赦ください。
また、誤っている点がありましたら、コメントにてご指摘ください。

（要確認）マークがあるものは、「実行前に必ずググる」べき内容。



# ⚠️今回はインプット寄りの投稿です⚠️
今回は、外部サイト「[Progate](https://prog-8.com/)」にて学習した内容を吐き出します。



# index
- Javaってなんぞ
- 試しにコードを書いてみた
- データ型
- Javaでの変数



# Javaってなんぞ
世界中にたくさんの開発者がいる有名な言語のなかの一つ！
大規模システム、Webアプリケーション、スマートフォンアプリなど、Javaはあなたの周りの様々な場所で使われている。

そして・・・
**⚠️JavaとJavaScriptは全くの無関係である⚠️**



# 試しにコードを書いてみた
#### やりたいこと：「文字列」を、コンソールに出力させたい。

```java:Main.java
class Main { // ここにクラスを記述
  public static void main(String[] args) { // ここにメゾットを記述
    System.out.println("Hello,World!"); // ここに処理を記述
  }
}
```

- **文字列は「"（ダブルクォーテーション）」**で囲んであげる。
- **「;（セミコロン）」**は忘れがちになる！
- System.out.println()というのは、「()の中身を出力（表示）せよ」という「命令」
  - print「l」nは小文字のエルだぞ
- クラス＞メゾット＞処理の構成で記述するようだ

## 文字列の連結
#### やりたいこと：「文字列」を、連結させてコンソールに出力させたい。

```java:Main.java
class Main {
  public static void main(String[] args) {
    System.out.println("Hello" + "World!");

    System.out.println("5" + "3"); //結果：53
  }
}
```

- 後述の「数値」と「文字列」の違いをイメージすると良い！

## 数値（四則演算処理）
#### やりたいこと：「数値」を、コンソールに出力させたい。

```java:Main.java
class Main { // ここにクラスを記述
  public static void main(String[] args) { // ここにメゾットを記述
    System.out.println(3); // ここに処理を記述
    System.out.println(1 + 2);
    System.out.println(5 - 2);
  }
}
```

- **数値はそのまま**でOK。
- 四則演算もできちゃう！
- 今回の記述だと、全て「3」だが処理内容が違うぞ。

#### やりたいこと：いろんな計算結果を出力させたい。

```java:Main.java
class Main { // ここにクラスを記述
  public static void main(String[] args) { // ここにメゾットを記述
    System.out.println(5 * 2); // 結果：10
    System.out.println(6 / 2); // 結果：3
    System.out.println(8 % 5); // 結果：3
  }
}
```

- 「*」は掛け算、「/」は割り算
- 「%」は**割り算の余り**を計算できるぞ！（今回の場合は「1余り3」なので出力は「3」となる）
- **四則演算処理を見やすくする為に、半角スペース**を入れると良き♪

## 文字列と数値の違いがわかる例

```java:
System.out.println(3); // 結果：3
System.out.println("1 + 2"); // 結果：1 + 2
```

# データ型
## String型とint(integer)型
Ruby on Railsで開発をしていた時にも、テーブル設計時にお世話になりました、**String型とint(integer)型**についてです。

| String型 | int型 |
|:----------------:|:-----------------:|
| "Hello,World"（文字列） | 3（整数） |
| "イロハ" | 1995 |

- String型
  - 文字の並び
- int(integer)型
  - 整数
  - **（iは小文字）**

**後日、様々なデータ型をまとめた記事を投稿予定です。**



# Javaでの変数
データのやりとりをやりやすくするための、定義できる書類BOXや名札みたいな感じ。
投稿者の過去記事に、rubyでの簡単な説明があるので、よければ読んでみてね！
[Rubyについて（基礎）](https://qiita.com/yoshi-2015/items/6ddd034e5c7224a8c970#%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%AF)

#### やりたいこと：Javaで変数を定義させ、定義した変数から値を取り出したい
①変数にいれる値のデータ型を指定
②変数の名前を指定
③値を代入する

<img width="879" alt="スクリーンショット 2020-03-16 17.28.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591388/dbbe69e0-417a-aefc-d3cd-4563364778b6.png">

**「=」は「等しい」**を意味するのではない！

あとは変数から値を取り出せばOK！！

```java:Main.java
class Main {
  public static void main(String[] args) {

    int a; // 整数として「a」の名札がついた箱を用意
    a = 10; // その箱に「10」を代入
    System.out.println(a); // 結果：10

    String b; // 整数として「b」の名札がついた箱を用意
    b = "hello,world!" // その箱に「"hello,world!"」を代入
    System.out.println(b); // 結果："hello,world!"

  }
}
```

#### やりたいこと：変数の初期化をしてみる
変数の定義と代入を一行で表現できる！
上記のコードにある変数を初期化してみる。

```java:Main.java
class Main {
  public static void main(String[] args) {

    int a = 10; // 変数の初期化
    System.out.println(a); // 結果：10

    String b = "hello,world!" // 変数の初期化
    System.out.println(b); // 結果："hello,world!"

  }
}
```

✨見ていて気持ちいいコードになった✨

#### やりたいこと：「int型の計算」と「String型の連結」

```java:Main.java
class Main {
  public static void main(String[] args) {

    // 変数を用いたint型の計算
    int hoge1 = 100;
    System.out.println(hoge1 + 200); // 結果：300

    int hoge2 = 10;
    System.out.println(hoge1 + hoge2); // 結果：110


    // 変数を用いたString型の連結
    String hello = "こんにちは！";
    System.out.println(hello + "hoge1"); // 結果：こんにちは！hoge1

    String name = "hoge2";
    System.out.println(hello + name); // 結果：こんにちは！hoge2

  }
}
```

## 変数の上書きと注意点
中に入っている値を更新すること（上書き）も可能。
ただし、注意として、**「同じ処理内で同一名の変数を定義できない」**。
#### やりたいこと：変数の上書きとエラーの出る記述

String型の変数を呼び出す時も、変数名に「"」は記述しない。

```java:Main.java
class Main {
  public static void main(String[] args) {

    // 変数を用いたint型の計算
    int hoge1 = 100;
    System.out.println(hoge1 + 200); // 結果：300

    hoge1 = 400; // 上書き
    System.out.println(hoge1 + 200); // 結果：600

    int hoge1 = 700; //結果を900にしたいが「int」を記述
    System.out.println(hoge1 + 200); // 結果：同じ処理内で同一名の変数を定義しているのでエラーが出る

  }
}
```

**ここで地味なポイント**
コードは基本的に上から処理されていく。

```java:Main.java
class Main {
  public static void main(String[] args) {

    int number = 10;
    String text = "Ruby";
    System.out.println(number); // ここで一度「10」が出力される
    System.out.println(text); // ここで一度「Ruby」が出力される

    number = 5;
    text = "Java";
    System.out.println(number); // 上書きされた「5」が出力される
    System.out.println(text); // 上書きされた「Java」が出力される

  }
}
```

結果

```terminal:
10
Ruby
5
Java
```

## 自己代入
#### やりたいこと：変数xに10が入っている時、40を足して、変数xを上書きしたい
代入の「=」は等しいわけではないことがPOINT!

```java:Main.java
class Main {
  public static void main(String[] args) {

    int number = 10;
    System.out.println(number); // 結果：10

    number = number + 40;　// number = 10に40を足して、numberを上書き
    System.out.println(number); // 結果：50

  }
}
```

上記の記述を省略してみる。

```java:Main.java
class Main {
  public static void main(String[] args) {

    int number = 10;
    System.out.println(number); // 結果：10

    number += 40;　// 省略記述
    System.out.println(number); // 結果：50

  }
}
```

#### やりたいこと：自己代入の省略記述

```java:
int number = 10;

number += 40;
number -= 40;
number *= 40;
number /= 40;
number %= 40;

//変数に「1」を足す、もしくは「1」を引く場合はさらに省略できる
number++;
number--;
```

## 変数の命名規則（Javaの場合）
変数は自由に命名することができる・・・が！！！
**一定のルールと理由**がある。

**GOOD👍**

| 例 | 理由 |
|:-----------------|:------------------|
| date | 英単語を用いている |
| userName | 2語以上の場合は大文字で区切る(キャメルケース) |

**BAD😭**

| 例 | 理由 |
|:-----------------|:------------------|
| 1name | **数字開始はエラー**が出るぞ |
| user_name | **アンダーバーは望ましくない**(スネークケース) |
| ohisama | **ローマ字**もわかりにくいので良くない |
| 名前 | 日本語はよろしくない（プログラミングでは日本語良くないぞ...） |

誰が見てもわかりやすく、短い変数名を定義してあげよう！！
命名に悩んだら下記参照。

[codic](https://codic.jp/)

## 小数点について
#### やりたいこと：小数点を用いて計算をしてみたい
小数点のデータ型は「double型」。

```java:Main.java
class Main {
  public static void main(String[] args) {

    double number1 = 10.0;
    double number2 = 3.3;

    System.out.println(number1 + number2); // 結果：13.3
    System.out.println(number1 - number2); // 結果：6.7

  }
}
```

#### やりたいこと：自動型変換を用いて整数と小数点で計算したい

```java:Main.java
class Main {
  public static void main(String[] args) {

    System.out.println(5 / 2.0); // 結果：2.5

    //因みに
    System.out.println(5 / 2); // 結果：2
    System.out.println(5.0 / 2.0); // 結果：2.5

  }
}
```

- 「+」などの操作は、本来であれば同じデータ型同士でないとできない。
- 「自動型変換」で対応してみる。（手動もあるようだ）
- 因みに「String型」と「int型」で「+」すると、String型で出力される。
  - このことから、値をわかりやすく表現できるデータ型に自動変換してくれていることがわかる！！
  - **整数の「5」は、文字列でも"5"の表現ができるし、小数点でも5.0の表現ができる**から。
- また、**int型の計算結果とdouble型の計算結果で変化することがある**ので注意した方が良いぞ。

#### やりたいこと：強制型変換を用いて整数と小数点で計算したい

```java:Main.java
class Main {
  public static void main(String[] args) {

    int x = 13;
    int y = 4;
    System.out.println(x / y); // 結果：3（3.25ではない）

    System.out.println((double)x / y); // 結果：3.25

  }
}
```

- 変数xのint型を「double型」に強制変換させたので、自動型変換が発火して、変数yも「double型」になったぞ！！



#追加あれば、どんどん更新していきます。
駆け出しとして頑張ります。