プロを目指す人のためのRuby入門
https://gihyo.jp/assets/images/cover/2017/thumb/TH320_9784774193977.jpg
🍒自分用メモ🍒
“自分の手と頭を動かさなければ、プログラミングは学べない” (まえがきより)
G
第1章 本書を読み進める前に
code:index.txt
・第2章 文字列・数値・条件分岐・メソッドの定義
・第3章 テストの自動化
・第4章 配列・繰り返し
・第5章 ハッシュ・シンボル
・第6章 正規表現
・第7章 クラスの作成
・第8章 モジュール
・第9章 例外処理
・第10章 yield・Proc
・第11章 デバッグ技法
抜粋:: 伊藤 淳一 “Software Design plusシリーズ プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで”
Ruby 1.9 までは、デフォルトエンコーディングがUS-ASCIIだったため、日本語を使うにはマジックコメント(# encoding: utf-8や# encoding: shift_jis)を書く必要があった
Ruby 2.0からは、デフォルトエンコーディングはUTF-8
第2章 Rubyの基礎を理解する
すべてがオブジェクト
セミコロンで文の区切り、バックスラッシュで文の継続を明示できる
変数を宣言するだけの構文はない(宣言されていない識別子を参照するとエラーになる)
Rubyでは、変数の型が決まっているわけではないため、数値も文字列も同じ変数に代入できるが、理解しづらくなるため避けること
“Rubyではreturnを使わない書き方のほうが主流”
code:抜粋
開始ラベル <<識別子' の 識別子' を(""、''、)のいずれかで囲むことで、ヒアドキュメントとなる文字列リテラルの性質は対応する文字列リテラルと同じ扱いになります。
and、or、notは&&、||、!よりも優先順位が低い
&&は||より優先順位が高い
andとorの優先順位は同じ
式と文
“文のように見えるが実は式」という要素が多い(つまり、やろうと思えば戻り値を活用できる)”
式は評価されると値(評価値)が定まり、その値を返します。ただし、return、break, next といったものは値を返しません。これらは評価された時点で制御が移ってしまいます。
ガーベジコレクション(GC)
オブジェクトがどこからも参照されなくなったとき、そのオブジェクトが占めるメモリー領域はガーベジ、つまりゴミと呼ばれる。ガーベジがたまると、やがて新たなオブジェクトが生成できなくなってしまう。そうなる前にゴミを集めてメモリーを解放してやるのがガーベジコレクションである。 GC と略す。
エイリアスメソッド
self、nil、true、false、__FILE__、__LINE__、__ENCODING__
疑似変数の値を変更することはできません。擬似変数へ代入すると文法エラーになります。
第3章 テストを自動化する
Rubyをインストールしたら一緒についてくる
Railsの標準テスティングフレームワーク
テストメソッドは必ずtest_で始める(test_fizzbuzzなど)
テストメソッドの中で、検証メソッドを使ってテストする
Minitest以外のテスティングフレームワークに RSpec、test-unit などがある
第4章 配列や繰り返し処理を理解する
ブロック変数のシャドーイングを避ける
ブロック引数の名前をブロックの外にある変数やメソッドの名前と同じにすると、ブロック内ではブロック引数の値が優先して参照される
配列を扱う便利なメソッド
slect/find_all、reject
find/detect
inject/reduce
values_at
concat (+と違って破壊的変更を行う)
n.to_s(16)とした場合、整数nを16進数表現に変換して返す (hexメソッドはその逆のことができる) テスト駆動開発の典型的な開発サイクル
code:抜粋
・先にテストを書いて失敗させる。
・テストがパスするような最小限のコードを書く。
・リファクタリングする。
1つのテストをパスさせるために書く仮実装 (ロジックではなく固定の値を返すようなコード) を”Fake IT”と呼ぶ
1つのテストがパスした後に2つ目のテストを追加する手法を「三角測量」と呼ぶ
配列の集合演算
和集合|/+/union
差集合-/difference
積集合:&/intersection
%記法で配列を作る
%w(foo\ bar baz) => ["foo bar", "baz"]
配列の添え字の開始数を引数で指定できる
配列をブロック引数として渡す場合、ブロック引数を複数定義すると、多重代入のように配列の要素をそれぞれのブロック引数として受け取れる
code:sample.rb
dimensions = [
]
# ブロック引数を()で囲んで、配列の要素を別々の引数として受け取る
dimensions.each_with_index do |(length, width), i|
end
ブロックローカル変数:ブロック内のみで有効なローカル変数
ブロックの | | の中で、セミコロンの後に識別子を書いて宣言した変数。
do...endよりも{...}の方が結びつきが強い
配列の要素をあれこれ操作したくなった時は、既に用意されているメソッドが使えないか、リファレンスマニュアルで探そう
第5章 ハッシュやシンボルを理解する
引数の種類を混在させる時は要注意
第6章 正規表現を理解する
正規表現とは
パターンを指定して、文字を効率よく検索/置換するためのミニ言語
第7章 クラスの作成を理解する
「クラスを使うプログラムと、使わないプログラムの違い」を理解する
ハッシュを使うと、キーをtypoした時にnilが返ってくるのでtypoに気づきにくい
そこで、クラスを作ってデータを入れる
アクセサを使うことで、属性を表す変数名 (ハッシュのキーの代わり) をtypoするとエラーになるので気づける
新しい属性を追加したり、変数の中身を書き換えたりすることを禁止できる
クラスは、内部データや、内部データを利用するための独自のメソッドを持たせることができる
データとそのデータに関するメソッドをセットで持つ
クラスは一種の「データ型」
全てのオブジェクトは何らかのクラスに属している
クラスが同じであれば、保持している属性や使えるメソッドは (原則として) 同じになる
継承やミックスインによって、メソッドが上書きされ内容が変わることもある
オブジェクト毎に保持されるデータのことを「オブジェクトの状態(=ステート)」と呼ぶ
オブジェクトに設定したり、オブジェクトから取得できるデータを属性と呼ぶ
オープンクラス
定義済みのクラスそのものにメソッドを追加したり、メソッドの定義を上書きしたりすることもできます。Rubyのクラスは変更に対してオープンなので、「オープンクラス」と呼ばれることもあります。
モンキーパッチ
外部ライブラリ(gem)に軽微な不具合があったり、微妙に要件に合わない挙動があったりしたときに、モンキーパッチをあてて挙動を変えることがあります。
何でもできるからといって、オープンクラスやモンキーパッチを乱用してはいけない
ダックタイピング
オブジェクトのクラスが何であろうとそのメソッドが呼び出せれば良しとするプログラミングスタイルのことを「ダックタイピング(duck typing)」と呼びます。
“もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである”
第8章 モジュールを理解する
第9章 例外処理を理解する
第10章 yieldとProcを理解する
第11章 Rubyのデバッグ技法を身につける
トラブルシューティングの方法
エラー発生時のバックトレースを読む
デバッガーを使う
ログメッセージを読む
公式ドキュメントを読む
Issueを検索する
ライブラリのコードを読む
テストコードを書く
エラーを再現させるテストコードを書いてデバッグする
早くコードを修正しようと焦るより「急がば回れ」の精神でテストコードを書く習慣をつける
ネットの情報を参考にする (警戒しながら)
パソコンの前から離れる
誰かに聞く
第12章 Rubyに関するその他のトピック
日付や時刻を扱う
標準ライブラリ
ファイルやディレクトリを扱う
ファイルの読み書きを行う
ワンライナーで実行する (-eオプション)
文字列を受け取ってプログラムとして実行する
メソッドを受け取って実行する
便利なツール
Rake (ビルドツール)
ビルドに限らず、何らかのタスクをまとめて実行するのに便利 (テストコードを一括で実行するなど)
RubyとDSL (Domain Specific Language)
「設定ファイルのようなプログラム」「ドキュメントのようなプログラム」が書ける (Gemfile、RakeFileなど)
特定の作業の遂行や問題の解決に特化して設計されたコンピュータ言語
悲観的バージョン演算子 (~>):"マイナーバージョンは上がっても良いがメジャーバージョンは上げたくない"
APIに影響を及ぼさないバグ修正はパッチバージョンを、後方互換性を保ちつつAPIを変更・追加した場合はマイナーバージョンを、後方互換性のないAPIの変更はメジャーバージョンを上げます。
付録
RailsにはRubyを使う時の独自ルールがある
requireやモジュール定義を省略できる (定数の自動読み込み、モジュールの自動作成など)
Active SupportによるRuby標準クラスの拡張
Railsに関する最新情報をチェックする
Railsアプリケーション開発のためには、様々な知識が必要
「アプリケーション設計」「Web技術」「データベース」「セキュリティ」「パフォーマンス」「テスト自動化」「GIt&GitHub」「サーバ運用」など
RubyGems のメンテナンス状況やトレンドを把握する
関連URL