Rubyを使って初歩的なことを色々やってみる

Rubyとはオブジェクト指向スクリプト言語。ちなみに「ruby -v」でバージョン確認。一行にたくさんの命令を書く場合にはセミコロンで区切る。

print "hello world!" # 終わった後に改行がない
puts "hello world(puts)" # 改行がある
p "hello world(p)" # データの形式がわかるように表示

=begin # 長いコメントを書く場合はこうやって始めることも可能
コメント
コメント
=end


# 変数: データにつけるラベル。変数名はa小文字から始まる
# 定数: 変更されないデータにつけるラベル。定数名はA大文字から始まる

# 変数を使うには適当に名前をつけてあげる。例えば、
msg =
# このときの'='は左辺と右辺が同じという意味ではなく、右辺のモノを左辺に代入するという意味
p "hello world"

msg = "hello world"
# p msg

# 例えば、管理者のメールアドレスを保存したいときに
ADMIN_EMAIL = "xxx@gmail.com"
# 最初は大文字から始まるが、通例として全て大文字で書くことが多い
# 一回定数が定義されているのに ADMIN_EMAIL = "hogehoge"とか再定義すると怒られる

Rubyで扱われるデータ(オブジェクト)について
全てオブジェクトになっている。色々な便利な命令が詰まったデータ型とおぼえておけば最初の方は問題ない。その命令のことをメソッドと呼ぶ。例えば「p "hello world"」という文字列はデータでありオブジェクトである。つまり便利なメソッドを使うことが可能。
メソッドの使い方はデータの後にピリオドでメソッド名で繋げてあげれば動く。ちなみにメソッドはクラスで定義されている。また、文字列はString Classというもので定義されている。例えば文字列の長さを返してくれるlengthというメソッドがある。

p "hello world".length
を実行するとちゃんと11(文字数)で返してくれる。
どういったメソッドがあるかはRubyのコアリファレンスというところで検索可能。

# 数値オブジェクト - Numeric classで定義されている
x = 10 # 整数値
y = 20.5 # 少数値
z = 1/3r # 分数値を使える。ちなみにこれは'Rational (1, 3)'でもオッケー

# Rubyにはアンダーバーを無視する使用なので数が大きい時などは'10_000_000'
# 演算記号は + - * / % **
p x % 3 # 1
p x ** 3 # 1000
p z * 2 # 2/3
# プログラムを書いていると'x = x + 5'なんていう式を書きたいなんてときがある
x += 5 # 自己代入
p x # 15
# 数値も当然オブジェクトなのでメソッドを使える
# 例えば実数yを四捨五入したい場合は、
p y.round #21

# 文字列オブジェクト
# 文字列オブジェクトは""か''を使うことによって使うことができる
x = "hello world" # 変数展開、特殊文字を使える (\nで改行\tでタブ)
y = 'hello world' # 以上のものが使えない

# 例えば、
name = "xxx" #このnameを使いたいときには、
x = "hello world, #{name}"
y = 'hello world, #{name}'
puts x
puts y
# これを出力すると、
hello world, xxx #nameとしてちゃんと出てくるが、
hello world, #{name} #こっちではnameタグがそのまま出てしまう
# 文字列の演算
# 連結するときには+、繰り返しをするときは*を使う。例えば、
puts "hello world" + " xxx"
puts "hello world" * 5 #と打つと
hello world xxx
hello world hello world hello world hello world hello world # と出力される

メソッドについて
リファレンスのページを見ていると同じメソッドなのに!が付いているものとついていないものや?があるものもある。

# ! 破壊的メソッド
# ? 真偽値を返すメソッド true false 論理演算とか条件判定につかう
# 例えば、
s = "xxx" # を大文字にしたいがこれにもupcaseとupcase!の2つがある
puts s.upcase #とやると
XXX # として出力されるはず
# しかしこのupcaseメソッドは一時的なものなのでこの後に
puts s # とやると
xxx # に戻ってしまう
# ここで永久的に表示させる(元ケースを変える)場合には破壊的メソッドが有効

p s.empty? # 空文字がどうかを確かめる #false
#以下を打ってからもう一回行うと、
s = "" #true

配列オブジェクトについて

# 配列というのは複数のデータをまとめることができるデータ型
# i.g. sales_1 sales_2....でもいいのだがまとめてsalesという変数名で管理できたら便利
sales = [5, 8, 4, "xxxx"] # 大カッコで管理したいデータをカンマ区切りで入力していけばオッケー
p sales[] #最初の要素"5"は0番目から1,2....と始まる
p sales[1] # とすると8を取ってきてくれる
# アクセスだけでなく書き換えもできる
sales[1] = 10 #8じゃなくて10だったなんてとき
# 添字の範囲を指定することもできる
p sales[0..2] # とすると0,1,2の数字を引っ張ってきてくれる
# 同様に、
p sales[0...2] #とすると0からと1だけを表示してくれる
p sales[-1] # 最後の要素を指定する
p sales[1, 2] # 1番目の要素から2個分取ってきて欲しいなんてとき
# 添字の要素を使うと複数の要素を一気に書き換えたり挿入したり削除したり出来る
sales = [5, 8, 4]
sales[0...2] = [1, 2] # 0から2未満を以下の要素で書き換えたい
sales[1, 0] = [10, 11, 12] # 1の部分から0個分を次の要素に書き換えようとすると実質的には追加されている
# [5, 10, 11, 12, 8, 4]となる
sales = [5, 8, 4]
sales[0, 2] = [] # 0から2個分を空配列にしたい
# [4]だけになる

p sales.size # 要素数を出してくれる
p sales.sort # 小さい順に並べ替え
p sales.sort.reverse # 大きい順
p sales.push(100) # 配列の末尾に要素を追加。この場合は100
sales << 100 << 102 #これでも末尾に100と102を追加
# 詳しくはArrayクラスを参照

とりあえず今日はここまで進んだので寝ますかな。