0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】ブロックについてサクッと解説!

Posted at

内容

Rubyのブロックは、コードの一部をカプセル化し、再利用可能にする強力な機能です。この記事では、ブロックの基本的な使い方から、スコープの生成、クロージャの使用に至るまでを掘り下げていきます。

ブロックとは何か?

基本的なブロックの使用

def func x
  x + yield
end
p func(1){ 2 } # 出力: 3

この例では、{} で囲まれた部分がブロックであり、yield を使用してその中身を実行しています。

ブロックによるスコープの生成

def func y
  y + yield
end
func(1) do
  x = 2
end
# 「p x」を実行するとNameErrorが発生

ブロック内で定義された変数は、そのブロックの外部からはアクセスできないことを示しています。{}do...end はどちらもブロックを生成しますが、一般的に一行で書ける場合は {} を、複数行にわたる場合は do...end を使用します。

ブロックと変数のスコープ

ブロック外の変数をブロック内で参照

def func y
  y + yield
end
x = 2
p func(1){ x+=2 } # 出力: 5
p x # 出力: 4

この部分では、ブロック内でブロック外の変数 x を参照し、変更する方法を示しています。これはRubyにおける「クロージャ」の一例で、メソッド内部から外部を参照する方法の一つです。

ブロックと引数の操作

def func a, b
  a + yield(b,3)
end
p func(1,2) {|x, y| x + y} # 出力: 6

yield の引数を使って、ブロックの引数である xy の挙動を制御しています。この場合、1 + (2 + 3) の計算が行われます。

ブロックの存在を判定する

def func
  return 1 if block_given?
  2
end
p func(){} # 出力: 1
p func # 出力: 2

block_given? メソッドを使用することで、ブロックが与えられているかどうかを判定できます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?