http://www.sw.it.aoyama.ac.jp/2010/PB2/lecture11.html
© 2010 Martin J. Dürst 青山学院大学
attr_reader
, attr_writer
,
attr_accessor
でインスタンス変数にアクセスするメソッドは簡単に作成可能class ... end
内に def
... end
で定義した関数提出: 12月10日 (金曜日) 22:00 までに Moodle に
famous_accessors.rb
のファイル名で投稿
以前作った famous_class.rb
(正解例でも可能;
以前「発展問題」で行った danger を含む)
でアクセスメソッドを attr_...
に書き換えなさい。
ヒント: class Person 内の変更だけが必要
正解例: 都合により削除
提出: 12月10日 (金曜日) 22:00 までに Moodle に
famous_methods.rb
のファイル名で投稿
演習 1 のプログラムで bmi と danger の計算をメソッドに変更しなさい。更に、有名人一人分の出力となる一行の作成メソッドも作りなさい。
ヒント:
if bmi <= 18.5
)bmi
)
による同一の値の計算の無駄は気にしない様にattr_...
は attr_reader
(インスタンス変数一つ) に減らされる正解例: 都合により削除
変数無し:
readlines.collect do |input_line| Person.new(input_line) end.sort_by do |person| person.weight end.each do |person| puts person.output_line end
do ... end
を { ... }
に変更:
readlines .collect { |input_line| Person.new(input_line) } .sort_by { |person| person.weight } .each { |person| puts person.output_line }
月名の配列:
month_names = [nil, 'January', 'February', 'March', 'April',
'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December']
month_names[12]
→ December
逆のものが欲しい:
month_numbers['December']
→ 12
month_numbers = { 'January' => 1, 'February' => 2, 'March' => 3, 'April' => 4, 'May' => 5, 'June' => 6, 'July' => 7, 'August' => 8, 'September' => 9, 'October' => 10, 'November' => 11, 'December' => 12 }
使用例:
month_numbers['December']
→ 12
(associative array)
Hash
(ハッシュ){
と }
)で囲む (配列は
[
と ]
)=>
で結ぶ (配列では不要){ }
(又は Hash.new
)使用 (値の取出し):
一般的な形: ハッシュ[キー]
具体例: month_numbers['December']
変更 (値の変更又は要素の追加):
一般的な形: ハッシュ[キー] =
値
具体例: month_numbers['December'] = 12
要素の削除:
一般的な形:
ハッシュ.delete(キー)
具体例: month_numbers.delete('December')
要素 (キー) の存在:
ハッシュ.has_key?(キー)
すべてのキー: ハッシュ.keys
(→
配列)
すべての値: ハッシュ.values
(→ 配列)
具体例: Translation = { 'height' => '身長', 'normal' =>
'普通体重', ...}
提出: 12月17日 (金曜日) 22:00 までに Moodle に
famous_hash.rb
のファイル名で投稿
以前作った famous_method.rb
(正解例でも可能)
に連想配列を追加して、出力する文字列 (height, weight, normal, obese
など)
を日本語に置き換えるようなプログラムを作成しなさい。
ヒント:
class Person
の前に連想配列を
Translation
という名前の定数で用意#{Translation[...]}
で output_line
メソッド内で使用発展問題: 複数の言語が使えるようにする (ハッシュのハッシュ)
提出: 12月17日 (金曜日) 22:00 までに Moodle に
words.rb
のファイル名で投稿
英語などの文書の入力 (<
ファイルまたは直接入力)
を行と単語に分解し、それぞれの単語の数を数えて、アルファベット順にきれいに出力しなさい。
入力例: Ottos Mops, President Obama's speaches
ヒント: 文字列の delete
メソッドで
,.!?;:'"
など記号を取り除く
発展問題: 単語の頻度順で出力