SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
2014年7月26日
Ruby初級者向けレッスン 50回
— ブロック —
ひがき @ Ruby関西
お品書き
• ブロックとは?
– 繰り返し
– Enumerable
• メソッドにブロックを渡す
• ブロックで値を受け取る
• メソッドでブロックを受け取る
• ブロックに値を渡す
繰り返し
a = [0, 1, 2]
a.each do |i|
puts i
end
# >> 0
# >> 1
# >> 2
繰り返し
a = [0, 1, 2]
a.each{|i| puts i}
# >> 0
# >> 1
# >> 2
Enumerable
• 繰り返しを行なうクラスのためのモジュール
• クラスには each メソッドが必要
Array.ancestors
# => [Array, Enumerable, Object, Kerne
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: 49, dhh: 34}
# = {:matz=49, :dhh=34}
people.each{|person| p person}
#  [:matz, 49]
#  [:dhh, 34]
Hash の例 (2)
people = {matz: 49, dhh: 34}
people.each do |name, age|
puts #{name}(#{age})
end
#  matz(49)
#  dhh(34)
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]
ブロックを受け取るメソッド
• こんな感じで呼びたい
monta{puts ’block!’}
#  block!
#  block!
#  大切なことなので
ブロックを受け取る
def monta
yield
yield
puts ’大切なことなので’
end
ブロックを受け取る (2)
def monta(block)
block.call
block.call
puts ’大切なことなので’
end
値を渡す
def monta
yield ’大切なことなので’
yield ’大切なことなので’
end
monta{|i| puts i}
#  大切なことなので
#  大切なことなので
値を渡す (2)
def monta(block)
block.call ’大切な’, ’ことなので’
block.call [’大切な’, ’ことなので’]
end
monta{|i| p i}
#  大切な
#  [大切な, ことなので]
値を渡す (3)
def monta(block)
block.call ’大切な’, ’ことなので’
block.call [’大切な’, ’ことなので’]
end
monta{|i, j| p #{i}, #{j}}
#  大切な, ことなので
#  大切な, ことなので
ブロックは Proc
block = Proc.new do |i, j|
puts #{i}#{j}
end
monta(block)
#  大切なことなので
#  大切なことなので
演習問題 0
今日のレッスンで分からなかったこと、疑問に
思ったことをグループで話し合ってみよう。
演習問題 1
0 から 9 までの数値をもつ配列 a がある。
• 各要素を順番に表示しよう。
• 各要素を 2倍した値を持つ配列を作ろう。
• 全要素の合計値を計算しよう。
a = (0..9).to_a
a # = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
演習問題 2
0 から 9 までの数値をもつ配列 a がある。
奇数の要素だけを持つ配列を作ろう。
ただし 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_62

Weitere ähnliche Inhalte

Mehr von 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
 

Mehr von higaki (7)

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回 ─── 例外
 

Kürzlich hochgeladen

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

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