SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
2016年1月9日
Ruby初級者向けレッスン 56回
— ブロック —
ひがき @ Ruby関西
お品書き
• ブロックとは?
– 繰り返し
– Enumerable
• メソッドにブロックを渡す
• ブロックで値を受け取る
• メソッドでブロックを受け取る
• ブロックに値を渡す
繰り返し
a = [’a’, ’b’, ’c’]
a.each do |i|
puts i
end
# >> a
# >> b
# >> c
繰り返し
a = [’a’, ’b’, ’c’]
a.each{|i| puts i}
# >> a
# >> b
# >> c
Enumerable
• 繰り返しを行なうクラスのためのモジュール
• クラスには each メソッドが必要
Array.ancestors
# => [Array, Enumerable, Object, Kernel,
Hash.ancestors
# => [Hash, Enumerable, Object, Kernel,
BasicObject
Object
Mix-in
Kernel
Mix-in
Enumerable
map
select
inject
Array
Hash
each
each
便利な例
a = [0, 1, 2, 3] # => [0, 1, 2, 3]
a.map{|i| i * i} # => [0, 1, 4, 9]
a.select{|i| i.even?} # => [0, 2]
a.inject{|s, i| s + i} # => 6
a.find{|i| i.odd?} # => 1
a.all?{|i| i.even?} # => false
a.any?{|i| i.even?} # => true
array.map{|i| i * i}
アプリケーション ブロック オブジェクト
-生成
§
¦
¤
¥{|i| i * i}
-map
 呼出
ブロックを渡す
• メソッドには、ブロックをひとつ渡せる。
• ブロックをどう使うかは、メソッド次第。
open(’hello.txt’) # = #File:hello.txt
open(’hello.txt’){|f| f.read}
# = こんにちはn
ファイル入出力の例
begin
f = open(’hello.txt’)
f.read
ensure
f.close unless f.nil?
end
ブロックのない open
アプリケーション オブジェクト
-open
-read
-close
×
ブロック付き open
open(’hello.txt’){|f| f.read}
アプリケーション ブロック オブジェクト
§
¦
¤
¥{|f| f.read}
-生成
-open
 呼出

close
×
値を受け取る
• ブロックは、値を受け取れる。
• 何を幾つ受け取れるかは、メソッド次第。
値は受け取らなくてもいい
2.times{|i| puts i}
#  0
#  1
2.times{puts ’こんにちは’}
#  こんにちは
#  こんにちは
Hash の例
people = {matz: 50, dhh: 36}
# = {:matz=50, :dhh=36}
people.each do |person|
p person
end
#  [:matz, 50]
#  [:dhh, 36]
Hash の例 (2)
people = {matz: 50, dhh: 36}
# = {:matz=50, :dhh=36}
people.each do |name, age|
puts #{name}(#{age})
end
#  matz(50)
#  dhh(36)
each_cons の例
midosuji = [梅田, 淀屋橋,
本町, 心斎橋, なんば]
midosuji.each_cons(2){|path| p path}
#  [梅田, 淀屋橋]
#  [淀屋橋, 本町]
#  [本町, 心斎橋]
#  [心斎橋, なんば]
each_cons の例 (2)
midosuji.each_cons(2) do |from, to|
p #{from} - #{to}
end
#  梅田 - 淀屋橋
#  淀屋橋 - 本町
#  本町 - 心斎橋
#  心斎橋 - なんば
each_cons の例 (3)
a = [*0..3] # = [0, 1, 2, 3]
a.each_cons(3){|i| p i}
#  [0, 1, 2]
#  [1, 2, 3]
a.each_cons(3){|i, j| p [i, j]}
#  [0, 1]
#  [1, 2]
ブロックを受け取るメソッド
• こんな感じで呼びたい
x3{puts ’Ruby3’}
#  Ruby3
#  Ruby3
#  Ruby3
ブロックを受け取る
def x3 def x3(block)
yield block.call
yield block.call
yield block.call
end end
x3{puts ’Ruby3’} #  Ruby3
#  Ruby3
#  Ruby3
値を渡す
def x3 def x3(block)
yield 0 block.call 0
yield 1 block.call 1
yield 2 block.call 2
end end
x3{|i| puts Ruby#{i}} #  Ruby0
#  Ruby1
#  Ruby2
ふたつの値を渡す
def x3
yield ’Ruby’, 0 # 文字列 と 数値
yield ’Ruby’, 1
yield [’Ruby’, 2] # ひとつの配列
end
ふたつの値を渡す (2)
x3{|i, j| p #{i} #{j}}
#  Ruby 0
#  Ruby 1
#  Ruby 2
ふたつの値を渡す (3)
x3{|i| p i} # ひとつの変数で受けとる
#  Ruby
#  Ruby
#  [Ruby, 2]
ブロックは Proc
block = Proc.new do |i, j|
puts #{i}#{j}
end
x3(block)
#  Ruby0
#  Ruby1
#  Ruby2
演習問題 0
今日のレッスンで分からなかったこと、疑問に
思ったことをグループで話し合ってみよう。
演習問題 1
0 から 9 までの数値をもつ配列 a がある。
• 各要素を順番に表示しよう。
• 各要素を文字列にした配列を作ろう。
• 各要素を 2倍した値を持つ配列を作ろう。
• 全要素の合計値を計算しよう。
a = (0..9).to_a
# = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
演習問題 2
0 から 9 までの数値をもつ配列 a がある。
奇数の要素だけを持つ配列を作ろう。
ただし odd? メソッドは使用禁止。
(これは Enumerable を使ったパズルです)
a = [*0..9]
# = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a. Enumerable メソッド { odd? 禁止 }
演習問題 3
Enumerable#map を自作してみよう。
module Enumerable
def my_map
……
end
end
ただし Enumerable#map と Enumerable#map!
は使用禁止。
自己紹介
• 名前 (ニックネーム)
• 普段の仕事・研究内容・代表作
• Ruby歴・コンピュータ歴
• 勉強会に来た目的
• などなど
参考
• 公式サイト
https://www.ruby-lang.org/
• るりま
http://docs.ruby-lang.org/ja/
• 解答例
https://github.com/higaki/
learn_ruby_kansai_70

Más contenido relacionado

La actualidad más candente

松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxrubymirichi_
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!notargs
 
Vim の話
Vim の話Vim の話
Vim の話cohama
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道nagachika t
 
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!文樹 高橋
 

La actualidad más candente (6)

松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxruby
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
 
Vim の話
Vim の話Vim の話
Vim の話
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道
 
GTC2011 Japan
GTC2011 JapanGTC2011 Japan
GTC2011 Japan
 
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!
WPD-Fes #3 2015年のサバイバル学習術 Web開発技術の税引後利益 を最大化しよう!
 

Más de higaki

Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版higaki
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外higaki
 
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスhigaki
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hashhigaki
 
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列higaki
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスRuby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスhigaki
 
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と HashRuby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hashhigaki
 
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列higaki
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unithigaki
 
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたhigaki
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外higaki
 

Más de higaki (13)

Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
 
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラス
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
 
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスRuby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
 
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と HashRuby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
 
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
 
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
 

Último

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Último (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Ruby初級者向けレッスン 56回 ─── ブロック