演習お疲れさまでした
ちょっと応用効かせたりなど難易度は高かったと思います
さて続きをやっていきましょう
メソッド
まずメソッドについて
これはある処理を人まとまりにする
といった具合です
例えば名前を聞いてその人に笑顔で挨拶するとします
1人2人ならいいですが100人にそれをやると顔が痙ります
だってこうなるから
puts '佐藤さん、こんにちは(笑顔)'
puts '鈴木さん、こんにちは(笑顔)'
puts '田中さん、こんにちは(笑顔)'
〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜
puts '山本さん、こんにちは(笑顔)'
ね?
せめて、せめて名前より後ろの挨拶だけは自動化したい!
そんなときは処理をひとまとめにして呼び出しましょう
def hello (name)
puts "#{name}さん、こんにちは(笑顔)"
end
hello('佐藤')
hello('鈴木')
これで挨拶するという処理はいつでも簡単に呼び出せます
呼び捨てでもバレません
書き方としては
def メソッド名 (引数を入れる変数)
処理
end
ですね
呼び出すときは
メソッド名(引数)
になります
引数について説明しましょうか
引数とはメソッドを使う時にメソッドに渡して上げる値です
このプログラムだと挨拶したい名前をメソッドに渡してあげないとただただ
「こんにちは(笑顔)」とだけ言うロボットになってしまいます
そこで「このひとに挨拶して!」と値を渡してあげましょう
そしてメソッド側は受け取った値を変数に入れて使います
今回で言うところの「name」ですね
引数を使わない場合は省略可能です
ちょっと補足
変数についてです
このタイミングで?と思いますがこのタイミングがベストです
下記のコードを実行してみてください
def hello
name = '佐藤'
end
puts "#{name}さんこんにちは"
エラーが出ましたよね
ではこうしてあげてください
name = '佐藤'
def hello
end
puts "#{name}さんこんにちは"
今度は大丈夫ですね
実はメソッドやif文、次に出てくる繰り返し文などなにかひとまとめにされた要素の中で宣言された変数はその要素内でしか呼び出せません
要素外にかかれているどこでも呼び出せる変数をグローバル変数と言います
繰り返し文(each文)
配列に格納した値を取り出そうと思った時
値の数が3個くらいだったら別にいいのですが100個とかになった時
いちいち
puts num[0]
puts num[1]
puts num[2]
〜〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜〜〜
puts num[99]
なんてやってられませんよね
そこで繰り返し文を使います
コードはこれですが配列の中身がめんどくさい場合はコピペか適当なものを3個くらい入れてください
members = ['悟空','ベジータ','悟飯','ピッコロ','クリリン','トランクス(未来)','トランクス','悟天','天津飯','ヤムチャ']
members.each do |member|
puts member
end
さて実行
こうなりましたか?
では解説
繰り返す対象.each do |対象を入れる変数|
処理
end
になります
「対象を入れる変数」ですが意味がわかりませんよね
一連の流れで噛み砕いて説明すると
- 配列を一つずつ取り出す
- 取り出した配列の値を入れる変数を用意する
- その変数を使って処理を書く
といった感じ
この2番目が「対象を入れる変数」ですね
繰り返し文(times文)
次にtimes文で繰り返します
これは決まった回数を繰り返す時に使います
例えば反省文を書くとしましょう
先生から「二度としません。ごめんなさい。」
を100回書いて来いと言われた設定です
そんなときはこう!
100.times do
puts '二度としません。ごめんなさい。'
end
これで解決
100の部分は繰り返したい回数を書きます
一枚上手の先生に出会ってしまった
先生が「○回目:二度としません。ごめんなさい。」と書け!
と仕様変更してきました
幸い先生はプログラムには詳しくないようです
そんなときの対処法
count = 1
100.times do
puts "#{count}回目:二度としません。ごめんなさい。"
count += 1
end
変数countを使って繰り返されるたびに+1すればいいですね
+= 1で変数に1ずつ足してくれます
ということは-= 1で1ずつ減らしてくれます
次回、演習
演習やりまーす
ちょっと今回も応用使います
2つほど考えてて1つはプログラマ採用試験にも使われたりします
もう一つは結構難しいかもしれません