ゼロからわかる Ruby 超入門覚え書き

読んだ本

ゼロからわかる Ruby 超入門 五十嵐邦明,松岡浩平 著

内容覚え書き

基本的な文法

  • .to_iでIntegerへの変換、.to_sでstringへの変換
  • 変数の最初の一文字を大文字にすると定数となる
  • 複数行に渡るコメント
=begin

=end
  • irbをターミナルに打つと1行ずつ実行される(止める時はirb
  • binding.irbでそこの行でストップして、デバッグ可能
  • p: 後ろの変数やオブジェクトを表示するメソッド -.even?: 偶数か判定
  • .odd?: 奇数か判定

基本的なメソッド

if

if

elsif

else

end

後置if(if修飾子)

実行文 if 条件文

条件を満たさないときに実行するif文

unless 条件
 実行文
end

case

case

when

else

end

繰り返し

N回繰り返して実行

N.times do
 実行文
end
N.times  {実行文}

配列

配列の基本

配列を代入する変数は複数形にする

後ろから数えるときは-1, -2

  • 配列.first: 最初の要素
  • 配列.last: 最後の要素

  • 配列.unshift(追加するもの): 配列の先頭に追加

  • 配列.push(追加するもの): 配列の末尾に追加
  • 配列 << 追加するもの: 末尾に追加

  • 配列.shift: 配列の先頭を削除

  • 配列.pop: 配列の末尾を削除
  • 配列.delete_at(n): n番目(n-1番目)を削除して詰める

  • 配列1 + 配列2: 末尾に配列を足す

  • 配列1 - 配列2:配列2にない配列1の要素を取り出す

配列要素の抽出

配列の全要素を変数に一つずつ代入して繰り返す

配列.each do | 変数 |

end
  • break: 繰り返しを途中で終わらせる
  • next: 繰り返しの次の回へ進む

3から5まで繰り返す

(3..5).each do | 変数 |

end

配列で便利なメソッド

  • 配列.sum: 総和を計算
  • 配列,size: 要素数
  • 配列.uniq: 重複しない要素だけ取り出す
  • 配列.uniq!: 元の配列を重複しない要素だけにする(破壊的変更)
  • 配列.uniq{ |n| n.to_s }: 配列をnに代入し、stringに変換した状態で重複しない要素を取り出す

.object_id: オブジェクトID(破壊的変更かどうか判別する時に使える)

mapメソッド: 配列の各要素へ処理を行い、変換してできた要素を持った、新しい配列を作るメソッド

result = [1 2 3].map do |x|
 x * 2
end

resultは[2 4 5]となっている

result = ["abc" , "123"].map(&:reverse): 各要素を逆順にする

ブロックに関して

ブロックはプログラムのかたまりをメソッドに渡すことができる仕組み(引数みたいなもの) call: 変数(&変数)に代入されたブロックを実行

def foo(&b)
 b.call
enf

foo do
 処理
end

ハッシュ

{:キー => 値, :キー => 値}
{キー: 値, キー: 値}

キーはsymbolオブジェクトである。

シンボルの特徴は以下の通りです:

  1. 同じ名前のシンボルは、メモリ内で一意であり、同じオブジェクトIDを持ちます。これにより、シンボルの比較が非常に高速で行えます。一方、同じ内容の文字列は別のオブジェクトとして扱われるため、比較が遅くなることがあります。

  2. シンボルは不変です。つまり、一度作成されたシンボルは変更できません。これにより、シンボルはハッシュのキーやオブジェクトの属性名など、変更されることが望ましくない場所で使われることが多いです。

  3. シンボルは、メモリ使用量が小さいため、大量の同じ名前の識別子を扱う場合に効率的です。

ハッシュ.default = 0でキーがない時の値を設定

新しいハッシュ = ハッシュ1.merage(ハッシュ2): 二つのハッシュをマージ ハッシュ.delete(キー): 指定したキーを削除

ハッシュで繰り返し処理をする

hash.each do | key, value |
 puts "#{key} is #{value}."
end

キーだけを繰り返すには

hash.each_key do | key |
 puts "#{key} is #{value}."
end

ハッシュ.has_key?(キー): キーが存在するか判定

ハッシュでのメソッド

引数のペアを指定するとき

def メソッド名(キーワード1: デフォルト値1, キーワード2: デフォルト値2)

end

メソッド(引数1: オブジェクト1, 引数2: オブジェクト2)

クラス

class クラス名
 def メソッド
 end
end

オブジェクト1 = クラス名.new
オブジェクト2 = レシーバー(オブジェクト1).メソッド

インスタンス

インスタンス: クラスから作ったオブジェクト(特定のクラスに属する)

@インスタンス変数: 同じオブジェクト内であれば複数のメソッドで使用可能 - attr_writer: インスタンス名 インスタンス変数へ代入するメソッドを定義 - attr_reader :インスタンス名: インスタンス変数を戻り値とするメソッドを定義 - attr_accessor :インスタンス名: 上記二つを行う

オブジェクト.instance_variables: オブジェクトが持っているインスタンス変数を全て返す def initialize: オブジェクト作成時に最初に自動的に実行される

クラスメソッド

class test
 def self.クラスメソッド名

 end

※クラスメソッドとインスタンスメソッドでのインスタンス変数は別

selfに関して

  • selfはその場所でメソッドを呼び出す時のレシーバーのオブジェクトを返す
  • インスタンスメソッドのselfはそのクラスのインスタンスになる
  • クラスメソッドでのselfは、そのクラスになる

@@変数: クラス変数

継承

class クラス < スーパークラス
end

.ancectors: 継承関係を辿ることができるer

以下のようにprivateをつけることで、レシーバーを指定してメソッドの呼び出しを禁止できる

class test
 def method1
 end 
 private
 def method2
 end
end

private_class_method: クラスメソッドをprivateにする

モジュール

他のクラスとメソッドを共有したい時に使用

class クラス名
 include モジュール名
end

モジュールメソッドをクラスメソッドにする

class クラス名
 extend モジュール名
end

名前空間

同じクラスを複数の場所で使いたい時に、モジュールを使って名前をつけ分けることを「名前空間を作る」と呼ぶ。 クラス名(モジュール名)::クラス名(モジュール名): クラス名(モジュール名)を指定 インスタンスを作るときはクラスを使い、作らないときはモジュールを使う。

別ファイルのモジュール取り込み

require_relative "ファイル名": ファイルを読み込む

ライブラリ

  1. 組み込みライブラリ
  2. requireメソッドを実行して準備する標準添付ライブラリ
  3. 使用前にインストールが必要なGem

Gem

require "Gem名"

例外処理

begin
 # 例外が発生する可能性がある処理
rescue
 # 例外が発生した時に実行する処理(rescue節)
end

beginとendは省ける

例外発生時に例外オブジェクトが代入される

begin
 # 例外が発生する可能性がある処理
rescue 例外クラス => オブジェクト
 # 例外が発生した時に実行する処理(rescue節)
end

rasie "例外メッセージ": 例外メッセージを発生させる

begin
 # 例外が発生する可能性がある処理
rescue
 # 例外が発生した時に実行する処理(rescue節)
ensure
 # 例外の発生有無に関わらず実行される処理
end

正規表現

  • /正規表現パターン/
  • "文字列".match?(/パターン/): パターンにマッチするものあるか判定
  • /文字列\z/: 末尾が文字列で終わる
  • /\A文字列/: 先頭が文字列で終わる
  • [文字群]: 文字群のどれかとマッチ
  • .: 任意の一文字にマッチ
  • 文字*: 文字が0回以上マッチ
  • 文字+: 文字が1回以上マッチ
  • "文字列".gsub("置換対象", "置換後"): 文字列を置換(gsub!で破壊的に変更)