経緯
初心者である私が2週間Rubyを学習し、学んだ知識をより確実に自分に定着させるために、アウトプット(本記事)するもの。
do ... endと{}
ブロック(*)を使うときは、do ... end と改行をいれて処理していたが、{}で囲ってブロックを作成することが可能。
*コードの塊を「ブロック」として定義し、メソッドに渡して実行する仕組み
numbers = [1, 2, 3, 4]
sum = 0
numbers.each do |n|
sum += n
end
sum #=> 10
を{}を使用して書くと
numbers = [1, 2, 3, 4]
sum = 0
numbers.each { |n| sum += n }
sum #=> 10
$とシンボルを使って簡潔に書く
ブロックを使うメソッドは条件によってはかなりシンプルに書くことができる。以下の条件を満たしている必要がある。
- ブロックのパラメーターが1個だけである。
- ブロックの中で呼び出すメソッドには引数がない。
- ブロックの中では、ブロックパラメーターに対してメソッドを1回呼び出す以外の処理がない。
#このコードは、
['ruby', 'java', 'python'].map { |s| s.upacase } #=> ['RUBY', 'JAVA', 'PYTHON']
#こう書き換えられる
['ruby', 'java', 'python'].map ($:upacase) #=> ['RUBY', 'JAVA', 'PYTHON']
比較の構文
演算子は二つの値を比較するため、連続して使うと意図した通りに評価されない。Ruby では x == y == true と書くと、最初に x == y が評価され、その結果(true または false)が次の比較に使われる。括弧 () を使うと、条件の評価の優先順位を明確にすることができる。
ハッシュと配列とは
違い
要素のコレクションという概念は共通だが、その要素の格納方法とアクセス方法が異なる。
具体的には、ハッシュは、キーと値のペアでデータを格納するコレクションであり、キーを使ってアクセスする。配列は、要素が順序つけられたコレクションであり、インデックスを使って要素にアクセスする。
どのような用途に向いているのか
配列は、重複を許容するデータを扱う、要素の順序が重要な場合に使用する。
具体的例) スケジュールの管理、投票結果等
ハッシュは、キーと値のペアで管理し、特定のデータを迅速に検索する必要がある、または、あるデータが別のデータに関連つけられている場合に使用。
具体的例) ユーザー情報等
モジュール
関連するメソッドや定数などをまとめてグループ化したいだけのときに、手軽に使えて便利、コードを何回も書く必要がなくなる。また、モジュールを利用することで、大規模開発の際に名前の衝突を避けコードの組織や可読性を向上させることができる。これにより、開発者はより効率的に作業でき、保守性の高いコード、クリーンな設計を実現することができる。
# 動物園の名前空間
module Zoo
class Orca
def sound
"シャー(動物園のシャチ)"
end
end
end
# 水族館の名前空間
module Aquarium
class Orca
def sound
"クリック(水族館のシャチ)"
end
end
end
# Zooモジュールからオブジェクトを作成
zoo_orca = Zoo::Orca.new
puts zoo_orca.sound #=> シャー(動物園のシャチ)
# Aquariumモジュールからオブジェクトを作成
aquarium_orca = Aquarium::Orca.new
puts aquarium_orca.sound #=> クリック(水族館のシャチ)
最後に
他の言語と異なる挙動があり、例えば、returnがいらない(最後に評価された式がメソッドの戻り値となる)、改行に ; がいらない等々あるが、直感的に意味を理解しやすい。また、リファレンスが日本語なのも大変ありがたい。引き続き、継続的に学習をしたい。