LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル第4章 ブロック

Posted at

ブロック

配列と範囲はいずれも、ブロックを伴うさまざまなメソッドに対して使える。

>> (1..5).each { |i| puts 2 * i }
2
4
6
8
10
=> 1..5

(1..5)に対してeachメソッドを呼び出す。
メソッドに渡されている{ |i| puts 2 * i }が、ブロックと呼ばれる部分
|i|では変数名が縦棒「|」に囲まれている。 ブロック変数に対して使うRubyの構文
範囲オブジェクトのeachメソッドは、iという1つのローカル変数を使ってブロックを操作

>> (1..5).each do |i|
?>   puts 2 * i
>> end
2
4
6
8
10
=> 1..5

短い1行のブロックには波カッコを使う。
長い1行や複数行のブロックにはdo..end記法
iの代わりにnumberを使っている。
この変数(ブロック変数)の名前は固定されていません。

>> 3.times { puts "Betelgeuse!" }   # 3.timesではブロックに変数を使っていない
"Betelgeuse!"
"Betelgeuse!"
"Betelgeuse!"
=> 3
>> (1..5).map { |i| i**2 }          # 「**」記法は冪乗 (べき乗)
=> [1, 4, 9, 16, 25]
>> %w[a b c]                        # %w で文字列の配列を作成
=> ["a", "b", "c"]
>> %w[a b c].map { |char| char.upcase }
=> ["A", "B", "C"]
>> %w[A B C].map { |char| char.downcase }
=> ["a", "b", "c"]
>> %w[A B C].map { |char| char.downcase }
=> ["a", "b", "c"]
>> %w[A B C].map(&:downcase)
=> ["a", "b", "c"]
テストがブロックなっている
test "should get home" do
  get static_pages_home_url
  assert_response :success
  assert_select "title", "Ruby on Rails Tutorial Sample App"
end

テストコードにdoというキーワードがあることに気付き
そこからテストの本体が「そもそもブロックでできている

演習

1.2乗にせよ

>> (0..16).each{ |i| puts i ** 2}                                          
0
1
4
9
16
25
36
49
64
81
100
121
144
169
196
225
256
=> 0..16

2.メソッドを定義してメソッドを使え。

>> def yeller(s)
>>   s.join.upcase
>> end
=> :yeller
>> yeller(['o', 'l', 'd'])
=> "OLD"

mapを使いきれなかった。 一応書いてみた。

3.メソッドを定義して、メソッドを使え。

>> def random_subdomain
>>    b = ("a".."z").to_a.shuffle[0..15].join
>>    puts b
>> end
=> :random_subdomain
>> random_subdomain
uztpyrijhcvesxnl
=> nil

一応できたと思う。

4.コードを書き換えろ

>> def string_shuffle(s)
>>   s.split('').shuffle.join
>> end
=> :string_shuffle
>> string_shuffle("foobar")
=> "arfoob"
>> string_shuffle("foobar")
=> "ooabfr"
>> string_shuffle("foobar")
=> "bfooar"
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