http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture6.html
© 2006-11 Martin J. Dürst 青山学院大学
-n)while)each,...)if 式で条件によって処理を選択if, elsif, else, end
の順番で記述elsif は0個以上else はなくてもよいif と elsif で条件が必要<, >,
<=, >=, ==,
!=if, elsif, else
の後にその場合の処理を記述 (複数行可、字下げ!)提出: 11月 4日 (金曜日) 22:00 までに Moodle にファイル famous.txt を処理するプログラム
famous.rb を作成、投稿:
”」があるto_i
で結果が 0)unknown」、「不明」など(プログラムの呼び出しは ruby -n famous.rb
<famous.txt)
正解例: famous.rb (出力の文書は日本語でも結構)
elsif hobby=='不明' or hobby=='unknown' or ...
発展的可決方法:
elsif ['不明', 'unknown', ...].include? hobby elsif hobby ~= /不明|unknown|.../and)height >= 100 and height <= 200or)不明」又は「unknown」hobby=='不明' or hobby=='unknown'not)not (price>1500)-n)
は簡単なプログラムに限定while)
は特殊なケースに限定すべきeach,...) は Ruby の強み一般的な形:
while 条件 繰り返す処理 end
応用例 (1):
while input_line = gets
if input_line.chomp.split(', ').length < 8
puts 'Not enough input fields'
end
end
応用例 (2):
input_data_array = []
while input_line = gets
input_data_array << input_line.chomp.split(', ')
end
[<< は配列への要素の追加]
配列の配列は二重配列という
実例:
[ ['浅田 真央', 'アサダ マオ', '21', '163', '43', 'フィギュアスケート選手', 'トリプルフリップ', 'ジグソーパズル'], ['安藤 美姫', 'アンドウ ミキ', '23', '162', '50', 'フィギュアスケート選手', '3回転ルッツ・3 回転ループのコンビネーションジャンプ', 'ネイル'], [...] ]
一般的な形:
配列.method do |変数| 処理 # 変数を使いながら end
do と end の間のものは「 do
ブロック」または「ブロック」 (block) と呼ぶ
メソッド名は each
実例:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] numbers.each do |number| puts number**2 end
応用例:
sorted_data_array.each do |fields|
name, yomi, ... = fields
...
puts "#{name}, hobby: #{hobby}"
end
メソッド名は sort_by; do
ブロックの最後の値で並変え
応用例:
sorted_data_array = input_data_array.sort_by do |fields| name, yomi, ... = fields height_text.to_i # 身長による並び変え end
提出: 11月 11日 (金曜日) 22:00 までに Moodle に
famous_while.rb として投稿
-n から
while へ書換えるsplit(',
') を split(/, ?/) に変更or など)"Hobby missing (#{hobby})" で簡単化)提出: 11月 11日 (金曜日) 22:00 までに Moodle に
famous_sort.rb として投稿
while の応用例 (2)
を読み込んだ後、each で BMI を追加
(各人を表す配列の9番目の項目として)sort_by で体重ごとに並び変えeach で名前、身長、体重、BMI を出力[参考: BMI は Body Mass Index で、「太り具合」を数値で表現。計算式は weight / (height/100.0)2。]