Rubyで☀️目覚めるプログラミングの朝活🍳〜数と文字と友だちになろう〜

# 2.プログラムの基礎


<aside>
🏁 Rubyで「**数値・文字列・変数・定数**」を扱う方法を学び、基本的なプログラムを書けるようになる！

</aside>

<aside>
🧭

### 学習の流れ＆重要キーワード

| ステップ | キーワード | 内容 |
| --- | --- | --- |
| 1 | 数値の出力と演算 | `puts 1` や `1 + 1` などで四則演算を実行する |
| 2 | 文字列の出力 | `'Hello'` や `"Hello"` を `puts` で表示 |
| 3 | 文字列の連結 | `'Hello' + 'World'` などの方法で文字列をつなげる |
| 4 | データ型の違い | `1 + 1`（数値）と `'1' + '1'`（文字列）の違い |
| 5 | 変数の代入と使用 | `x = 1` や `puts x + y` など |
| 6 | 文字列の式展開 | `"Hello, #{name}"` で変数を文字列に埋め込む |
| 7 | 定数の定義と使用 | `PI = 3.14` のように変更しない値を定義する |
</aside>

- 前提１（「1.Rubyを動かす環境構築」の続き）：`root@xxxx:/app#` の状態　※`KoSax ruby_playground %`の場合、`docker compose exec app bash`を実行すること

---

- ①の前に：`mkdir chapter2` （`chapter2`ディレクトリ作成）→`touch chapter2/integer.rb` （`chapter2`ディレクトリの中に`integer.rb`ファイル作成）

## ①数値の四則演算

- `VSCode→integer.rb`
    
    ```ruby
    puts 1
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/integer.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    1
    ```
    

## ①数値の四則演算

- VSCodeで命令を書く→ターミナルで`ruby chapter2/integer.rb`
    
    ➡︎命令を実行し、出力される
    

<aside>
🔢

```ruby
puts 1 #そのまま出力
puts 1 + 1 #足し算を出力
puts 2 - 1 #引き算を出力
puts 2 * 3 #掛け算を出力
puts 6 / 3 #割り算を出力
puts 5 % 2 #割り算の余り（剰余）を出力
puts 2 ** 3 #累乗を出力
```

</aside>

---

- ②の前に：`touch chapter2/string.rb` （`chapter2`ディレクトリの中に`string.rb`ファイル作成）

## ②文字列を出力する

- `VSCode→string.rb`
    
    ```ruby
    puts 'Hello'
    puts 'Hello' + 'RUNTEQ'
    puts 'Hello' + ' ' + 'RUNTEQ'
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/string.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    Hello
    HelloRUNTEQ
    Hello RUNTEQ
    ```
    

## ②文字列を出力する

<aside>
🔠

### 「+」で文字をつなげる

- `'Hello' + 'KoSax'` → くっつける
- `'Hello' + ' ' + 'KoSax'` → 空白もはさめる
</aside>

---

## ③文字列と数値の違いを学ぶ

- `VSCode→string.rb`
    
    ```ruby
    puts 1 + 1
    puts '1' + '1'
    puts '1'.to_i + '1'.to_i
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/string.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    2
    11
    2
    ```
    

## ③

<aside>
💡

### 解説

| 書き方 | 結果 | なぜ？ |
| --- | --- | --- |
| `1 + 1` | `2` | 数値どうしやから、足し算になる |
| `'1' + '1'` | `11` | 文字列やから、「連結」される |
| `'1'.to_i + '1'.to_i` | `2` | `.to_i` で文字列を数値に変換してから足してる |
</aside>

<aside>
🔢

### `puts '1'.to_i + '1'.to_i`についてもう少し詳しく

- `'1'`
    - 文字列（文字データ）であり、数値ではない！！
- `.to_i`
    - 文字列を数値に変換するメソッド

---

つまり…

- `'1'.to_i + '1'.to_i`
    
    ＝ 1+1
    

---

💡補足

- `.to i`
    - **to integer**の略
    - to＝「〜にする！」
    - integer：インテジャー＝整数
    - to integer＝整数（文字列）にする
</aside>

<aside>
🐍

### 補足

| メソッド | 意味 | 例 | 結果 |
| --- | --- | --- | --- |
| `.to_i` | 整数として扱う（to integer） | `'3'.to_i` | `3`（整数） |
| `.to_f` | 小数として扱う（to float） | `'3.14'.to_f` | `3.14`（小数） |
| `.to_s` | 文字列として扱う（to string） | `1.to_s` | `'1'`（文字列） |
| `.to_a` | 配列として扱う（to array） | `'abc'.chars.to_a` | `["a", "b", "c"]` |
</aside>

---

- ④の前に：`touch chapter2/integer_variable.rb` （`chapter2`ディレクトリの中に`integer_variable.rb`ファイル作成）

## ④変数を使った数値の四則演算

