Rubyの会17回「メゾット/each/time/map/join シンボル・ハッシュ ・p関数」
今日から夏休み!!!!!✨
今日の進捗です。
agenda
- eachメゾット
- timeメゾット・mapメゾット
- &:
- joinメゾット
- ハッシュ {} とシンボル :hoge
- p関数
1. eachメゾット
繰り返し処理を順に繰り返し全ての処理を行うためのメゾット
書き方が2通りあるよ!!(書いてある意味は同じです。)
コードの意味: 1から5までの数字を繰り返し2を i とかけたものを表示する
- (1..5) 範囲オブジェクトに対してeachメゾットを読んでいる。
- | i | ブロックを操作するときには変数を指定しないといけない。
i(ローカル変数)を使用してブロックを操作し代入する。
|i|(ブロック変数)の名前は なんでもおk。例 | hoge |
1.一行でコードを書きたいとき
ブロックを使うとき{}で囲まないといけないけど do end も使用できる。
>> (1..5).each { |i| puts 2 * i } 2 4 6 8 10 => 1..5
2.2行以上のとき
>> (1..5).each do |i| ?> puts 2 * i >> end 2 4 6 8 10 => 1..5
参考元 eachメソッド - Qiita
------------------------------------------------------------------------------
2. timeメゾット ・mapメゾット
-
timeメゾット 同じ内容を繰り返して表示
コードの意味: "Betelgeuse!"を3会表示させる
>> 3.times { puts "Betelgeuse!" } # 3.timesではブロックに変数を使用していない "Betelgeuse!" "Betelgeuse!" "Betelgeuse!" => 3
-
mapメゾット 配列、範囲オブジェクトを適応させる。
{}の中身に適用させたい処理をかく。
>> (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"]
&: は char(範囲オブジェクト)を短縮するためのもの。
------------------------------------------------------------------------------
5. joinメゾット
文字列をまとめて表示する。
参考引用 join (Array) - Rubyリファレンス
------------------------------------------------------------------------------
6. ハッシュ { } と シンボル :hoge
ハッシュ{ } 配列を作る。
注意
- 並び順は保証されない。
- []とは別物。
>> user = {} # {}は空のハッシュ => {} >> user["first_name"] = "Michael" # キーが "first_name" で値が "Michael" => "Michael" >> user["last_name"] = "Hartl" # キーが "last_name" で値が "Hartl" => "Hartl" >> user["first_name"] # 要素へのアクセスは配列の場合と似ている => "Michael" >> user # ハッシュのリテラル表記 => {"last_name"=>"Hartl", "first_name"=>"Michael"}
別の記述方法 こっちの方が簡単!
>> user = { "first_name" => "Michael", "last_name" => "Hartl" } => {"last_name"=>"Hartl", "first_name"=>"Michael"}
シンボル : hoge 軽量な文字列。
比較してみましょう。
>> "name".split('') => ["n", "a", "m", "e"]
注意
- -(ハイフン)は使用できない _(アンダーバー)は使用できます。
- 数字が使えない
NoMethodError: undefined method `split' for :name:Symbol >> "foobar".reverse => "raboof" >> :foobar.reverse NoMethodError: undefined method `reverse' for :foobar:Symbol
------------------------------------------------------------------------------
7. p 関数
p関数
- 引く数の内容を文字列と数値を使い改行と順番に主力。
- .inspect と意味はほぼ同じ
要はそのまま表示してくれる。
p("Hello Ruby \n") p(1234) #=>"Hello Ruby \n" # 1234
参考文献 【Ruby】表示メソッドについて(print,puts,p) - TASK NOTES
------------------------------------------------------------------------------
7. まとめ
- each 繰り返し処理をする。 (1..5).each
- time 回数表示 2.time
- map 値に要素を反映させる
- &: 変数を省略できる (&: hogehoge)
- join 要素を統合してひとつの文字列にする
- ハッシュ {} 配列をつくる
- シンボル :hoge 軽量な変数
- p関数 そのまま表示。
今日あった出来事
>> params = {}# 'params' というハッシュを定義 ('parameters' の略) => {} >> params[:user] = { name: "Michael Hartl", email: "mhartl@example.com" } => {:name=>"Michael Hartl", :email=>"mhartl@example.com"} >> params => {:user=>{:name=>"Michael Hartl", :email=>"mhartl@example.com"}} >> params[:user][:email] => "mhartl@example.com"
emailのデータを表示するコードが書かれれているのですが、
お題でnameはとれるかな…?と言われて
>> params[:user]
ってかいたらとれると思っていたんだけど
結果
=> name=>"Michael Hartl", :email=>"mhartl@example.com"
で値を2つ取れてた。emailいらない…
・・・・
いろいろ試した結果
こうするとnameだけ値を取ることができる。
>> params[:user][:name]
userの中のnameってことかと納得。PHPと取得の仕方一緒なのに・・
初心者脱却したい…( ; ; )
今回の宿題
ハッシュとシンボルを覚えてくる。
------------------------------------------------------------------------------