勉強ログ ~13/55~
本日のメンタリングも恙なく終了。
TechAcademyで勉強を始めてもう2週間になりますが、やはり週2回メンタリングで進捗の報告があるおかげで、毎日少しでも「やらなくちゃ」という気分になります。
それでもカリキュラムがRubyの文法部分に入ったことで、これまでよりも内容が難しくなり、いよいよスケジュールに余裕がなくなってきました。
メンタリングでもアドバイス頂きましたが、現時点では文法を完全に理解することを目指さず、とりあえず見たことがある程度で次に進むようにしなければダメなようです。
期間は8週間なので比較的余裕があると構えていると、後半の課題で苦しむことになりそうなので、ここらで再度気合を入れなおして勉強する必要がありそうです。
(とかいってるそばから、ワンピースを見ながら勉強している私...)
時間:14:40~16:00、17:30~18:00、19:00~19:30、21:00~23:00
メモ:
・インスタンスの初期化
class Shop
def initialize(name)
@name = name
end
end
「@name」はインスタンス変数。インスタンス毎に値の異なる変数。
・インスタンス変数の参照(getter)
インスタンス変数はインスタンスの外(クラスetc)から直接参照することはできない。
オブジェクト内部にアクセスするためには、「インスタンスメソッド」を定義する
必要がある。
(インスタンス変数が「@name」の場合)
def name
@name
end
呼び出し
shop = Shop.new("Test")
shop.name
→インスタンス変数の値が参照できる。
・インスタンス変数の外部からの変更(setter)
def name=(value)
@name = value
end
→メソッド名を「インスタンス変数名=」にする。
・インスタンス変数を参照、変更するメソッド(attr_accessor)
attr_accessor :name ←シンボル記法でインスタンス変数を指定。
→C#のgetter、setterの役をするプロパティ的なもの
インスタンス変数を列挙することも可能。(:name,:description,...)
・クラス変数
@@variable
→クラス内のメソッドで使用するときも@@はついたまま。
・クラスメソッド
def self.クラス名
@@variable
end
クラス単位で定義、実行するメソッドのことをクラスメソッドという。
・インスタンスメソッドの制限
インスタンス内のメソッドを外部から使用できないよう制限したメソッドを
「プライベートメソッド」という。
プライベートメソッドに設定したいメソッド定義の1行前に「private」と記載する。
private
def print_count
puts"count:"sample#{@@count}"
end
→インスタンスからの呼び出しはできないが、インスタンスの初期化時には
実行される。
類似として、同一クラス内であれば使用可能な「protected」という宣言もある。
※privateやprotectedの効果は、宣言以降のすべてのスクリプトに影響する。
・self
@name = name は直接インスタンス変数にローカル変数の値を代入するが、
self.nameではメソッドを介して値を代入している。
使い分け
・インスタンス変数にローカル変数を代入するだけの場合・・・@name = name
・メソッドの何らかの処理で利用する場合・・・self.name = name
・クラスの継承
継承によって、既存クラスの機能に追加機能を実装したクラスを作成することが
可能になる。継承元をスーパークラス、継承して実装したクラスをサブクラスという。
class サブクラス名 < スーパークラス名
処理
end
サブクラスでスーパークラスに存在していたメソッドを上書することを
「オーバーライド」という。
サブクラスのメソッドにおいて、「super」を記載することで、スーパークラスの
メソッドを実行することができる。
・配列データの出力(結合)
配列.join("接続文字")
→配列内のデータを指定した接続文字で区切って1行の文字列として返す。
・モジュール
メソッド等の処理部分のみをまとめたもの。
→インスタンスを作成することはできない。
→継承付加
module モジュール名
処理内容
end
・モジュールの役割
1.名前空間(メソッドや定数、クラス等の管理単位)としての役割
2.Mix-in ・・・ 他のクラスにモジュールを取り込むことができる。
→継承しなくてもモジュールの機能を他のクラスで使用できる。
→クラスを横断して共通の機能を取り込むことができる。
class クラス名
include モジュール名
end