キリンめも(技術)

記事を書いています #rails #swift #JS #UE4 #unity

Railsの会 16日目「CSS指定 /クラス/initialize」

今回の範囲

f:id:geta206:20170329161843p:plain

ハッシュとシンボル

書き方
その1

 {"hoge" => "hogehoge"}

その2

 {huga: "fugafuga"}  #1.9以降使える
=> と :の違いは?

文字列とシンボルの違い

具体的な話

文字列だと宣言などを繰り返し行った時数値の割り当てが変わる。
1回目 1111111111
2回目 1111111122
シンボルの場合 宣言したとき同じ数値が割り当てられる。
1回目 12345
2回目 12345

ハッシュとは =>

キーを使って、複数のオブジェクトへの参照を
まとめて管理することができるオブジェクト。
ハッシュロケット(=>)の書き方は古いらしい。
それでも=>の書き方を使う理由は、教科書などがハッシュロケットで書くのは=>が全てのversionに対応しているから記述しているらしい。

シンボルとは :

: hoge の書き方をしているものをシンボルという。
文字列以外は基本シンボルを使います。

シンボルのメリット

メモリの利用料が文字列に比べ少なくなる。
Ruby on Rails 入門のための知識 1(シンボルとハッシュ) - OnsenとRuby

CSSの指定方法

指定場所: app/assets/stylesheets
コード

<%= stylesheet_link_tag "custom", :media => "all" %>

コンストラクタ (initializeメソッド)

特殊なメソッド。
クラス内に記述するとオブジェクトを作成した時、
自動で呼び出される。
自動でprivateに設定されます。
戻り値は使われません。
クラスにinitializeメソッドがない時は親クラスから呼び出されます。

呼び方

クラス名.new(引数)


使用例

class Cat
  def initialize(name, color)
    puts "initialize called!"
    @name = name; @color = color
  end
end
 
cat = Cat.new("Tama", "white")

initialize - Rubyリファレンス
Rubyのクラスについてまとめてみた | JavaからのRuby on Rails入門

クラスの継承

class クラス名 < 継承するクラス と指定する

>> class Word < String    # WordクラスはStringクラスを継承する
                                          # 文字列が回文であればtrueを返す
>>   def palindrome?
>>     self == self.reverse    # selfは文字列自身を表します
>>   end
>> end
=> nil

組み込みクラスの変更

組み込みクラスを使用する時は、変数が絶対に空白にならないようにしたいときです。(ユーザー名など)
rubyでは組み込みクラスの拡張ができる。


組込みクラスの変更 - Qiita
【26日目】【1日20分のRailsチュートリアル】基本クラスの拡張とコントローラクラスの学習&Userクラスの作成 - ぞえの技術めも

super classとは

今使用しているクラスはどれを継承しているのかを調べる(クラスの階層を調べる)
stringクラスの継承階層(イメージ図)↓

f:id:geta206:20170329170740p:plain

調べ方(コマンド) 例

>> controller = StaticPagesController.new
=> #
>> controller.class
=> StaticPagesController
>> controller.class.superclass
=> ApplicationController
>> controller.class.superclass.superclass
=> ActionController::Base
>> controller.class.superclass.superclass.superclass
=> ActionController::Metal
>> controller.class.superclass.superclass.superclass.superclass
=> AbstractController::Base
>> controller.class.superclass.superclass.superclass.superclass.superclass
=> Object