Rubyを学習しているので、構文をまとめてみた


##### Stringオブジェクト
文字列を扱うオブジェクト。
シングルクオートやダブルクオートで囲った文字列が、stringオブジェクトになる。
文字列の中で式を展開する場合、ダブルクォートにする。変数を文字列内に入れる場合、#{}で囲う。#{}内に式を入れることも可能

```ruby:sample.rb
'文字列' #文字列
"文字列" #文字列

two='に'
"1+1は#{two}" #1+1はに
```

###### クラスメソッドの確認
直接記述できる値をリテラルと呼ぶ。
```ruby:sample.rb
'文字'.class #String
```

リテラルで書く以外にstringクラスからオブジェクト生成する方法として、newメソッドを書く。
```ruby:sample.rb
String.new('文字列')
```
クラスからオブジェクトを生成する一般的な表現。
文字列や数字などリテラルで表現できるものはnewを使わない。


###### 文字変換
```ruby:sample.rb
#小文字から大文字変換
String.upcase
String.upcase()　#基本的には()は省略する

#大文字から小文字変換
String.downcase
```

###### 文字列の切り出し
```ruby:sample.rb
#引数の1文字目を開始、引数の2文字目を切り出す個数
String.slice(0,3)
```

###### 文字数確認
```ruby:sample.rb
#エイリアス(別名)でいくつか定義されている
String.size(String.count、String.length)
```

###### 型変換
```ruby:sample.rb
#別クラスのオブジェクトに変換する場合
"100".class #String
"100".to_i #Integer
"100".to_i.class #Integer
"100".to_f #float
```

###### メソッドの確認
```ruby:sample.rb
#どのようなメソッドを使用できるか確認
"string".methods
```

###### 文字追加
```ruby:sample.rb
#文字連結
"い" + "あ"　#いあ

#文字列の末尾に文字列追加
"い" << "あ"　#いあ

#変数を使用
str = "文字列の"
str << "連結"　#文字列の連結
str << "です"　#文字列の連結です
str　#文字列の連結です
```

プラスと「<<」の違い
<<は変数の中身の文字列も変更される。プラスは変数の中身の文字列は変更されない。
```ruby:sample.rb
str + "プラス"　#文字列の連結ですプラス
str　#文字列の連結です
```



###### symbol
シンボルの用途は、ハッシュのキーで使用される
```ruby:sample.rb
#文字列とシンボルの違い
#シンボルを作成するには文字列の後にコロンを付ける。
:name
:name.class #symbol

#ソースコード上では文字列のように扱われるが、内部で整数として扱われる
#同じシンボルであれば、同じオブジェクトidとなる
sym1=:str
sym2=:str
sym1.object_id #983523
sym2.object_id #983523
```


###### 数値メソッド
```ruby:sample.rb

#integer,float,
1.class #Integer
2.4.class #float

.round
.ceil
.floor
```

###### 繰り返し(指定数)
```ruby:sample.rb
3.times #Enumeratorメソッドを生成、指定回数同じ処理を繰り返すことができる
```

###### 繰り返し
ブロックとは、メソッドの呼び出しの際に渡すことのできる処理のかたまり。
rubyではFor文を余り使用しない代わりにdo～endを使用する。

```ruby:sample.rb
#doからendまでがひとかたまりの処理でこれをブロックと言う。
3.times do |i|
    puts i    #0 1 2 3
end

#下記でも同義
#{}の中は単語間を1文字スペース開けるのが慣例
3.times { |num| puts num }
```

###### 配列
アレイ(リスト)について、[]で空のリストを作成。
array.pushでリストに要素を追加。<<でも追加できる。
```ruby:sample.rb
arr = [] #[]
arr.push('一つ目') #["一つ目"]
arr << '二つ目' #["一つ目", "二つ目"]

#%w記法の場合、文字をシングルクォートで囲う必要がなく、各文字をカンマで区切る代わりに
#スペースで区切る。小文字のwはシングルクォート、大文字のWはダブルクォートの意味。
['文','字'] #["文", "字"]
%w[文 字] #["文", "字"]

#シンボルの場合、%iを使用する。
%i[a b c] #[:a, :b, :c]

#アレイオブジェクトのeachメソッド
%w[あ い う].each do |str|
    puts str    # ["あ", "い", "う"]
end

#アレイオブジェクトのmapメソッド
%w[あ い う].map {|str| "(#{str})" }
# ["(あ)", "(い)", "(う)"]

```

###### ハッシュ
```ruby:sample.rb
#ハッシュオブジェクト、キーバリューで表現できるオブジェクト
#他の言語では辞書型(python)、連想配列型(PHP)と呼ばれるデータ構造
user2 = {id: 2, name: '二浪'}　{:id=>2, :name=>'二浪'}
```


###### コメントの書き方
```ruby:sample.rb
#以降がコメント化される
#*****


#=begin～=endまでがコメントアウトされる
=begin
puts "コメント内の為表示されない"
=end

#ヒアドキュメント
#EOSを使用する,EOS：End of stringの略
#EOSの部分は他の文字でも良い(例:TEXT)

string = << EOS
    長い
    文章
    が
    続きます
    #{1 + 1}
EOS
puts string
```

###### 例外処理
```ruby:sample.rb
#例外が発生しそうな場所をbegin～rescueで囲う。
#rescue～endは例外が起きた場合のみ実行される。

begin
    val=10/0
    puts val
rescue
    puts '0で割ることはできない'
end

#pメソッドはオブジェクトをわかりやすい文字列で出力してくれるものでデバック時によく使用される。
rescue => e
    p e
end

#backtraceメソッドは、何行目のどういう場所でエラーが出たか教えてくれる
rescue => e
    p e.backtrace
end

#full_messageメソッドは、backtraceよりもより詳細情報を表示する
rescue => e
    p e.full_message
end

#例外別に分ける
rescue ZeroDivisionError => e
    puts '0で割ることができませｎ'
rescue => e
    puts 'その他のエラー'
end
puts '終了'

#rescue内でretryを実行する場合
num=0
begin
    p 10/num
rescue ZeroDivisionError => e
    p e
    num=2
    retry
end
puts '終了'
#retryは無限ループにつながる可能性があるので、使用する場合は注意が必要

#raiseは任意のエラーを発生させることができる
raise ZeroDivisionError

#スタンダードエラーを継承させることもできる。
class MyError < StandardError; end
begin
    raise MyError

#例外の発生に関わらず実行するensureがある
begin
    puts'例外なし'
rescue => e
    p e
ensure
    puts '終了'
end
```