パーフェクトRuby 1章
パーフェクトRubyが手元に届いたので各章ごとにエントリ書いていく
今後はmarkdownで書ける手作りブログに移行予定のため、Markdown記法っぽく書いてあります。
#第一章
導入なので今までのおさらい感があった。
調べた事や曖昧であった点を備忘録的に書いていく
##.bashrcと.bash_profileの違い
##1-6-5 コードブロックの方針
- { }は処理が単数行で終わる場合に使用
- do...endは処理が複数行に渡る場合に使用
- 処理の優先度が違うらしい(知らんかった・・・)
##RubySpec
➡複数のRuby実装がテストコードとして利用
- MRIのテストとは違うっぽい
- Stringのgsub読んだ、言語のテストはやっべぇ(ロシア語?フランス語?)
##JRuby
- Javaで実装されたRuby
- Javaのパッケージ呼び出せる
- メソッドの記法はJavaっぽい書き方(ex:addEventListener)でもRubyっぽい書き方(add_event_listener)でも呼び出せる
- setterも変数に直接触るような書き方も出来る
- 1.9.3互換
##バグ報告
一番新しいエントリで盛り上がっていたのはEnumerable#to_hの振る舞いについて。 最終的に提案は受け入れられなかったが、議論に参加する人は前バージョンとの互換性が・・・等という人が居らず、こう有るべきだ、という議論からずれない所が面白い
Homebrew + rbenv + ruby + Railsインストール
基本的には以下のサイト見ながら行けた
http://d.hatena.ne.jp/takuya_1st/20111224/1324750111
XCodeの重さにドン引き
> ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go) >brew install rbenv >brew install ruby-build >echo 'eval "$(rbenv init -)"' >> ~/.bash_profile >source ~/.bash_profile >brew install readline >brew link readline >brew install openssl >brew link openssl
この後の
> CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p194
ってのが動かなかった
エラーとしては色々あったがコレ
configure: error: no acceptable C compiler found in $PATH
持ってきたは良いがコンパイル出来ないとの事だった
解決参考URL:http://stackoverflow.com/questions/9323612/configure-error-no-acceptable-c-compiler-found-in-path
Xcodeにチェック入れろって
実際やったら出来た。
Eclipseの設定とか
リファクタリングの輪読の番が回ってきたので覚え書き
Egitの使い方とはてな記法の思い出し
Eclipseの設定
師の推奨設定
オートフォーマット
window > Preferencesで検索にformatって入れれば出るEditor > Save Actions
セミコロン、中カッコの空気読み
検索にsemicolonとか入れれば一意に絞れる
Automatically insert a correct posion見たいなヤツで設定
セミコロンは分かるが中カッコの空気読みの使いどころは分からん。
委譲による継承の置き換え
テストとリファクタリング(ライブコーディングの練習として)
継承による委譲の置き換え
extends付けて使ってたインスタンス名消すだけ(ライブコーディングの練習として)
大きなリファクタリング
今回コードはありません
⇒作るべきロジックがわからなすぎたためです。
作るべきアプリケーションのロジックが分かれば作って展開します、申し訳ありません。
4つの大きなリファクタリング
継承の分割
ちょっとした仕事のために小さなサブクラス作成、その後(一週間、一ヶ月、or more)別の箇所で同じ仕事をするための別のサブクラス追加
⇒そして地獄へ
例で説明(ロジックがあんまり分かりませんでした)
PPT作成してみた。
手続き的な設計からオブジェクトへの変換
オブジェクト指向に反する状況
・データ少なくて長いメソッドがずらずら
・アクセサのみのデータオブジェクト
第一章の最初の例
・データとそのアクセサだけを持つクラス作成(RDB使ってるならテーブルに対応させる)
・手続き的なコードを全て一つのクラスに格納(第一章でのstatement()の最初の状態みたいな)
・statementをメソッドの抽出やメソッドの移動等で適切なデータクラスに移動する。
⇒カット
階層の抽出
コード書いてみた・・・けど分からない、そもそも作るもんが違うのかリファクタリングが思い浮かばないだけなのか・・