Ruby 基礎

リファレンスマニュアル

オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル (Ruby 3.1 リファレンスマニュアル)

最速Rubyリファレンスマニュアル検索! | るりまサーチ

リファレンスから望みのメソッドを探す

  • 「配列の中からランダムに要素を取り出したい」場合、
  1. リファレンスの Array のページを開く
  2. ページ内検索 ⌘ + F で、試しに random と打ってみる
  3. sample メソッドが最初にヒットする
  4. 例文などを見る限り、やりたいことを再現できそうと当たりをつける
  5. 実際に意図した挙動が得られるか確認する

オブジェクトのクラス

p "文字列".class # String

p 1.class # Integer

p [1].class # Array

p ({a: 1}).class # Hash

p :a.class # Symbol

p true.class # TrueClass

p false.class # FalseClass

p nil.class # NilClass

p self.class # Object

定数

  • 定数名 : 先頭の 1 文字目は大文字
    • すべて大文字も可
  • 代入 → 2 回目に代入しようとすると warning が出る
    • 処理は実行されるが警告が出る
Fruit = "りんご"
puts Fruit

Fruit = "みかん"
puts Fruit

# a.rb:5: warning: already initialized constant Fruit
# a.rb:1: warning: previous definition of Fruit was here
りんご
みかん

コメント

# puts "これは無視される"
  • =begin ~ =end で囲んだ範囲はコメントアウトされる
puts 1
=begin
puts 2
puts 3
puts 4
=end
puts 5

# 1
# 5

メソッド

  • メソッドを実行することを、メソッドを呼び出すとも言う
t = "hogehogehoge"
p t.length # 12

l =  [1, 2, 3, 4]
p l.max # 4
fruits = ["apple", "banana", "grape", "peach"]

puts fruits.first # apple
puts fruits.last # peach

デバッグと p メソッド

  • デバッグ
    • プログラムの動作を確認し、バグを修復していくこと
  • p メソッド
    • 変数の中身を確認する時などに使う、デバッグの基礎技術
      • puts : 意図的に中身を表示させる際に使用
      • p : 原則的にデバッグの道具として使う
a = 3 / 2
b = a * 2
puts b # 2 ← 意図した答えは 3
  • 怪しい箇所を p メソッドで検証
a = 3 / 2
p a # 1
b = a * 2
puts b # 2
  • プログラムを修正して、デバッグ用の p メソッドを削除
a = 3.0 / 2
b = a * 2
puts b.to_i # 3

0 で割算 → エラー

p 5 / 0
# a.rb:1:in `/': divided by 0 (ZeroDivisionError)
# from a.rb:1:in `<main>'

メソッドチェーン

  • メソッドを繋げて書く
l = [1, 2, 4]

p l.sum / l.size # 7 / 3 = 2
l = [1, 2, 4]

p l.sum # 7
p l.sum.to_f # 7.0
l = [1, 2, 4]

p l.sum.to_f / l.size # 2.3333333333333335

破壊的メソッド

l = [1, 2, 3, 2, 3, 5]

l1 = l.uniq
p l1
p l
# [1, 2, 3, 5]
# [1, 2, 3, 2, 3, 5]

l2 = l.uniq! # 元の配列が書き換えられる
p l2
p l
# [1, 2, 3, 5]
# [1, 2, 3, 5]

オブジェクト ID の違い

  • 非破壊的メソッドでは、元のオブジェクトを元にした新たなオブジェクトを返す
    • 元のオブジェクトは変わらない
x1 = [1, 2, 3, 2, 3, 5]
x2 = x1.uniq

p x1.object_id # 60
p x2.object_id # 80
  • 破壊的メソッドでは、元のオブジェクトを変更した内容を返す
    • 元のオブジェクトが変わる
y1 = [1, 2, 3, 2, 3, 5]
y2 = y1.uniq!

p y1.object_id # 100
p y2.object_id # 100 ← y1, y2 は同じオブジェクトを指している

元のオブジェクトを残しておく必要性の有無によって、使い分けが変わる

ブロックを渡せるメソッド

ブロックが与えられた場合、ブロックが返した値が重複した要素を取り除いた配列を返します。

Array#uniq (Ruby 3.1 リファレンスマニュアル)

p [1, 3, 2, "2", "3"].uniq                # => [1, 3, 2, "2", "3"]
p [1, 3, 2, "2", "3"].uniq { |n| n.to_s } # => [1, 3, 2]
  • ブロック
    • { |n| n.to_s }
  • ブロックが与えられた場合
    • メソッドの後ろにブロックを書いている場合のこと
      • ブロックを渡す」とも表現する
        • 「メソッドへ」「ブロックを渡している」イメージ
        • uniq メソッドは、ブロックを渡す / 渡さないのどちらでも利用できる