セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

ruby チュートリアル 4章 メモ

//

pry

テストコードでバックするときに導入しました。確認したいコードの手前にbinding.pryと書くとテストコンソールでブレークできる。そこでpp response.bodyと打てばレスポンスの中身を確認できるので、デバッグにとても便利。ちなみにquitを入力すればテストが続行される。

文字列の式展開

編集に代入した文字列を文字列中で使用できる。3章のテストコードを書く際にすでにできていた。

>> first_name = "Michael"    # 変数の代入
=> "Michael"
>> "#{first_name} Hartl"     # 文字列の式展開
=> "Michael Hartl"

ダブルクォートとシングルクォート

' '内では式展開が行われない。" "では行われる。

[5] pry(main)> foo= "aa"
=> "aa"
[6] pry(main)> '#{foo}'
=> "\#{foo}"
[7] pry(main)> "#{foo}"
=> "aa"

rubyの基礎?

  • Rubyはあらゆるものがオブジェクト。オブジェクトはメッセージに応答できる。
[19] pry(main)> "foobar".length
=> 6
[20] pry(main)> "foobar".empty?
=> false


- Rubyではbooleanを返すメソッドの名前の末尾に?をつける。 - 'nil'もオブジェクトで、nilが'nil'かを聞けるメソッドもある

nil.nil?


- !!(バンバン)演算子は二重否定になり、値が強制的にbooleanになる。 - rubyのメソッドはデフォルトでメソッド内で最後に評価された式の値が自動的に返される。(returnを書いても普通に返せる) - モジュールは関連したメソッドをまとめる方法。includeメソッドを使用してミックスインする。railsApplicationHelperモジュールは自動的に読まれている。 - 破壊的メソッドは、配列等の順番を変更してしまうメソッドで、末尾に!がつく。

[78] pry(main)> a
=> [1, 2, 3, 4, 5]
[79] pry(main)> a.reverse
=> [5, 4, 3, 2, 1]
[80] pry(main)> a
=> [1, 2, 3, 4, 5]
[81] pry(main)> a.reverse!
=> [5, 4, 3, 2, 1]
[82] pry(main)> a
=> [5, 4, 3, 2, 1]
  • レンジを表すのに0..9とかける。
[85] pry(main)> a= %w[foo bar baz quux] %wを使うと文字列の配列に変換できる。
=> ["foo", "bar", "baz", "quux"]
[86] pry(main)> a[0..2]
=> ["foo", "bar", "baz"]
  • 配列の範囲を指定するやり方が便利
[93] pry(main)> a[2..(a.length-1)]
=> [2, 3, 4, 5, 6, 7, 8, 9]
[94] pry(main)> a=(0..9).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[95] pry(main)> a[2..(a.length-1)]
=> [2, 3, 4, 5, 6, 7, 8, 9]
[96] pry(main)> a[2..-2]
=> [2, 3, 4, 5, 6, 7, 8]
  • {}またはdo endで囲まれているものがブロック。短いものは{}でまとめて1行で書くのがよい。
  • ハッシュ。連想配列とかディクショナリー型的なもの。並び順が保証されない。定義は以下のように{}を用いる。
user = { "first_name" => "Michael", "last_name" => "Hartl" }

またシンボルを用いて以下のようにも書ける。

{ :name => "Michael Hartl" }
{ name: "Michael Hartl" }

-inspectメソッドは要求されたオブジェクトを表現する文字列を返す。pメソッドというショートカットがある

[177] pry(main)> puts :name, :name.inspect
name
:name
=> nil
[181] pry(main)> p :name  # 'puts :name.inspect' と同じ
:name
=> :name
  • rubyはメソッド呼び出し時の丸括弧を使わなくてもよい
# メソッド呼び出しの丸カッコは省略可能。
stylesheet_link_tag('application', media: 'all',
                                   'data-turbolinks-track': 'reload')
stylesheet_link_tag 'application', media: 'all',
                                   'data-turbolinks-track': 'reload'
  • ハッシュがメソッド引数の最後にある場合は、{}を省略することができる。
# 最後の引数がハッシュの場合、波カッコは省略可能。
stylesheet_link_tag 'application', { media: 'all',
                                     'data-turbolinks-track': 'reload' }
stylesheet_link_tag 'application', media: 'all',
                                   'data-turbolinks-track': 'reload'
  • rubyは既存のクラスにメソッドを組み込むことができる。(組み込みクラス)むやみにする必要はない。

アクセサー

その属性に対応するアクセサーは、そのデータのゲッターとセッターを定義してくれる。例えばattr_accessor :name, :emailと定義した場合、インスタンス変数の@name@emailにアクセスできるようになる。クラス内からならどこからでもアクセスできるようになる。

initialize(attributes={})

コンストラクタ。{}をデフォルトで当てているので、空のインスタンスを生成することが可能になる。


require

ruby的にrequireでファイルを呼べばそれを読み込むことができる.

require './example_user'