railsチュートリアル第４章　文字列とメソッド

##文字列とメソッド
Ruby を学ぶためのツールとして、主にRailsコンソールを使っていく
Railsアプリケーションを対話的に操作するためのコマンドラインツール
クラウドIDEとは何か？　多分cloud9だと思う。

environmentsより上に行ったあと

```
$ nano ~/.irbrc
```

Ctrl-Xと押してnanoエディタから離脱します。ファイルを保存するかどうか訊かれるので、yキーを押して~/.irbrcファイルを保存

```
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false
```
どうすればいいかわからなかったのでsample_appまで降りて```rails console```を起動
デフォルトでは、コンソールはdevelopment（開発）環境という
Ctrl-Cを押してコンソールから強制的に抜け出すこと
Ctrl-Dを押して正常にコンソールを終了させることもできます
Ctrl-Pまたは上矢印キーで以前に実行したコマンドを再利用

###文字列
文字列（string） は、Webアプリケーションにおいておそらく最も重要なデータ構造
ここで入力したものは文字列リテラルと呼ばれ
####文字列の結合

```rb
>> "foo" + "bar"    # 文字列の結合
=> "foobar"
```
####式展開
＃{}という特殊な構文を使います 。

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

####代入

```rb
>> first_name = "Michael"
=> "Michael"
>> last_name = "Hartl"
=> "Hartl"
>> first_name + " " + last_name    # 苗字と名前の間に空白を入れた結合
=> "Michael Hartl"
>> "#{first_name} #{last_name}"    # 式展開を使って結合 (上と全く同じ)
=> "Michael Hartl"
```

####出力

```rb
>> puts "foo"     # 文字列を出力する
foo
=> nil
```
戻り値には「文字どおりの無」であるnilを返します。nilは「何にもない」ことを表すRubyの特別な値

```
>> print "foo"    # 文字列の画面出力 (putsと同じだが改行がない)
foo=> nil
```
改行する

```rb
>> print "foo\n"  # puts "foo" と等価
foo
=> nil
```
####シングルクォート内の文字列
シングルもダブルも実質的に変わらないらしい。
しかしシングルでは式展開はできない。

```rb
>> 'foo'          # シングルクォートの文字列
=> "foo"
>> 'foo' + 'bar'
=> "foobar"
```

```rb
>> '#{foo} bar'     # シングルクォート内の文字列では式展開ができない
=> "\#{foo} bar"
```
ダブルクォート文字列を用いた文字列で#のような特殊な文字を使いたい場合は、この文字をバックスラッシュでエスケープ（escape）する必要がある。
シングルクォートは、入力した文字をエスケープせずに「そのまま」保持するときに便利
シングルクォートで文字列を囲めば、簡単にバックスラッシュ文字のような特殊文字をそのまま変数に含める。

```rb
>> '\n'       # 'バックスラッシュ n' をそのまま扱う
=> "\\n"
```

```rb
>> 'Newlines (\n) and tabs (\t) both use the backslash character \.'
=> "Newlines (\\n) and tabs (\\t) both use the backslash character \\."
```
シングルクォートで囲むと文字列で特殊文字を使うことができる
ダブルクォートで文字列を囲む場合はバックスラッシュを前につけなければならないらしい。

####演習
city変数に適当な市区町村を、prefecture変数に適当な都道府県を代入
変数と式展開を使って、住所の文字列を作れ。出力にはputsを使え。
半角スペースをタブに置き換えろ

```rb
>> city = "aa"
=> "aa"
>> prefecture = "bb"
=> "bb"
>> puts = "#{prefecture}県 #{city}市"
=> "bb県 aa市"
```
ダブルをシングルにしてみるとどうなるか？
予想ではそのままの文字列になると考えている。

```rb
>> puts = '#{prefecture}県 #{city}市'                                      
=> "\#{prefecture}県 \#{city}市"
```
予想通りになった。

###オブジェクトとメッセージ受け渡し
Rubyでは、あらゆるものがオブジェクトです。文字列やnilですらオブジェクト
「オブジェクトとは何であるか」という直感を養う必要があります。
オブジェクトとは（いついかなる場合にも）メッセージに応答するものです。

```rb
>> "foobar".length        # 文字列に "length" というメッセージを送る
=> 6
```
この場合は６がオブジェクトになるらしい
####emptyメソッド
true,falseの返事が返ってくる

```rb
>> "foobar".empty?
=> false
>> "".empty?
=> true
```
####if
```rb
>> s = "foobar"
>> if s.empty?
>>   "The string is empty"
>> else
>>   "The string is nonempty"
>> end
=> "The string is nonempty"
```
####elsif
条件文を2つ以上含めたい

```rb
>> if s.nil?
>>   "The variable is nil"
>> elsif s.empty?
>>   "The string is empty"
>> elsif s.include?("foo")
>>   "The string includes 'foo'"
>> end
=> "The string includes 'foo'"
```
####&&（and）||（or）、!（not）

```rb
>> x = "foo"
=> "foo"
>> y = ""
=> ""
>> puts "Both strings are empty" if x.empty? && y.empty?
=> nil
>> puts "One of the strings is empty" if x.empty? || y.empty?
"One of the strings is empty"
=> nil
>> puts "x is not empty" if !x.empty?
"x is not empty"
=> nil
```
Rubyでは、あらゆるものがオブジェクトです。
####nilもオブジェクト

```rb
>> nil.to_s
=> ""
```
 nil に対してさまざまなメソッドを渡せることを確認

```rb
>> nil.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
>> nil.to_s.empty?      # メソッドチェーンの例
=> true
```
####nilメソッド
nilかを確認するメソッド

```rb
>> "foo".nil?
=> false
>> "".nil?
=> false
>> nil.nil?
=> true
```
####if
ifがtureの時に実行される

```rb
puts "x is not empty" if !x.empty?
```
####unless
unlessでもifの代わりができる

```rb
>> string = "foobar"
>> puts "The string '#{string}' is nonempty." unless string.empty?
The string 'foobar' is nonempty.
=> nil
```
オブジェクトを2回否定どんなオブジェクトも強制的に論理値に変換
####!!　二重否定
```rb
>> !!nil
=> false
```

```rb
>> !!0
=> true
```