Effective Rubyの勉強メモです。
Rubyではメソッドの引数の型を指定しないため、さまざまな引数が与えられます。
もし配列が引数に与えられることを想定して実装すると、引数に単一のオブジェクトやnilが送られてきた場合に困ってしまいます。
そこで、Arrayメソッドを使って引数のオブジェクトを配列化し、さまざまな種類の引数に対応していきたいと思います。
続きを読むEffective Rubyの勉強メモです。
Rubyではメソッドの引数の型を指定しないため、さまざまな引数が与えられます。
もし配列が引数に与えられることを想定して実装すると、引数に単一のオブジェクトやnilが送られてきた場合に困ってしまいます。
そこで、Arrayメソッドを使って引数のオブジェクトを配列化し、さまざまな種類の引数に対応していきたいと思います。
続きを読むEffective Rubyの勉強メモです。
【目次】
rubyでは、コレクション(例えば配列)をメソッドの引数に渡したとき、メソッド内ではどのように配列を参照しているのでしょうか?
実はrubyではメソッドに渡された配列は参照渡しされます。
参照渡しとは、オブジェクトそのものではなく、オブジェクトへの参照を渡すことです。オブジェクトはメモリ上のどこかに格納されており、そのメモリ上のどこを参照しているかのアドレスをメソッドに渡します。
すなわち
a = [1, 2, 3] def address(object) object.object_id end p a.object_id p address(a)続きを読む
Effective Rubyの勉強メモです。
クラス内で@
が先頭につく変数はインスタンス変数を表します。
インスタンス変数はオブジェクト一つ一つが持つプライベートな変数です。オブジェクトのあるインスタンス変数に値をセットしてもほかのオブジェクトのインスタンス変数には影響を及ぼしません。
特別な変数にクラス変数というものもあります。@@
が先頭につく変数で、クラスで一つの値を持ち、そのクラスのインスタンスすべてで共有されます。
もちろん、クラス変数の値を更新すると、すべてのインスタンス変数が更新後の値を使うようになります。
クラス変数を使う一般的な用途の一つにシングルトンがあります。
続きを読む
ブログを始めたけど、なかなか続かない。書くことがない。アクセスが伸びないと悩んでいる方は多いと思います。
僕も始めて数か月は1日に1PVあるかどうかという感じでしたが、1年経った今は1日に平均200PVぐらいあります。
他のブロガーに比べると200PVでも少ないと思いますが、とくにSEOとか気にせず(最近はちょっと気にしだしています)なんとなく書いていたブログが1日に200回も閲覧されているのって結構うれしいです。
そこで、僕がなぜこれまでブログを続けてこられたのか、ネタがないときどうしていたのかを、ブログが続かない原因別に対処法を書いていきたいと思います。
より具体的に、すぐに実践できるような方法を書きました。よく見る「身の回りは実はネタであふれている」系のことは書きません。
スポンサーリンク
【目次】
【目次】
li { list-style: none; }
li { float: left (or right); }続きを読む
Effective Rubyの勉強メモです。
オブジェクト指向はカプセル化によって公開するpublicメソッドと非公開なprivateメソッドを分けています。
最初の頃はすべて公開したら後で楽じゃないかって思っていたのですが、公開するものを制限することでテスト対象が減り、インターフェースをできるだけ変えないようにすることで修正範囲を狭くできるので、公開しないものはprivateにするようにしています。
さて、rubyでのprivateメソッドの定義は結構面白いです。
privateメソッドとして定義されたメソッドは明示的にレシーバを指定して呼び出すことができません。
privateメソッドとなるルールはこれ一つです。
単純なルールですが、確かにクラスの外からは呼び出せないのでカプセル化されています。
レシーバを指定できないので、クラスの中でもself.hoge
みたいにselfを付けてしまうと呼び出せないですが、セッターメソッドの呼び出し以外はselfを付ける必要はないので不便もなさそうです。
Effective Rubyの勉強メモです。
13章はUFO演算子とComparableモジュールについてです。
この二つは以前記事にしたことがあるのでササっと流していきます。
簡単に言うと、UFO演算子(<=>)を定義するだけでsortやminメソッドが使えるようになります。
UFO演算子は自由に実装していいわけではなく、次のルールを守る必要があります。
比較できないときはnilを返す
レシーバ(演算子の左側)が小さいときは-1を返す
逆にレシーバが大きいときは1を返す
等しいときは0を返す
何をもって大きい小さい等しいのかは自分で決める必要があります。
続きを読む