【WIP】Ruby Sliver学習めも1

Qiita初心者が作成中です！


#文法1
###コメント
- 単行コメント

```ruby:単行コメント
# 単行コメント
# 行末まですべてコメント
```

- 複数行コメント

```ruby:複数行コメント
=begin
複数行コメント
「=begin」と「=end」は行頭に記述する必要がある
=end
```

- 文末コメント

```ruby:文末コメント
__END__
これ以降はコメント
```


###予約語

```ruby:予約語
__FILE__、__LINE__、BEGIN、END、alias、
and、begin、break、case、class、
def、defined?、do、else、elsif、
end、ensure、false、for、if、
in、module、next、nil、not、
or、redo、rescue、retry、return、
self、super、then、true、indef、
unless、until、when、while、yield
```

###リテラル（数値、真偽値、文字列、文字、配列、ハッシュ等）
#####数値
- 2進数　→　0b【数値】

```ruby:2進数
irb(main):001:0> 0b1
=> 1
irb(main):002:0> 0b2
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):2: numeric literal without digits)
irb(main):003:0> 0b10
=> 2
irb(main):004:0> 0b11
=> 3
irb(main):005:0> 0b12
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):5: syntax error, unexpected tINTEGER, expecting end-of-input)
```

- 8進数　→　0【数値】もしくは0o【数値】

```ruby:8進数
irb(main):001:0> 01
=> 1
irb(main):002:0> 07
=> 7
irb(main):003:0> 08
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):3: Invalid octal digit)
irb(main):004:0> 010
=> 8
irb(main):005:0> 011
=> 9
irb(main):006:0> 017
=> 15
irb(main):007:0> 018
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):7: Invalid octal digit)
irb(main):008:0>
irb(main):009:0> 0o1
=> 1
irb(main):010:0> 0o7
=> 7
irb(main):011:0> 0o8
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):11: Invalid octal digit)
irb(main):012:0> 0o10
=> 8
irb(main):013:0> 0o17
=> 15
irb(main):014:0> 0o18
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):14: Invalid octal digit)
```
- 10進数　→　【数値】 もしくは 0d【数値】

```ruby:10進数
irb(main):001:0> 1
=> 1
irb(main):002:0> 10
=> 10
irb(main):003:0> 11
=> 11
irb(main):004:0> 0d1
=> 1
irb(main):005:0> 0d10
=> 10
irb(main):006:0> 0d11
=> 11
```
- 16進数　→　0x【数値】

```ruby:16進数
irb(main):001:0> 0x1
=> 1
irb(main):002:0> 0x9
=> 9
irb(main):003:0> 0xA
=> 10
irb(main):004:0> 0xF
=> 15
irb(main):005:0> 0xG
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):5: numeric literal without digits)
irb(main):006:0> 0x10
=> 16
irb(main):007:0> 0x1A
=> 26
irb(main):008:0> 0x1F
=> 31
irb(main):009:0> 0x1G
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):9: syntax error, unexpected tCONSTANT, expecting end-of-input)
```

- 浮動小数点数　→　e【数値】

　10の【数値】乗。

```ruby:浮動小数点数
irb(main):001:0> 1e1
=> 10.0
irb(main):002:0> 1e2
=> 100.0
irb(main):003:0> 1e3
=> 1000.0
irb(main):004:0> 1e-1
=> 0.1
irb(main):005:0> 1e-2
=> 0.01
irb(main):006:0> 1e-3
=> 0.001
```
- 複素数　→　【数値】i
- 虚数部が有理数の複素数　→　【数値】ri

```ruby:浮動小数点数
irb(main):001:0> 5i
=> (0+5i)
irb(main):002:0> 7.0i
=> (0+7.0i)
irb(main):003:0> 1.8i
=> (0+1.8i)
irb(main):004:0> 5ri
=> (0+(5/1)*i)
irb(main):005:0> 7.0ri
=> (0+(7/1)*i)
irb(main):006:0> 1.8ri
=> (0+(9/5)*i)
```

　10の【数値】乗。

```ruby:浮動小数点数
irb(main):001:0> 1e1
=> 10.0
irb(main):002:0> 1e2
=> 100.0
irb(main):003:0> 1e3
=> 1000.0
irb(main):004:0> 1e-1
=> 0.1
irb(main):005:0> 1e-2
=> 0.01
irb(main):006:0> 1e-3
=> 0.001
```

###文字列リテラル
- ''(シングルクォーテーション)　→　囲われた文字を文字列として扱う。式展開不可。
- ""(ダブルクォーテーション)　→　囲われた文字を文字列として扱う。式展開可。

```ruby:文字列リテラル
irb(main):001:0> puts 'aaa #{1+1}'
aaa #{1+1}
=> nil
irb(main):002:0> puts "aaa #{1+1}"
aaa 2
=> nil
```

###配列リテラル
配列の要素に異なるリテラルを使用可。
「’’」で囲っても「""」扱いになる？

```ruby:配列リテラル
irb(main):001:0> a=[1,'a',234,"bcd",]
=> [1, "a", 234, "bcd"]
irb(main):002:0> b=[,2,3]
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):2: syntax error, unexpected ',', expecting ']')
b=[,2,3]
   ^
irb(main):003:0> b=[1,,3]
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):3: syntax error, unexpected ',', expecting ']')
b=[1,,3]
     ^
```

###ハッシュリテラル
ハッシュ内のキーと値は「=>」や「:」でつなぐことができる。
「:」は文字列リテラルのみ？

```ruby:ハッシュリテラル
irb(main):001:0> {"abc"=>123,"de"=>45,678=>9}
=> {"abc"=>123, "de"=>45, 678=>9}
irb(main):002:0> {"abc":123,'de':45,"678":9}
=> {:abc=>123, :de=>45, :"678"=>9}
irb(main):003:0> {"abc":123,'de':45,678:9}
Traceback (most recent call last):
        1: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
SyntaxError ((irb):3: syntax error, unexpected ':', expecting =>)
{"abc":123,'de':45,678:9}
```

###正規表現リテラル
正規表現 → 「/」で囲まれた文字列。
正規表現に対するオプション → 終りの「/」の直後の文字。

```ruby:正規表現リテラル
/Ruby/i
/my name is #{myname}/o
```
- 正規表現に対するオプション 

　i：正規表現はマッチ時に大文字小文字の区別を行わない。
　o：一番最初に正規表現の評価が行われた時に一度だけ式展開を行う。
　x：正規表現中の空白(改行も含む)を無視する。
　　　また、バックスラッシュでエスケープしない。
　　　「#」から改行までをコメントとみなして無視する(ただし、コメント中に「/」を含めると構文解析に失敗するので注意)

```ruby:正規表現リテラル　オプションx
  /foo        # コメント
  bar/x
```
→これは /foobar/ と同じ。
　空白を含めるには「\」のようにエスケープする。

　　m：複数行モード。正規表現 "." が改行にもマッチするようになる。