【アーカイブ】Ruby文法メモ

見返すことはないとは思うが、Rubyの文法メモが出てきたので、ここに写しておく。
情報は2014年11月16日時点のものなので、あしからず。

# コメント

=begin
コメント
=end


# rubyはすべてオブジェクト

msg = "hello world!" # 変数
MSG = "hello world!" # 定数
print msg # 改行がない
puts msg # 改行がある
p msg # データの種類がわかる

# メソッド
# ! 破壊的メソッド
# ? 真偽値を返すメソッド

puts msg.upcase # HELLO ~
puts msg # hello ~
puts msg.upcase! # HELLO ~
# ポインタを操作してまう
puts msg # HELLO ~
puts msg.empty? # true

# 配列
arr = [5, 8, 4]
p arr[0] # 5
arr[0] = 3
p arr[0] # 3
p arr[0..2] # [3, 8, 4] // 0~2の要素を取ってくる
p arr[0...3] # [3, 8] // 0~2未満の要素を取ってくる
p arr[-1] # 4 # 最後の要素を取ってくる
p arr[1, 2] # [8, 4] # 1番目の要素から2個分

arr[0...2] = [1, 2] # [1, 2, 4]
arr[1, 0] = [10, 11, 12] # [1, 10, 11, 12, 2, 4]
arr[0, 5] = [] # [4]
arr.size # 要素数
arr.sort # 小さい順にソート
arr.reverse # 逆順にソート
arr.sort.reverse # 繋げられる
arr.push(100) # 配列末尾に100を追加
arr << 101 << 102 # 配列末尾に101, 102を追加

# ハッシュ
sales = {"isaka" => 200, "hirata" => 300}
p sales["isaka"] # 200
# シンボルの書き方 (文字列オブジェクトをキーを使う場合、文字列オブジェクトを使うより早い書き方)
sales = {:isaka => 200, :hirata => 300}
p sales[:isaka] # 200
# ruby1.9からできる書き方
sales = {isaka:200, hirata:300}
p sales[:isaka] # 200

sales.size # 要素数
sales.keys # キーのみ返す
sales.values # 値のみ返す
sales.has_key?(:isaka) # そのキーがあるかどうか


# キャスト
a = 10
b = "5"
p a + b.to_i # 15 to_iはint変換 to_sはString変換

# %記法
s = "hel\"lo"
s = %Q(hel"lo) # ダブルクォーテーション
s = %(hel"lo) # ダブルクォーテーション
s = %q(hel"lo) # シングルクォーテーション

a = ["a", "b", "c"] # 文字列のみの配列
a = %W(a b c)
a = ['a', 'b', 'c'] # 文字列のみの配列
a = %w(a b c)

# if

score = 80
if score > 60
 puts "ok"
elsif score > 40
 puts "soso"
else
 puts "no"
end

puts "ok" if score > 60

=begin

true それ以外(0, ""も含む)
false false nil

=end

a = 1
b = 2
a, b = 1, 2 # 多重代入

# case

signal = "red"

case signal
when "red"
 puts "stop"
when "green", "blue"
 puts "go"
else
 puts "end"
end

# ループ

# 数値オブジェクトのtimes
3.times do |i|
 puts "#{i} : hello"
end

i = 0
while i < 3 do
 puts "#{i} : hello"
 i += 1
end


3.times do |i|
 if i == 1
 break # ループを終える
 next # ループを1段階進める
 end
 puts "#{i} : hello"
end


for i in 0..2 do 
 puts i
end

for color in ["red", "pink", "blue"] do
 puts color
end

["red", "pink", "blue"].each do |color|
 puts color
end

{"red"=>200, "pink"=>200, "blue"=>200}.each do |color, price|
 puts "#{color}:#{price}"
end


# 関数的メソッド
def sayHi(name = "sapporo")
 puts "Hi!" + name
end

def sayHi_s(name = "sapporo")
 s = "Hi!" + name
 s # return sと同意
end

sayHi("tom")
puts sayHi_s()


# クラス
# クラス名は必ず大文字
class User

# クラス変数
 @@count = 0

# コンストラクタ
 def initialize(name)
 # インスタンス変数
 @name = name
 @@count += 1
 end

# ゲッタ
 # アクセサをつくらないと外部からアクセスできない
 def name
 @name
 end

# セッタ
 def setName(newName)
 @name = newName
 end

# アクセサを設定
 # attr_accessor :name
 # ゲッタのみを設定
 # attr_reader :name
 # セッタのみを設定
 # attr_writer :name

# インスタンスメソッド
 def sayHi
 puts "my name is #{@name}"
 end

# クラスメソッド
 def User.sayHello
 puts "class meshod"
 end

end

tom = User.new("tom")
tom.sayHi()
User.sayHello()

# getter
tom.name
# setter
tom.name = "tombo"
tom.setName("tombo")


# 継承
class SuperUser < User

def shout
 puts "HELLO #{@name}"
 end
end


# Timeクラスの使い方
t = Time.now # 今の時間

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA