「3ステップでしっかり学ぶRuby入門」の感想・備忘録2

スポンサーリンク
「3ステップでしっかり学ぶRuby入門」の感想・忘備録1の続き

主な内容

Enumerableモジュール

配列やハッシュに組み込まれているモジュール(メソッド群)

  • mapメソッド
    各要素を処理して新しい配列を返す。
    例)
    arr = [1, 2, 3].map do |i|
    i * 2
    end
  • selectメソッド
    条件に一致したものだけの配列を返す。
    例)
    arr = [1, 2, 3].map do |i|
    i % 2 == 0
    end

splitとjoin

p '1,2,3'.split(',')
p [1, 2, 3].join(',')

インスタンスメソッドの呼び出し方法

  1. obj.hoge(引数)
  2. obj.hoge ブロック
    例)
    obj.hoge { |var|
    # 処理
    }
  3. obj 演算子 引数
    例)
    1 + 2
    これは1.+(2)ともかける

メソッド定義

def add(x, y)
    x + y
end
# 呼び出しは定義より後でなければならない

キーワード引数

デフォルト引数をハッシュ形式で定義すると、呼び出し時にキー名で指定する必要があるため可読性が上がる。

def calc_tax(price, tax_rate:0.08)
    (price * tax_rate).to_i
end
puts calc_tax(100, tax_rate:0.05)
# puts calc_tax(100, {:tax_rate => 0.05})と同じ

引数を配列として受け取る

def calc_tax(*values)
    (values[0] * values[1]).to_i
end
puts calc_tax(200, 0.08)

クラス

class クラス名
  # コンストラクタ
  def initialize
  end

  # publicメソッド
  def method1
  end

  # クラスメソッド
  def self.method2
  end

  private # 以降すべてプライベートメソッド
    def method3
    end
end

# インスタンス生成
クラス名.new

# クラスメソッド実行
クラス名.method2

クラスの変数

class Hoge2
  # 定数
  TAX_RATE = 0.08
  # クラス変数
  @@age = 30

  # publicメソッド
  def method1
    # インスタンス変数
    @name = 'tanaka'
    puts @name
    puts @@age
    @@age = @@age + 1
  end

  # クラスメソッド
  def self.method2
    puts @@age
  end
end
hoge2 = Hoge2.new
hoge2.method1
Hoge2.method2
puts Hoge2::TAX_RATE

※クラスインスタンス変数というものがあるので注意
https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

継承

クラス名 < 親クラス名
例)
class Dog < Animal end

例外補足

begin
  # 処理
rescue NameError => e
  # 例外発生時の処理
ensure
  # 必ず実行される処理
end

※すべての例外を補足する場合はrescure => e
※メソッド全体が例外発生の対象となる場合はbeginを省略可能

モジュール

メソッド定義をまとめたもの。
インスタンスメソッドとしてクラスに組み込む場合はinclude、クラスメソッドとして組み込む場合はextendを使う。

module MyModule
  def echo_hello
    puts 'hello'
  end
end

class ModuleTest
  include MyModule
  extend MyModule
end

module_test = ModuleTest.new
module_test.echo_hello
ModuleTest.echo_hello

標準ライブラリ

date, open-uri, jsonなど。

require 'date'
today =  Date.today
puts today.day

require 'open-uri'
file = open('https://yahoo.co.jp')
puts file.read
file = open('./Study.iml')
puts file.read
# Kernelモジュールのopenメソッドがオーバーライドして拡張される

ファイル操作

file = open('./open_test.txt', 'w')
file.puts 'abcd'
file.close

file = open('./open_test.txt', 'r')
puts file.read
file.close

# ブロックを渡した場合、closeは不要。
open('./open_test.txt', 'w') do |f|
  f.puts('hello')
end
File.new (Ruby 3.3 リファレンスマニュアル)
path で指定されるファイルをオープンし、] オブジェクトを生成して 返します。

正規表現

matches = 文字列.match(/パターン/)
マッチしたらMatchDataオブジェクト(配列のようにmatches[1]などで参照可能)、マッチしなかったらnil、を返す。
matches[1]、matches[2]は特殊変数$1、$2でもマッチした文字列を取得可能。

/パターン/ =~ 文字列はマッチした位置を返す。
一致しない場合はnil。
-(ハイフン)は[]の中で使用される場合だけ特別な意味を持つ。[]以外ではエスケープは必要ない。
matches = '090-1234-5678'.match(/([0-9]{3})-([0-9]{4})-([0-9]{4})/)

正規表現による文字列置換

文字列.gsub(/パターン/, 文字列)
例)
puts 'アイウエオ'.gsub(/アイ/, 'あい')
※gsubはすべて置換する。subだと最初にマッチしたものだけ

コメント