宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

【おすすめ技術書】プロを目指す人のためのRuby入門②(全2回)

みなさんこんにちは!宮水です。

 

 

本日は、チェリー本第2弾!

今回は、「プロを目指す人のためのRuby入門」の5章と7章と8章を読んでいこうと思います!

 (※前回6章の正規表現も範囲かと思っていたのですがRuby Goldの範囲だったので割愛します...ごめんなさい。)

 

 

なんと!前回の記事について著者の方から引用リツイートしていただきました。

とっても嬉しい!チェリー本は家宝にしてます\\\\٩( 'ω' )و ////

ありがとうございます!

 

 

 

f:id:kattyan53:20181218193120p:plain

 

 

第5章 ハッシュやシンボルを理解する

エンジニアであれば、ハッシュはみなさんご存知だと思います。

f:id:kattyan53:20181218195647p:plain

駆け出しエンジニアだった頃の私も、ハッシュを使った課題はよくやってました。

ハッシュはちょっと知ってるんだけど...

 

 

5.4.1 ハッシュのキーにシンボルを使う

f:id:kattyan53:20181218193613p:plain

シンボル!? 

 

f:id:kattyan53:20181218193716p:plain

 

 

f:id:kattyan53:20181218193728p:plain

 

 

f:id:kattyan53:20181218193753p:plain

 

:←そういえばこいつ、みたことあるな٩( ᐛ )و

 

キーも値もシンボルの場合は、次のようになります。 

f:id:kattyan53:20181218194117p:plain

 


 :←'hoge'で囲むより楽だから使ってるのかな...?٩( ᐛ )و

 

ハッシュについて存在は知っていたのですが、シンボルって初めて意識しました。

そういえばハッシュって調べてるときにネットでも全然書き方が違ったりして、バージョンの違いかな?くらいにしか思っていなかったのですが : には意味があったのですね!!

 

 

シンボルは、

Rubyの内部で整数として扱われる

・同じシンボルであれば全く同じオブジェクトIDになる

・比較だと、シンボルの方が高速

などの特徴があります。

 

f:id:kattyan53:20181218194855p:plain

ほんとだ!文字列だとオブジェクトIDが毎回違う!

 

 

こんな感じで、ハッシュの使い方と一緒にシンボルについて学びました。

ちなみにRuby Silverの合格教本にもシンボルの説明がちょっと載ってました。

 

 

他にもこの章には、

・ハッシュの基本的な使い方
・シンボルについて
・メソッドのキーワード引数とハッシュについて
・ハッシュでよく使うメソッドについて
・シンボルと文字列の違い、関係性について

書かれていました。

試験もそうだけど、どれもめっちゃ実務で使った〜\\\\٩( 'ω' )و ////

 

 

 おまけ:あとはこの章のコラムにこんな演算子が...

 

 

第6章 正規表現

silverの範囲じゃないので今回は割愛します。

受かったらみっちり読む💪

 

 

第7章 クラスの作成を理解する

とうとうきましたね...オブジェクト指向に絡んでくる章が...

 

 

6章までの範囲は、Rubyの試験でいうと、「文法」の部分にあたります。

今からは、「オブジェクト指向」の試験範囲です。

今のところこの試験範囲が一番ちんぷんかんぷん🌝

 

 

問題① これを実行するとどうなるでしょうか?

f:id:kattyan53:20181218202921p:plain

 

 

 

 

 

 

 

 

ヒント:インスタンス変数がコメントアウトしてある

 

 

 

 

 

 

 

 


 

 問題① 解答

f:id:kattyan53:20181218202954p:plain

インスタンス変数って値を代入する前にいきなり参照してもエラーにならないんだそうです!!初めて知った!!

 

 

あともう一つ目から鱗だったのが、privateの考え方です。

JavaC#の経験者はこの3つのキーワードをみて、「あーなるほど、わかったわかった」と思われるかもしれませんが、ちょっと待ってください!Rubyの公開レベルはJavaC#とは少し考え方が異なるので、注意が必要です。

 

えっ?そうなの?

 

publicメソッドはクラスの外部からでも自由に呼び出せるメソッドです。initializeメソッド以外のインスタンスメソッドはデフォルトでpublicメソッドになります。

 

なるほどー。確かに、Javaとかはいちいち "public static void main..."書いてたけど、Rubyでは書かなくていいもんね。

 

