Rubyのチュートリアル
puts "Hello World!"Hello World!def f1
puts "Hello World!"
end
f1
f1()Hello World!
Hello World!def f1(name)
puts "Hello #{name}!"
end
f1("World")
f1("Hogehoge")Hello World!
Hello Hogehoge!def f1(name = "World")
puts "Hello #{name} !"
end
f1
f1()
f1("hogehoge")
f1(name = "hogehoge")Hello World !
Hello World !
Hello hogehoge !
Hello hogehoge !class SampleClass
def initialize(name = "World")
@name = name
end
def printName()
puts @name
end
end
sample = SampleClass.new("Hoge")
sample.printName
# これはエラー。
# sample.name
# sample.@nameHogeclass SampleClass
def initialize(name = "World")
@name = name
end
def printName()
puts @name
end
end
class SampleClass
# getterとsetterを両方宣言する。
attr_accessor :name
end
sample = SampleClass.new("Hoge")
puts "sample.respond_to?('name') : #{sample.respond_to?('name')}"
sample.printName
sample.name = "Piyo"
sample.printName
# これはエラー。
# sample.name
# sample.@namesample.respond_to?('name') : true
Hoge
Piyolist = ["hoge", "piyo", "fuga"]
if list.respond_to?("each")
list.each do |v|
puts v
end
endlist = ["hoge", "piyo", "fuga"]
if list.respond_to?("join")
puts list.join(", ")
endif __FILE__ == $0
puts $0
puts "Hello World"
endif __FILE__ == $0
# ダブルクォート記法
puts %!Hello #{ARGV[0]}\!!
puts %Q!Hello\! Hello\! #{ARGV[0]}\!!
# シングルクォート記法
puts %q!Hello\! Hello\! #{ARGV[0]}\!!
endHello !
Hello! Hello! !
Hello! Hello! #{ARGV[0]}!def printNameAndValue(name, value)
puts "#{name} : #{value}"
end
if __FILE__ == $0
list1 = Array.new
printNameAndValue("list1", list1)
list2 = Array.new(5)
printNameAndValue("list2", list2)
list3 = list2
list3[2] = "hoge"
printNameAndValue("list2", list2)
printNameAndValue("list3", list3)
list4 = Array.new(5) do |i|
"None#{i}"
end
printNameAndValue("list4", list4)
endlist1 : []
list2 : [nil, nil, nil, nil, nil]
list2 : [nil, nil, "hoge", nil, nil]
list3 : [nil, nil, "hoge", nil, nil]
list4 : ["None0", "None1", "None2", "None3", "None4"]DATA_LENGTH = 10
if __FILE__ == $0
# 配列の初期化
data = (0..DATA_LENGTH-1).to_a
puts data.join(",")
# 添字2から5つ分
puts data[2, 5].join(",")
# 添字2から添字5まで
puts data[2..5].join(",")
# 添字2から上限まで
puts data[2, DATA_LENGTH].join(",")
# 後ろから3つ目から2個
puts data[-3, 2].join(",")
# 後ろから3つ目から2個
puts data[-3, 2].join(",")
# 後ろから7つ目から添字5まで
puts data[-7..5].join(",")
end0,1,2,3,4,5,6,7,8,9
2,3,4,5,6
2,3,4,5
2,3,4,5,6,7,8,9
7,8
7,8
3,4,5DATA_LENGTH = 10
if __FILE__ == $0
data = (0..DATA_LENGTH-1).to_a
# 添字5を取得
puts data.fetch(5, 'X')
# 添字10は存在しない。Xを取得。
puts data.fetch(10, 'X')
endDATA_LENGTH = 10
if __FILE__ == $0
data = (0..DATA_LENGTH-1).to_a
data2 = data.clone
# 値は同じ
puts data == data2
# 実態は別
puts data.equal?(data2)
# コピー先の値を変更してみる。
data2[5] = 15
# コピー先は当然変わっているが・・・
puts data2.join(",")
# コピー元は変わらない
puts data.join(",")
end重複排除される配列
require 'set'
def addToSet(sets, value)
if sets.add?(value)
puts '追加されました。'
else
puts '追加されませんでした。'
end
end
if __FILE__ == $0
# 重複排除される。
# 順序は保持されない。
sets = Set['b', 'a', 'c', 'a']
puts sets
addToSet(sets, 'a')
addToSet(sets, 'd')
puts sets
end#<Set: {"b", "a", "c"}>
追加されませんでした。
追加されました。
#<Set: {"b", "a", "c", "d"}>if __FILE__ == $0
sampleHash = Hash['hoge', 10, 'piyo', 20, 'fuga', 30]
puts sampleHash
puts sampleHash['hoge']
# エラーにはならない。
puts sampleHash['foo']
sampleHash.each do |k, v|
puts "key : #{k} , value : #{v}"
end
end{"hoge"=>10, "piyo"=>20, "fuga"=>30}
10
key : hoge , value : 10
key : piyo , value : 20
key : fuga , value : 30if __FILE__ == $0
gen = Enumerator.new do |y|
y << 'first'
y << 'second'
y << 'third'
end
puts gen.next
puts gen.next
puts gen.next
endfirst
second
thirdclass SampleClass
# コンストラクタ
def initialize(value)
# インスタンス変数
@value = value
@privateValue = 'privateValue'
end
def sampleFunc()
puts "This is sampleFunc."
end
# public :sampleFunc
# デフォルトはパブリック。
# privateメソッド
def privateSampleFunc()
return @privateValue
end
private :privateSampleFunc
def putsPrivateValue()
puts self.privateSampleFunc()
end
# クラスメソッド。インスタンスを生成しなくても呼べる。
def self.classMethod()
puts "This is classMethod."
end
attr_accessor :value
endrequire_relative 'lib/Sample'
if __FILE__ == $0
hoge = SampleClass.new('hoge')
piyo = SampleClass.new('piyo')
puts hoge.value
p piyo.value
hoge.sampleFunc()
hoge.putsPrivateValue()
# privateなので呼べない。
# hoge.privateSampleFunc()
SampleClass.classMethod()
end# 親クラス
class SuperClass
attr_accessor :value
def initialize(value)
@value = value
end
# 抽象メソッド
# 直接抽象メソッドを実装することはできないので、抽象メソッドとして扱いたいメソッドは親クラスで例外を投げるようにしておく。
def sampleMethod()
raise "Called abstract method: my_print"
end
end
# 継承
class SubClass < SuperClass
def sampleMethod()
puts "This is SubClass."
end
endrequire_relative 'lib/ExtendedSample'
if __FILE__ == $0
sub = SubClass.new("hoge")
puts sub.value
puts sub.sampleMethod()
endhoge
This is SubClass.
def raiseException()
raise RuntimeError.new("RuntimeError!!")
end
if __FILE__ == $0
begin
raiseException()
rescue RuntimeError => e
puts e
end
endRuntimeError!!- 関数
- クラス
- 配列
- main宣言
- 特殊な文字列表現
- コレクション/コンテナ
- 外部ファイルを読み込む
- ジェネレータ
- クラス
- 例外