本投稿の目的
Rubyの復習の自分用の議事録です。 以前,inputした知識のうち忘れたことを羅列して書いていきます。 そのため,自己満で書いただけなので脳に叩き込めたら消す予定です。学習に使った教材
Udemyの ["はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。購入目的は以下の2つです。
①Cloud9上でRailsアプリを作ること
②デプロイすること
①配列とハッシュ
○配列
a = [変数1,変数2,変数3]
・添字は0から始まる
・変数2を取り出すには a[1]
○空判定
a.empty
⇨判定が空なら true
○検索文字判定
a.include?('検索文字')
⇨検索文字を配列に含む場合はtrueを返す
○連続値の配列への格納
aa = (0..100).to_a
⇨指定したn個以上の情報を配列に格納
○配列への操作
配列名.pop
配列名.shift
配列名 << 値
配列名.join (' ')
配列名.sort!.reverse!
上から順に
・一番最後の値を消去
・一番最初の値を消去
・一番最後に値を追加
・添字ごとに空白一個あけで結合
・配列の中身を反対にする
○ハッシュ
キーを指定することで,2変数の配列を作れる
ハッシュ = {'キー1' => 値1,'キー2' => 値2,'キー3' => 値3}
puts ハッシュ['キー1']
ハッシュ['キー4'] = 値4
ハッシュ['キー1'] = 値1
ハッシュ.delete('キー1')
上から順に
・値の取り出し
・値の追加
・値の上書き
・値の削除
○シンボル
ソースコード 上では文字列
内部では整数として扱われる
⇨ハッシュ内部のアクセスが早くなる
ハッシュ = {キー1 : 値1,キー2 : 値2,キー3 : 値3}
puts ハッシュ[:キー1]
ハッシュ[:キー4] = 値4
ハッシュ[:キー1] = 値1`
ハッシュ.delete(:キー1)
ハッシュ.has_key?(:探したいキーn)
ハッシュ.size
上から順に
・値の取り出し
・値の追加
・値の上書き
・値の削除
・探したいキーを持っているか?確認
・いくつキーを持つか?確認
②each配列とeachハッシュ
○each配列
```ruby:qiita.rb numbers = [1,2,3,4,5] numbers.each do |number| ``` **<別の記載方法>**numbers = [1,2,3,4,5]
numbers.each { |number| puts number}
○eachハッシュ
scores = {luke: 100,jack: 90,robert: 70}
scores.each do |k,v|
puts v
puts "#{k},#{v}"
end
③クラス作成
```ruby:qiita.rb class Cardef 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内でどこでも使用可能
<h1>④メソッドのオブジェクトの取得と書き換え</h1>
<h3>○取得時</h3>
```ruby: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を取得可能
○書き換え時
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行で実現可能にするメソッド
・他言語ではプロパティーと呼ばれる
○取得&書き換え時
元々のコード
def name
@name
end
def name = (value)
@name = value
end
アクセサメソッド適用時
attr_accessor :name
○取得のみの時
元々のコード
def name
@name
end
アクセサメソッド適用時
attr_reader :name
○書き換えのみの時
元々のコード
def name = (value)
@name = value
end
アクセサメソッド適用時
attr_writer :name
⑥クラス変数
・Class内の別のメソッドごとに共通使用する変数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文字から始める
⑦クラスメソッド
・インスタンスなしで直接呼び出せるメソッドclass Car
def self.info
puts "Test"
end
end
Car.info
【解説】
・self.メソッド名 としてメソッドを記述する
・Car.info のようにモデル名.メソッドとして使用可能
・(インスタンスメソッドとの違いは,インスタンス名.info としないところ)
○複数のメソッドを一度にクラスメソッドにする場合
class Car
class << self
def info
puts "Test1"
end
def inform
puts "Test2"
end
end
end
Car.info
Car.inform
【解説】
・クラスメソッドにしたい各メソッドを class << self で囲む
・囲んだ中に,各メソッドを定義