山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その6

第5章 ハッシュやシンボルを理解する

久しぶりに Ruby の勉強をします。

ハッシュの使い方

Javaでいうとマップですね。

# ハッシュ
currencies = {
  'japan' => 'yen',
  'us' => 'dpllar',
  'india' => 'rupee'
}

# 要素の追加 既にキーが存在している場合は上書きされる
currencies['italy'] = 'euro'
p currencies

# 要素を取得
p currencies['japan']

 # 引数が一つのときはキーが渡される。二つのときはキーと値
currencies.each do |key, value|
  puts "#{key} : #{value}"
end

# 要素の削除
currencies.delete('japan')

シンボルの使い方

:apple
p :apple.class # Symbol

シンボルは文字列よりも高速に比較ができます。文字列との違いは破壊的な利用ができないことです。

# シンボルをハッシュのキーにする
currencies = { :japan => 'yen', :us => 'dollar', :india => 'rupee'}
p currencies

キーワード引数を用いた関数

def convert_length(length, from: :m, to: :to)
  units = {m: 1.0, ft: 3.28, in: 39.37}
  (length / units[from] * units[to]).round(2)
end

class ConvertLengthTest < Minitest::Test
  def test_convert_length
    assert_equal 39.37, convert_length(1, from: :m, to: :in)
    assert_equal 0.38, convert_length(15, from: :in, to: :m)
    assert_equal 10670.73, convert_length(35000, from: :ft, to: :m)
  end
end

感想

今まで EclipseRuby を使っていたんですが、Eclipse だとキーワード引数を使うとエラーを指摘するんですよね。そのまま実行すると大丈夫なんですが、なんででしょう。

Atom に変えて見たらエラーの指摘はなくなったんですが、"require" を使って別のフォルダのファイルを使おうとしたときに、相対パスを使うとエラーになるんですよね。relative を使っても駄目でした。絶対パスにすれば実行できましたが、気になりますね。

Linux 環境で構築したほうが良いのかな。