![見出し画像](https://assets.st-note.com/production/uploads/images/119932360/rectangle_large_type_2_6ce98800d5d6cbfe1c71d14d23ca7f1c.png?width=1200)
初心者がRailsのコードリーディングに挑戦 #10
以前見たこちらの記事を参考に、Railsのコードリーディングに挑戦してみたいと思います。
◇ 前回までの記事一覧
コードを読む
の続きから!
![](https://assets.st-note.com/img/1698284183822-KrvRPXoDU9.jpg?width=1200)
今回はこの2行を読んでいこうと思います!
見えづらいので同じものを下に書き出します。
raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
raise ArgumentError, "You need to supply at least one validation" if validations.empty?
まずは一番後ろに注目。
empty?はRubyに用意されているメソッドで、その配列の中身が空か文字列の中身が空の場合にtrueを返すようです。
empty?
ifの構文がいつもと違う書き方をしていますが、
処理 if 条件式
という書き方もできるんですよね。
なので “もしattributesやvalidationsが空だったらraise ArgumentError〜というのを実行する” という事になりますね。
ではraise ArgumentErrorとは何か。
raise
raiseはプログラムの中で意図的に例外(エラー)を発生させるときに使います。
例えばたまたま数字を0で割ってしまった時とかそのままだとプログラムはエラーを出力して停止してしまいますが、例外処理を正しくプログラミングすると異常終了することなくエラーを検知してプログラムの続きができるようになります。
つまり “プログラムエラーで止まってしまうと動かなくなるから、エラーになってしまいそうなものをあらかじめプログラミングしておいてそれを防止している” という事ですかね。
raiseの書き方は3パターンあるようです。
raise 発生させたい例外のクラス
raise 発生させたい例外のクラス, "エラーメッセージ"
raise 発生させたい例外のクラス.new("エラーメッセージ")
このどれかをプログラム内の例外を発生させたい場所に書くようです。
今回は2番目が使われていますね。
そして “発生させたい例外のクラス” はあらかじめRubyで定義されているようです。
組み込みライブラリ
組み込みライブラリは Ruby 本体に組み込まれているライブラリです。このライブラリに含まれるクラスやモジュールは、 require を書かなくても使うことができます。
この組み込みライブラリには前回勉強したObjectクラスやHashクラスも含まれているんですね。
そしてこの組み込みライブラリの中に例外クラスというものもあるみたいです。
上記サイト下の方に「例外クラス」という項目があります。
ArgumentError (例外クラスのひとつ)
引数の数があっていないときや、数は合っていて期待される振る舞いを持ってはいるが期待される値ではないときに発生します。
全体をまとめると “もしattributes(またはvalidations)が空だったら、あえてエラーを発生させて ”少なくとも1つのattribute(またはvalidation)を指定する必要があります” というエラーメッセージを出す” という事ですね!
試してみます。
![](https://assets.st-note.com/img/1698289528860-OAxkO7nfux.png)
validatesの後ろを消して中途半端な感じにしてみました。
コンソールでuserデータを作ってみると…
![](https://assets.st-note.com/img/1698289553793-nQ908rhZ9x.png?width=1200)
ArgumentErrorとメッセージ文が出ました!
これを定義してくれていたんですね。
こうやってソースコードを読んでいくのはすごく勉強になりますね。
知らない事をたくさん知ることが出来ます。
とか言いつつここでいったん終わろうと思います。
やり方は分かったのであとは時間さえかければ出来そうな気がしてきました!
これも一歩成長です。
次はSQLiteについて調べてまとめてみたいと思います。
では!