LoginSignup
4
3

More than 5 years have passed since last update.

letの遅延評価で困る具体例

Posted at

letの遅延評価は各it,example内で定義したものが呼ばれない限り実行されなくなります。
そのせいで困る具体例をあげます。
例えば、let!のところをletにすると、User.allが[ ]になります。User.findとかもできません。
http://qiita.com/jnchito/items/cdd9eef2ed193267c651#2-%E7%84%A1%E9%A7%84%E3%81%AA%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E7%84%A1%E3%81%8F%E3%81%9B%E3%82%8B)

  describe “sugoi_method" do
    context “すごい処理をした場合" do
      let!(:user) {create(:user, id: 1, email: 'user@basicinc.jp')}
      it “すごいデータがつくられる" do
          User.all #-> [User~]
      end
    end
  end
  describe “sugoi_method" do
    context “すごい処理をした場合" do
      let(:user) {create(:user, id: 1, email: 'user@basicinc.jp')}
      it “すごいデータがつくられる" do
          User.all #-> [ ]
      end
    end
  end

注意

letは、このような動作になりますが、
遅延評価は無駄な初期化の時間をなくせるので有効に使うべきではあります。
例えば、let!にした場合、itごとに変数が初期化されます。
つまり、その分、使わない変数のための処理にかける時間が多くなります。
「let!使いすぎはよくないよ」と言う解説を見かけるのは、その理由からです。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3