読んだ本
ゼロからわかる 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オブジェクトである。
シンボルの特徴は以下の通りです:
同じ名前のシンボルは、メモリ内で一意であり、同じオブジェクトIDを持ちます。これにより、シンボルの比較が非常に高速で行えます。一方、同じ内容の文字列は別のオブジェクトとして扱われるため、比較が遅くなることがあります。
シンボルは不変です。つまり、一度作成されたシンボルは変更できません。これにより、シンボルはハッシュのキーやオブジェクトの属性名など、変更されることが望ましくない場所で使われることが多いです。
シンボルは、メモリ使用量が小さいため、大量の同じ名前の識別子を扱う場合に効率的です。
ハッシュ.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に関して
@@変数
: クラス変数
継承
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 "ファイル名"
: ファイルを読み込む
ライブラリ
- 組み込みライブラリ
- requireメソッドを実行して準備する標準添付ライブラリ
- 使用前にインストールが必要な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!
で破壊的に変更)