そしてRubyのprivateのお話。厳密にいうと「レシーバを指定して呼び出すことができないメソッド」だそうです!!この考え方は目から鱗でした!

「クラスの外から呼び出せない」の意味をあまりちゃんと考えたことがありませんでした。

 

f:id:kattyan53:20181223161336p:plain

user.nameなら、userがnameメソッドのレーシバとなるのですが、
privateメソッドなので呼び出せません。これがRubyカプセル化の考え方なんですね!

 

 

 

他にもこの章では、

オブジェクト指向の用語解説
・selfについて
・継承について(superの使い方やオーバーライド)
・定数について
・様々なメソッドの種類について
エイリアスメソッドやネストしたクラスの定義について
・特異メソッドについて
・ダックタイピングについて!

 

 

内容が盛りだくさんすぎて全部お伝えできないのが残念ですが、
Rubyのクラスについて、初心者がつまづきやすい内容が丁寧に書かれていました!

 


Railsやってるとオブジェクト指向や継承もあんまり意識せずにかけちゃうので、Rubyからオブジェクト指向を勉強したい人にとっては、一番最初に読むべき良書だと思いました!!

 

 

 

 第8章 モジュールを理解する

続いて、モジュールについてです。

モジュールやミックスインって名前は聞いたことあったのですが、実際に使う場面もそーんなに見たことないし、こちらも学習を後回しにしていました_:(´ཀ`」 ∠):

 

 

◾️モジュールの用途

・継承を使わずにインスタンスメソッドを追加する、もしくは上書きする
・複数のクラスに対して共通の特異メソッド(クラスメソッド)を追加する(ミックスイン)
・クラス名や程数名の衝突を防ぐために名前空間を作る。
・関数的メソッドを定義する
・シングルトンオブジェクトのように扱って設定値などを保持する。 

 

 

すみません、この概要を読んでも全然わかりませんでした...٩( ᐛ )و

そしてこのあとすぐに

 

 

初心者の方はこの説明だけではピンと来ないかもしれません。

〜中略〜 

この章では、この先みなさんができるだけ混乱しないように、モジュールを使ったコードを読んだり書いたりするコツを伝授していきます。

 

 

伊藤先生、初心者に寄り添ってくださって優しい〜٩( ᐛ )و

 

 

まずはモジュールの定義からです。

f:id:kattyan53:20181223162702p:plain

こうやって書きます。

見た目はクラスと似ていますが、

・モジュールからインスタンスを生成することはできない
・他のモジュールやクラスを継承することはできない。

 

とあります。
では、何につかうのか?と言いますと、

 

・モジュールをクラスにincludeしたり...(ミックスインと呼ぶ。これにより多重継承に似たしくみが実現できる)


・モジュールをクラスにextendしたり...(モジュール内のメソッドをそのクラスの特異メソッドにすることができる)


名前空間を作成できたり...


・外部ライブラリを実行するための設定値をモジュール自身に保持させたり...

 

 

できるそうです!!

今まで書いた内容の中で一番難しかった...

 

 

でもRuby Silverでもモジュールや特異クラスの話はとてもよく出題されていて、

メソッドを探しに行く順番や使い方が異なるので、頑張って覚えていこうと思います_:(´ཀ`」 ∠):

 

 

モジュールやミックスインも、Ruby特有のオブジェクト指向なので後々またちょっとづつ理解していこうと思います。

 

 

 

まとめ

今回この記事では、Ruby Silverの試験範囲と照らし合わせてチェリー本を読み進めてきました

 

今までちょっと背伸びしてEffective Rubyや、合格教本を読んでRailsRubyを勉強していたのですが、やっぱり基礎がわかっていない&実務で使ったことないと文字だけで読んでも理解し難い箇所が存在しました。

 

いろんな本を読んで挫折してきた上でチェリー本を改めて読むと、コードも短く豊富なものがたくさん乗っており、わかりやすい例題と共に基礎を学ぶことができました

 

 

この本を読んだことで、試験勉強や他の技術書が捗ること間違いなしです!

私ももう一度試験問題をときながら往復して読んでいこうと思います!

 

 

あ、あと私は書籍を買って読んでいたのですが、コードを実行したいことが多かったり、書籍が大きめなので、電車でも勉強したい方は、コピーできるし軽いし、kindle版もオススメですよ!!٩( ᐛ )و

ここまで読んでくださり、ありがとうございました!