プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Ruby1.9、「ブロック付きメソッド」を理解する(2) ブロック変数
Ruby1.9、「ブロック付きメソッド」を理解する(1) 基本」の続きです。
今回のお題は「ブロック変数」(--)b

ブロック変数ってのはまぁ、ブロックにパラメータを渡すときに
頑張ってくれちゃう奴です。

例えばこんなコードを実行するとφ(--)

  class HogeClass
      def hogeMethod1(arg1)
          yield(
arg1)
      end
  end
  
  aaa = HogeClass.new
  aaa.hogeMethod1(5){
|x|
      puts x
  }
  aaa.hogeMethod1(10){
|x|
      puts (x+x)
  }


実行結果はこんなんなりますφ(--)

  5
  20


「|x|」の部分がブロック変数と呼ばれるものです。
「yield」にパラメータを渡すとその値がブロック変数に入ります。

上記のサンプルコードで言えばブロック変数「x」に
yieldの引数「arg1」の値が入るわけです。

ちなみにブロック変数は複数用意できますよ。
パラメータの数と合わない場合は左から入っていく感じ。

例えばこんなコードを実行するとφ(--)

  class HogeClass
      def hogeMethod1(arg1)
          #パラメータ1個で実行
          yield(
arg1)

          #パラメータ2個で実行
          yield(
arg1, arg1 + 1)
      end
  end
  
  aaa = HogeClass.new
  
  # パラメータ1個受け取り~
  aaa.hogeMethod1(1){
|x|
      puts "aaa.hogeMethod1(1)"
  
      if x.nil?
          puts "x.nil"
      else
          puts x
      end
  }
  
  # パラメータ2個受け取り~
  # 1個しかない場合はyはnilになる
  aaa.hogeMethod1(2){
|x,y|
      puts "aaa.hogeMethod1(2)"
  
      if x.nil?
          puts "x.nil"
      else
          puts x
      end
  
      if y.nil?
          puts "y.nil"
      else
          puts y
      end
  }
  
  # パラメータ2個受け取り~
  # 第2パラメータは上書きしてみる
  aaa.hogeMethod1(3){
|x,y|
      puts "aaa.hogeMethod1(3)"
  
      y = 40
  
      if x.nil?
          puts "x.nil"
      else
          puts x
      end
  
      if y.nil?
          puts "y.nil"
      else
          puts y
      end
  }
  
  # パラメータ無視
  # ついでにブロック変数を宣言しなくても変数使えるよ
  aaa.hogeMethod1(4){
      puts "aaa.hogeMethod1(4)"
  
      z = 4
      puts z
  }


結果はこんなんになりますよっとφ(--)

  aaa.hogeMethod1(1)
  1
  aaa.hogeMethod1(1)
  1
  aaa.hogeMethod1(2)
  2
  y.nil
  aaa.hogeMethod1(2)
  2
  3
  aaa.hogeMethod1(3)
  3
  40
  aaa.hogeMethod1(3)
  3
  40
  aaa.hogeMethod1(4)
  4
  aaa.hogeMethod1(4)
  4


「|x|」ってのが最初ピンとこなかったけど
理解すれば「なーんだ」って感じでした。
イメージとしては

  {|x| puts x }

ってのは

  def hoge(x)
      puts x
  end


と似たようなもの(--)b

Ruby1.9、「ブロック付きメソッド」を理解する(1) 基本
Ruby1.9、「ブロック付きメソッド」を理解する(2) ブロック変数
Ruby1.9、「ブロック付きメソッド」を理解する(3) ブロックの実行方法
Ruby1.9、「ブロック付きメソッド」を理解する(4) ブロック有無の判定方法
Ruby1.9、「ブロック付きメソッド」を理解する(5) イテレータ
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● Ruby  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事