Rubyの会16日目「メゾット・範囲演算子」
最近サイコブレイクにはまってます(бвб。)
進捗です。
agenda
- string_message
- split
- ! 破壊的メゾット
- 配列・範囲演算子
- その他の機能
1.string_message
引数をひとつ取り、引数が空かどうかを判定するメッセージを返すメゾットを作ります。
>> if str.empty?
>> "It's an empty string!"
>> else
>> "The string is nonempty."
>> end
>> end => :string_message
>> puts string_message("foobar") The string is nonempty.
>> puts string_message("") It's an empty string!
>> puts string_message It's an empty string!
メゾットの引数を省略することもできる。
def string_message(str = '')
この上記の変数はデフォルトなので書いても書かなくても使用されます。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
2.split 文字列の分割
split('')の中に(’x’)と指定すると x で区切ることができるという意味。
下の例は , で分割される。
文字列
引数patternに文字列を指定した場合は、その文字列を区切り文字とします。
--------------------------------------------------------
3.破壊的メゾット !
Rubyには、非破壊的メゾットと破壊的メゾットがある。
- 破壊的メゾットとは aの状態に影響が及ぼされるもののことをいう。
オブジェクトが変更される。
- 非破壊的メゾットは aに影響がないもの。
オブジェクトが変更されない。
a = "bar"
p a.chop # "ba"
p a # "bar" : 変わらない
p a.chop! # "ba"
p a # "ba" : 変わる
非破壊的メゾット一覧
>> a => [42, 8, 17]
>> a.empty? => false
>> a.include?(42) => true
>> a.sort => [8, 17, 42]
>> a.reverse => [17, 8, 42]
>> a.shuffle => [17, 42, 8]
>> a => [42, 8, 17]
破壊的メゾットの使用例
メゾットの後ろに ! をつけると作れます。
>> a => [42, 8, 17]
>> a.sort! => [8, 17, 42]
>> a => [8, 17, 42]
------------------------------------------------------------------------------------
6.配列・範囲演算子
- 配列 特定の順序を持つ要素リスト
- 範囲演算子 同じかどうかを比較する計算
Ruby ではゼロオリジンを採用しています。(0からスタートする)
>> a = [42, 8, 17] => [42, 8, 17]
>> a[0] # Rubyでは角かっこで配列にアクセスする => 42
>> a[1] => 8
>> a[2] => 17
>> a[-1] # 配列の添字はマイナスにもなれる! => 17
配列要素にアクセスするには角かっこを使用する。
なんと配列の数字を取り出すとき、英単語でも取り出せる…!(衝撃)
>> a # 配列「a」の内容を確認する => [42, 8, 17]
>> a.first => 42
>> a.second => 8
>> a.last => 17
>> a.last == a[-1] # == を使って比較する => true
7.その他の機能
length メゾット 文字の数を数える
>> x = a.length # 配列も文字列と同様lengthメソッドに応答する => 3
>> x == 3 => true
>> x == 1 => false
>> x != 1 => true
>> x >= 1 => true
>> x < 1 => false
sortメゾット 並べ替える
配列ソート(昇順)
a = ["Red", "Red", "Blue", "Green"] p a.sort! ⇒ ["Blue", "Green", "Red", "Red"]
配列ソート(降順)
a = ["Red", "Red", "Blue", "Green"] p a.sort.reverse! ⇒ ["Red", "Red", "Green", "Blue"]
pushメゾット 要素を追加する
>> a.push(6) # 6 を配列に追加する => [42, 8, 17, 6]
>> a << 7 # 7を配列に追加する
=> [42, 8, 17, 6, 7]
>> a << "foo" << "bar" # 配列に連続して追加する
=> [42, 8, 17, 6, 7, "foo", "bar"]
joinメゾット 文字列を統合させる。(splitと逆)
>> a => [42, 8, 17, 7, "foo", "bar"]
>> a.join # 単純に連結する
=> "428177foobar"
>> a.join(', ') # カンマ+スペースを使って連結する
=> "42, 8, 17, 7, foo, bar"
to_a %w 文字や数字の配列に変換する
>> 0..9
=> 0..9
>> 0..9.to_a# 配列でない数字の9にto_aを実行してしまった NoMethodError: undefined method `to_a' for 9:Fixnum
>> (0..9).to_a # 丸かっこを使って明示的に範囲クラスのto_aメソッドを呼ぶ
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2番目のエラーはto_aを呼ぶときは0…9 を (0…9)かっこを追加する必要がある。
文字にも指定できる!!!!!!
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
同様に%w配列が作れます!!
>> a = %w[foo bar baz quux] # %wを使用して文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2] => ["foo", "bar", "baz"]
便利機能 -1 配列の長さを指定できる。
メリット
- 配列の長さがわからなくても配列の最後の要素を指定できる。
- 一度に全てを選択することができる。
>> a = (0..9).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..(a.length-1)] # 明示的に配列の長さを使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9] >> a[2..-1] # 添字に-1を使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]