![見出し画像](https://assets.st-note.com/production/uploads/images/117136745/rectangle_large_type_2_ca5142af0099fcd23138acfd23e04f0b.png?width=1200)
【備忘録】 初心者がRubyをはじめてみた (20分ではじめるRuby編 完)
前回はメソッドの引数を勉強しました。
今回はクラスについて学んでいきたいと思います。
これ ↓ の2ページ目一番下から。
クラスとはいくつかのメソッドや変数などをまとめることができるもののようです。
参照 ↓
このあと使う「newメソッド」のことも書いてくれています。
練習コードは以下。今回もちょっと変えました。
class Greeter
def initialize(name = “だれかさん”)
@name = name
end
def say_hi
puts “やあ、#{@name}!”
end
def say_by
puts “またね、#{@name}!”
end
end
Greeterがクラス名で、この部分も最初が大文字であれば好きに決めていいみたい。
ちなみにGreeterは直訳で「挨拶をする人」。
挨拶のメソッドをまとめたクラスですよという事かな。
その次のinitializeは直訳で「初期化する」。
でもここでは、「最初の状態を整えるためのメソッド」という意味で付けられているっぽいです。
@から始まる変数(上記でいう@name = ってやつ)は「インスタンス変数」というものらしいです。
参照 ↓ ※分かりやすくまとめてくれているのですが、途中から広告で見れなくなります
![](https://assets.st-note.com/img/1695199173463-X9gAG6VgBg.png?width=1200)
練習コードをもう少し先に進むと意味が分かりやすかったので、頭の隅に置いたまま進めます。
先程のコードで定義したクラスからメソッドを呼び出すには、「newメソッド」というものを使います。
「クラス名.new()」のように、呼び出したいクラス名の後に.new()を付けます。
Greeter.new()
そして変数に格納。
greeter = Greeter.new()
格納した変数の後にクラス内で呼び出したいメソッドなどを「.」で連結すれば、メソッドを実行できるようになります。
greeter.say_hi
実際に使うときは()に、@nameに入れたい文字を入れるようです。
実際にやってみます。
![](https://assets.st-note.com/img/1695200394355-k6I8mZu1JJ.jpg)
できました!
@nameに入れる文字を変えたいときは、
class Greeter
attr_accessor :name
end
とコードを入力するよう。
これは本来は「クラスの外部からインスタンス変数の参照や変更ができないから」とのこと。
このattr_accessorメソッドを使うことで、外部からインスタンス変数の参照と変更が可能になるようです。
↓ 参照した記事
やってみます。
![](https://assets.st-note.com/img/1695256803400-YTx7lNq1D4.png)
できました!
attr_accessorを使うと「name」と「name=」という2つの新しいメソッドが定義されるようです。
画像中の=〉[ :name, :name=]がそうでしょうか。
「name」は値を参照するメソッドで、「name=」は値を設定するメソッドのようです。
つまり、
◆ greeter.nameと入力すれば、値(ここでいう@nameに代入される文字)を参照できる
◆ greeter.name=の後に@nameに入れたい文字を入力すると、新しく値を設定できる
ということ?
やってみます。
![](https://assets.st-note.com/img/1695258804978-cSzCDS5u2X.png)
greeter.nameと入力すると、現在@nameに代入されている「Ruby」を教えてくれていますね!
greeter.name=“ルビー”と入力すると、次の文で「@nameが”ルビー“に変わったよ」と教えてくれ、say_hiのメソッドを実行すると@nameに「ルビー」を代入して表示してくれています!
ひとつひとつ理解していくとわかってくるものですね。楽しい!
@nameに複数人の名前を入れてみると…
![](https://assets.st-note.com/img/1695264824386-YX28opr9X5.png)
表示されたものに[ ]や” “がついてしまう。
というわけで、複数人の名前を入れる方法が次のステップのようです。
次のステップではInteractive Rubyではなくテキストエディタにコードを書くらしい。
ついに戻ってきましたね!私の相棒「メモ帳」!
練習コードをぱっと見ただけでは複雑で頭が???となったので先に分かる範囲でまとめてみました。
![](https://assets.st-note.com/img/1695268112011-R7cUfsnTzc.jpg?width=1200)
![](https://assets.st-note.com/img/1695608834881-aJKJg1ln48.jpg?width=1200)
分からないのもあるけど、これだけ読めるようになるなんて今までの勉強の成果が出ていて嬉しいです。
次は実行したいメソッドの中身を見ていきます。
まずメソッド①。
![](https://assets.st-note.com/img/1695269190302-kat1UhjIZd.jpg?width=1200)
この「if」とか「elsif」とか「else」については、以前基礎を勉強したときに出てきていました。
ここで繋がってくるとは!
勉強していたおかげでわかるってとても嬉しい。
こんな感じ ↓ で解釈しています。
![](https://assets.st-note.com/img/1695384841827-yjOFNvvQg5.png)
次に、条件式に注目しようと思います。
nil?というのは、「nil?メソッド」というものらしいです。
rubyのメソッド一覧を調べたい時に使えるコードがあるみたいなので使ってみます。
※2013年の記事なので少し古いのかも。
@bbs = Bbs.newと入力するとエラーが出ましたが、その下のpp @bbs.methodsだけでメソッド一覧が確認できました。pp @bbs.methods.sortでソートや、例えばpp @bbs.methods.grep(/to/)でtoを含むメソッドだけの抽出も出来ました。
![](https://assets.st-note.com/img/1695276015712-iTPeTcKUrX.png)
![](https://assets.st-note.com/img/1695276064708-QwV8imo6YL.jpg)
「nil?」も「respond_to?」もありますね。
ちょっと脱線しました。戻ります。
nil?メソッドではレシーバー(練習コードでいう@names)がnilであれば真が返されるようです。
↓ 参照
つまり、@names = nilの時はその次のputs ”…”という処理が実行されるということですね。
![](https://assets.st-note.com/img/1695297657468-HCP6rSZOwO.jpg?width=1200)
次が、「respond_to?メソッド」。
これが調べてもほんとによく分からなくて、下に書いたのはたぶんこんなんかなという解釈です。
「オブジェクト.respond_to?」はオブジェクトが特定のメソッドを持つとtrueを返す。
練習コードで言うと、
@names.respond_to?(“each”)
なので、
@namesというオブジェクトがeachというメソッドを持てばtrueを返す
ということかと。
↓ 参考
eachはその次の文で出てきてますね(@names.each do |name|というところ)。
↓ eachについて参照
eachを使うとオブジェクトに対して繰り返し処理を行うことができて、
オブジェクト.each do |変数|
繰り返し行う処理
end
という風に使うよう。
例として挙げられているのがこれ。
![](https://assets.st-note.com/img/1695294264708-g8XRSej71K.png?width=1200)
語尾のsの有無に注目。
「fruits」の中のひとつひとつが「fruit」という変数に収められて表示されていますね。
練習コードだとこんな感じ。
![](https://assets.st-note.com/img/1695293516001-FbKjWjyfgi.jpg?width=1200)
@namesの中身が複数になると「eachメソッドが使えるよ」ということになって、「@names.respond_to?(“each”)という条件式がtrueになる」という感じ?
処理 3 に関しては、「@nameがnilでもなく複数でもないときに行われますよ」という感じですね。
実行したいメソッド①については終わり。
実行したいメソッド②も内容はほとんど同じですが、eachの代わりにjoinが使われていますね。
![](https://assets.st-note.com/img/1695367706317-1iZvyB13Bd.jpg?width=1200)
↓ joinについて参照
joinのあとに( )で区切り文字を指定すると、指定した文字で区切って連結ができるとのこと。
練習コードだと
puts ”Goodbye #{@names.join(“, ”)}.〜”
というように「”, “」で区切り文字を指定しているので、
@names = [“Albert”, “Brenda”, “Charles”, “Dave”, “Engelbert”]
と入力すると、
Goodbye Albert, Brenda, Charles, Dave, Engelbert.〜
と実行されるということですね。
最後にこの部分。
![](https://assets.st-note.com/img/1695386561170-pN4xFctX8x.jpg?width=1200)
これもまだ私には理解が難しいですが、調べた中で一番ピンときた記事です ↓
※結構ボリューミーなので該当箇所を見つけるのは文書内で検索するのが吉
簡単にまとめると、ファイル名.rbで保存したコードを「ruby ファイル名.rb」と入力して実行する以外にもrequireという方法があって、その時に変にならないようにif __FILE__ == $0としておくと、これとendで挟まれた部分は「ruby ファイル名.rb」と入力して実行する時だけ反映されますよということだと思います。
やっとですが実際にやってみます。
練習コードをメモ帳に書いて、ファイル名をつけて.rbで保存。
久しぶりにStart Command Prompt with Rubyを開いて「ruby ファイル名.rb」と入力。
![](https://assets.st-note.com/img/1695386015809-DK8nNRvKRx.jpg?width=1200)
ふんわりとしか理解していないところがまだたくさんありますが、何とか達成ということで。
ふう。長かった。
「20分ではじめるRuby」なのに20時間くらいかかりました(ーー;)
時間かかりすぎですが、調べるの楽しいしnoteに書くのも楽しいです。
ここまで読んでくださった方がいましたら、ありがとうございました!そしてお疲れさまでした!