- `VSCode→integer_variable.rb`
    
    ```ruby
    x = 1
    y = 2
    z = 3    #x,y,z これらが変数📦
    
    puts x + y      # 1 + 2 = 3
    puts y - x      # 2 - 1 = 1
    puts x * y * z  # 1 * 2 * 3 = 6
    puts 6 / z      # 6 / 3 = 2
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/integer_variable.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    3
    1
    6
    2
    ```
    

## ④

- 変数
    - 名前をつけて値を入れておける入れ物📦のこと
    - x,yのように名前をつけておくと、あとで何回でも使いまわせるし、途中で**中身だけ変える**こともできる🙆‍♂️
---

- ⑤の前に：`touch chapter2/string_variable.rb` （`chapter2`ディレクトリの中に`string_variable.rb`ファイル作成）

## ⑤変数を使った**文字列の連結**と「**式展開**」

- `VSCode→string_variable.rb`
    
    ```ruby
    x = 'Hello'
    y = 'KoSax'
    
    puts x + ' ' + y       # 連結（+）でつなぐ
    puts "#{x} #{y}"       # 式展開（ダブルクオート内で #{変数} を使う）
    puts "#{x}#{y}"        # 空白が埋まる　＝""内が空白も含めて式展開される
    puts '#{x} #{y}'       # シングルクオートやと式展開されへん
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/string_variable.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    Hello KoSax
    Hello KoSax
    HelloKoSax
    #{x} #{y}
    ```
    

## ⑤変数を使った**文字列の連結**と「**式展開**」

<aside>
⚠️

### 注意ポイント

| 書き方 | 結果 | ポイント |
| --- | --- | --- |
| `"#{x} #{y}"` | Hello KoSax | ダブルクオート → 展開される |
| `'#{x} #{y}'` | #{x} #{y} | シングルクオート → ただの文字になる |

### 📍押さえておきたいこと

- **ダブルクオートで囲むと、中身がそのまま展開される**
- **シングルクオートで囲むと、代入されず、そのまま出力される**
</aside>

<aside>
💡

# とても大事なこと

- 例題：food変数に文字列「きゅうり」を代入し、price変数に数値「100」を代入する記載をした後、「きゅうりは100円です」という文字列を返す処理を記述せよ。
    
    ```bash
    def chapter02_04
      food = 'きゅうり'   # 変数への代入値を変更
      price = 100   # 変数への代入値を変更
      # コードを記載
    end
    puts chapter02_04
    ```
    
    ⬇︎
    
    <aside>
    💡
    
    ### ポイント
    
    - 数値と文字列をそのまま出力することはできない！！！
    - NG解答例
        - `chapter02_04 = food + “は” + price + “円です”`
            - 数値：price
            - 文字列：food / “は” / “円です”
    - OK解答例①：`.to_s`（＝to string＝文字列に変換）を用いて数値を文字列に変換する
        - `chapter02_04 = food + “は” + price.to_s + “円です”`
            - `price.to_s` ＝文字列だから、`"price.to_s"` としない
    - OK解答例②：式展開を使う
        - `chapter02_04 = "#{food}は#{price}円です”`
            - **`‘**#{food}は#{price}円です**’`** ➡︎`#{food}は#{price}円です` （出力結果）
            - **式展開の方が数値でも文字列でも自動で文字列にしてくれるから便利！**
    </aside>
    
</aside>

---

- ⑥の前に：`touch chapter2/constant.rb` （`chapter2`ディレクトリの中に`constant.rb`ファイル作成）

## ⑥定数（const）

<aside>
🎁

- 定数について
    - **基本的に変更しない値を入れる箱📦**
    - **定数の名前は最初が大文字**
    - 書き換えようとすると警告が出る⚠️
    - 書き換えらるけど、基本的に書き換えないのがマナー
</aside>

- `VSCode→constant.rb`
    
    ```ruby
    PI = 3.14159
    TAX_RATE = 0.10
    
    puts PI       # 円周率
    puts TAX_RATE # 消費税
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/constant.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    3.14159
    0.1
    
    ```
    

## ⑥定数（const）

### ⚠️書き換えるとどうなる？？

- `VSCode→constant.rb`
    
    ```ruby
    PI = 3.14
    ```
    
- ターミナル
    
    ```bash
    ruby chapter2/constant.rb
    ```
    
- 出力（ターミナル）
    
    ```bash
    3.14159
    0.1
    chapter2/constant.rb:8: warning: already initialized constant PI
    chapter2/constant.rb:1: warning: previous definition of PI was here
    ```
    
    ➡︎警告が出る
    
![スクリーンショット_2025-04-07_15.15.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021892/473cefd7-c12a-403b-90f5-77bb19ffe0a5.png)

    

<aside>
💡 定数を使う場面

- 消費税（`TAX_RATE = 0.1`）
- アプリ名（`APP_NAME = "KoSax"`）
- 上限回数（`MAX_RETRIES = 5`）

「あとでどこからでも同じ値を使いたい」ってときに便利✨

</aside>