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 <= 200
or
)不明
」又は「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。]