Ruby Silverのあれこれ備忘録

### 【概要】
---

標記の通りになります。記述漏れなどございましたらご指摘のほど宜しくお願いします。
主に、ruby silverに関しての備忘録になります。
これからruby silverを受験する・受験するか悩んでいる方向けの参考になればと思います。

【目次】
---

1.ruby silverとは？
2.学習方法について
3.学習の目安時間
4.ruby silverの頻出問題
5.ruby silverの個人的に気になったこと
6.終わりに
7.引用

【1.ruby silverとは？】
---
まず、ruby silverについて解説します。以下、公式サイトの原文です。

>Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。
>認定によりRubyベースでシステム開発を行ううえで必要な基礎的な知識と応用力をもつことをアピールすることができます。試験の合格者は、Rubyアソシエーションにより「 Ruby Association Certified Ruby Programmer Silver/Gold version 3」として認定されます。

具体的には、GoldやSivlerの区分があります。出題内容等の違いは以下です。

>Ruby Association Certified Ruby Programmer Silver version 3:
Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基本的な技術レベルを持つことを認定します。


>Ruby Association Certified Ruby Programmer Gold version 3:
Silverで求められる範囲（文法、オブジェクト指向、組み込みライブラリ、実行環境など）を更に掘り 下げた知識に標準添付ライブラリ知識やアプリケーション設計に必要となるクラスやオブジェクトに関する知識を追加し、Rubyによるプログラム設計技術を持つことを認定します。

【2.学習方法について】
---

次に、学習方法についてです。

完全なプログラミング初学者の方はまず、下記の本から触れてみることをお勧めします。

![スクリーンショット 2023-12-30 15.10.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/d47690af-7c12-f0be-9134-d96a9eae5434.png)


https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B-Ruby-%E8%B6%85%E5%85%A5%E9%96%80-%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93IT%E5%9F%BA%E7%A4%8E%E8%AC%9B%E5%BA%A7-%E4%BA%94%E5%8D%81%E5%B5%90/dp/4297101238/ref=asc_df_4297101238/?tag=jpgo-22&linkCode=df0&hvadid=295686767484&hvpos=&hvnetw=g&hvrand=5856311788639582078&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009250&hvtargid=pla-541272432931&psc=1&mcid=c400de1ee810370c8fe17facdc5cdc2c&th=1&psc=1

次に、プログラミングに触れたことのある方向けの本になります。

### [改訂2版］Ruby技術者認定試験合格教本（Silver/Gold対応）Ruby公式資格教科書

![スクリーンショット 2023-12-30 15.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/f57276c6-0f05-6dbb-2413-82cf663d9a15.png)


こちらは実際のリファレンスとしてだけでなく、出題範囲について網羅的になっているのでオススメです。

https://www.amazon.co.jp/dp/B0756VF9Y3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

ここまで学習できたら、最後に下記サイト「REX」で模擬試験を行いましょう。
平均して8割以上取れるのが理想になります。

https://rex.libertyfish.co.jp/

【3.学習の目安時間】
---

こちら、試験の概要と学習目安時間になります。
1日4hほど勉強できると仮定すると、
経験者は2週間ほど未経験者は1ヶ月ほどで受験を検討してみるのがおすすめです。

|                    | Ruby Silver                | Ruby Gold                 |
|--------------------|---------------------------|---------------------------|
| 目安の勉強時間   | 約50時間ほど             | 約100時間ほど            |
| 出題数             | 50問                      | 50問                      |
| 受験方式           | CBT方式（コンピュータでの受験） | CBT方式（コンピュータでの受験） |
| 受験費             | 16,500円（税込）           | 16,500円（税込）           |



【3.ruby silverの頻出問題】
---
※この範囲について、後ほどサンプルを載せて更新しようと思います。

・破壊的・非破壊的メソッドメソッド
・ヒアドキュメント
・Dateの出力
・比較演算子
・配列関係

【4.ruby silverの個人的に気になったこと】
---
ここからは、個人的に気になったことになります。
主に、比較演算子になります。

### 気になったことその1

下記のように`===`を使用した場合、`包含判定`、`==`を使用した場合、`値の等価性`の判定になります。
このあたりについて判断が曖昧だったので、下記を参照していただければと思います。

```ruby:test.rb
puts (1..3) === 3  # true
puts (1..3) == 3 # false
```
### 気になったことその2

equalの意味が`java`と`ruby`で相違してきます。
以下、それぞれの出力結果になります。

```java:test.java
public class StringComparison {
    public static void main(String[] args) {
        String str1 = new String("hello");
        String str2 = new String("hello");
        String str3 = str1;

        System.out.println(str1.equals(str2));  // true (内容が同じ)
        System.out.println(str1.equals(str3));  // true (同じオブジェクトを指しているため、内容も同じ)
    }
}
```

```ruby:test.rb
str1 = "hello"
str2 = "hello"
str3 = str1

puts str1.equal?(str2)  # false (異なるオブジェクトを指している)
puts str1.equal?(str3)  # true (同じオブジェクトを指しているため、内容も同じ)
```

`Javaではオブジェクトの同値性`に対して、`rubyは同一性`を判定していることがわかります。
個人的に、ここが違和感がありましたので備忘として残しておきます。



| 演算子   | 目的                | 比較の対象                 | オーバーライド可能         |
|----------|---------------------|--------------------------|---------------------------|
| `===`    | パターンマッチング | カスタムな条件            | はい                      |
| `==`     | 値の等価性          | カスタムな比較ロジック   | はい                      |
| `equal?` | 同一性              | オブジェクトの同一性      | 通常はオーバーライドしない |




【6.引用】
---
https://www.ruby.or.jp/ja/certification/examination/version3.html

https://qiita.com/TS1engineer/items/dff64b61fa47f0ccd59b