LoginSignup
2
0

More than 3 years have passed since last update.

Rubyの復習1

Last updated at Posted at 2020-11-04

本投稿の目的

Rubyの復習の自分用の議事録です。
以前,inputした知識のうち忘れたことを羅列して書いていきます。
そのため,自己満で書いただけなので脳に叩き込めたら消す予定です。


学習に使った教材

Udemyの "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう" を教材として使用しました。

購入目的は以下の2つです。
①Cloud9上でRailsアプリを作ること
②デプロイすること


①配列とハッシュ

○配列

qiita.rb
a = [変数1,変数2,変数3]

・添字は0から始まる
・変数2を取り出すには a[1]

○空判定

qiita.rb
a.empty

⇨判定が空なら true

○検索文字判定

qiita.rb
a.include?('検索文字')

⇨検索文字を配列に含む場合はtrueを返す

○連続値の配列への格納

qiita.rb
aa = (0..100).to_a

⇨指定したn個以上の情報を配列に格納

○配列への操作

qiita.rb
配列名.pop
配列名.shift
配列名 << 
配列名.join (' ')
配列名.sort!.reverse!

上から順に
・一番最後の値を消去
・一番最初の値を消去
・一番最後に値を追加
・添字ごとに空白一個あけで結合
・配列の中身を反対にする

○ハッシュ

キーを指定することで,2変数の配列を作れる

qiita.rb
ハッシュ = {'キー1' => 1,'キー2' => 2,'キー3' => 3}
qiita.rb
puts ハッシュ['キー1']
ハッシュ['キー4'] = 4
ハッシュ['キー1'] = 1
ハッシュ.delete('キー1')     

上から順に
・値の取り出し
・値の追加
・値の上書き
・値の削除

○シンボル

ソースコード 上では文字列
内部では整数として扱われる
⇨ハッシュ内部のアクセスが早くなる

qiita.rb
ハッシュ = {キー1 : 1,キー2 : 2,キー3 : 3}
qiita.rb
puts ハッシュ[:キー1]   
ハッシュ[:キー4] = 4  
ハッシュ[:キー1] = 1`     
ハッシュ.delete(:キー1)      
ハッシュ.has_key?(:探したいキーn)  
ハッシュ.size                                         

上から順に
・値の取り出し
・値の追加
・値の上書き
・値の削除
・探したいキーを持っているか?確認
・いくつキーを持つか?確認

②each配列とeachハッシュ

○each配列

qiita.rb
numbers = [1,2,3,4,5]
numbers.each do |number|

<別の記載方法>

qiita.rb
numbers = [1,2,3,4,5]
numbers.each { |number| puts number}

○eachハッシュ

qiita.rb
scores = {luke: 100,jack: 90,robert: 70}
scores.each do |k,v|
     puts v
     puts "#{k},#{v}"
end

③クラス作成

qiita.rb
class Car

  def initialize(name)
    puts 'initialize'
    @name = name
  end

  def hello
    puts "Hello! I am #{@name}."
  end
end

boxter = Car.new('boxter')
boxter.hello

carrera = Car.new('carrera')
carrera.hello

【出力結果】

initialize
Hello! I am boxter

initialize
Hello! I am carrera

【解説】
・class作成時の変数は1文字目は大文字
・インスタンス作成時に指定した引数をinitialzeの戻り値に指定できる
・インスタンス作成 とは,クラスを動かす際のcloneの作成のようなもの
 ⇨宣言時は 変数 = クラス名.new()
・def initialize はインスタンス作成時に実行される処理
・インスタンス変数は,initialize内で定義した@変数
 ⇨Class内でどこでも使用可能

④メソッドのオブジェクトの取得と書き換え

○取得時

qiita.rb
class Car

  def initialize(name)
    @name = name
  end

  def name
    @name
  end
end

boxter = Car.new('boxter')
puts boxter.name

【出力結果】

boxter

【解説】
○def name
・class外から@nameへ読み取り可能にするためのメソッド
・これを'インスタンスメソッド'と呼ぶ(ゲッターメソッド)
・(インスタンス変数(@name)はクラス外からアクセスできない)

○puts boxter.name
・ インスタンス作成後の.nameメソッドを実行したことでアクセス可能
・.nameメソッドに対応する値@nameを取得可能

○書き換え時

qiita.rb
class Car

  def initialize(name)
    @name = name
  end

  def name
    @name
  end

  def name = (value)
    @name = value
  end

boxter = Car.new('boxter')
boxter.name = '718boxter'
puts boxter.name

【出力結果】

718boxter

【解説】
○def nama = (value)
・インスタンス作成時は @name = 'boxter'
・.name = (value)メソッドによって@name = '718boxter' へ書き換えた

⑤アクセサメソッド (attr_accessorメソッド)

・下記3パターンの記述を全て1行で実現可能にするメソッド
・他言語ではプロパティーと呼ばれる

○取得&書き換え時

元々のコード

qiita.rb
def name
  @name
end

def name = (value)
  @name = value
end

アクセサメソッド適用時

qiita.rb
attr_accessor :name 

○取得のみの時

元々のコード

qiita.rb
def name
  @name
end

アクセサメソッド適用時

qiita.rb
attr_reader :name 

○書き換えのみの時

元々のコード

qiita.rb

def name = (value)
  @name = value
end

アクセサメソッド適用時

qiita.rb
attr_writer :name 

⑥クラス変数

・Class内の別のメソッドごとに共通使用する変数

qiita.rb
class Num
  @@num=0

  def num
    puts @@num
  end

  def decrement
    @@num += 1
  end
end

number = Num.new
number = num
number = decrement
number = num
number = decrement
number = num
number = decrement

【出力結果】
0
1
2

【解説】
・@@num は numメソッド と decrementメソッド で値を保持したまま使用可能
・(メソッドを行き来できる)
・開始文字は@@2文字から始める

⑦クラスメソッド

・インスタンスなしで直接呼び出せるメソッド

qiita.rb
class Car

  def self.info
    puts "Test"
  end

end

Car.info

【解説】
・self.メソッド名 としてメソッドを記述する
・Car.info のようにモデル名.メソッドとして使用可能
・(インスタンスメソッドとの違いは,インスタンス名.info としないところ)

○複数のメソッドを一度にクラスメソッドにする場合

qiita.rb
class Car

  class << self
    def info
      puts "Test1"
    end

    def inform
      puts "Test2"
    end

  end
end

Car.info
Car.inform

【解説】
・クラスメソッドにしたい各メソッドを class << self で囲む
・囲んだ中に,各メソッドを定義


2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0