はじめに
ドットインストールのRuby入門の学習記録です。
目次
- 破壊的メソッド、真偽値を返すメソッド
- %記法を使ってみよう
- ifで条件分岐をしてみよう
- 真偽値と条件演算子
- caseで条件分岐をしてみよう
- times、while、break、nextを使おう
- for、eachを使おう
- 関数的メソッドを作ってみよう
- クラスを作ってみよう
- クラスメソッド、クラス変数を使おう
- クラスを継承してみよう
- アクセサを使ってみよう
- Timeクラスを使ってみよう
内容
破壊的メソッド、真偽値を返すメソッド
破壊的メソッド
- 元データを書き換えたい場合に使うメソッド
通常
s = "taguchi"
puts s.upcase
puts s
実行結果
TAGUCHI
tagchi
破壊的メソッドを用いた場合
s = "taguchi"
puts s.upcase!
puts s
実行結果
TAGUCHI
TAGUCHI
真偽値を返すメソッド
- 実行結果の真偽値を返したい時に使うメソッド
- 実行結果の真偽値は論理演算や条件判定で用いる
s = "taguchi"
p s.empty?
実行結果
false
s = ""
p s.empty?
実行結果
true
%記法を使ってみよう
%記法とは
- 文字列や配列の別の書き方
通常の書き方
# 文字列
s = "hello"
s = 'hello'
# 配列
a = ["a", "b", "c"]
a = ['a', 'b', 'b']
%記法の書き方
# 文字列
s = %Q(hello)
s = %q(hello)
# 配列
a = %W(a b c)
a = %w(a b c)
# 文字列を閉じる記号は記号であれば何でも良い(!, [, {, 等)
ifで条件分岐をしてみよう
条件分岐
通常のif文
score = 50
if score > 60
puts "OK!"
elsif score == 60
puts "NG!"
else
puts "SOSO..."
end
# => SOSO...
省略した書き方
score = 50
puts "OK!" if score > 40
# => OK!
真偽値と条件演算子
真偽値
- falseになる場合
- false か nil(オブジェクトが存在しない)
- trueになる場合
- それ以外(0, ' 'を含む)
if文での真偽値による条件分岐
x = 10
if x
puts "True"
end
# 上記は下記の比較演算子を省略したもの
if x == true
puts "True"
end
条件演算子
-
if else
文を簡単に書けるようにするためのもの
条件演算子によるifelse文
b, c = 10, 20 # 多重代入
a = b > c ? c : b
puts a
実行結果
20
caseで条件分岐をしてみよう
case文による条件分岐
signal = "red"
case signal
when "red"
puts "STOP!"
when "green", "blue" # ,区切りで複数指定可能
puts "GO!"
when "yellow"
puts "CAUTION!"
else
puts "wrong signal"
end
実行結果
STOP!
times、while、break、nextを使おう
timesメソッド
3.times do |i| # doの後ろに適当な変数をつけると繰り返しの回数を取得できる
puts "#{i}: hello"
end
実行結果
0: hello
1: hello
2: hello
whileメソッド
i = 0
while i > 3 do
puts "#{i}: hello"
end
実行結果
0: hello
1: hello
2: hello
times+break
3.times do |i| # doの後ろに適当な変数をつけると繰り返しの回数を取得できる
if i == 1
break
end
puts "#{i}: hello"
end
実行結果
0: hello
times+next
3.times do |i| # doの後ろに適当な変数をつけると繰り返しの回数を取得できる
if i == 1
next
end
puts "#{i}: hello"
end
実行結果
0: hello
2: hello
for、eachを使おう
for文
for i in 0..2
puts i
end
実行結果
0
1
2
for文(配列)
for color in ["red", "blue", "pink"]
puts color
end
実行結果
red
blue
pink
each文(配列)
["red", "blue", "pink"].each do |color|
puts color
end
実行結果
red
blue
pink
each文(ハッシュ)
{"apple"=>100, "banana"=>200, "orange"=>50}.each do |fruit, price|
puts "#{fruit}: #{price}"
end
実行結果
apple: 100
banana: 200
orange: 50
関数的メソッドを作ってみよう
関数の作成
def sayHi
puts "Hello"
end
sayHi()
実行結果
Hello
引数の付与
def sayHi(name)
puts "Hello" + name
end
sayHi("Tom")
実行結果
Hello Tom
引数のデフォルト値設定
def sayHi(name = "Steve")
puts "Hello" + name
end
sayHi("Tom")
sayHi()
実行結果
Hello Tom
Hello Steve
返り値を持たせる
def sayHi(name)
s = "Hello" + name
return s # returnは省略可能
end
greet = sayHi("Tom") # 返り値があるので代入することが可能おtなる
puts greet
puts s # 定義されたメソッド外からの呼び出しはできない
実行結果
Hello Tom
Error
クラスを作ってみよう
用語について
- クラス
- オブジェクトの設計図
- インスタンス
- クラスから作られたオブジェクト
- インスタンス変数
-
@
から始まる変数 - インスタンス内の別のメソッドから呼び出し可能
-
例1
class User()
def initialize(name)
@name = name
end
def sayHi()
puts "Hello, my name is #{@name}"
end
end
tom = User.new("Tom")
bob = User.new("Bob")
tom.sayHi()
bob.sayHi()
実行結果
Hello, my name is Tom
Hello, my name is Bob
クラスメソッド、クラス変数を使おう
用語について
- インスタンスメソッド
- クラスの中で普通に定義されたメソッド
- クラスメソッド
- クラスから直接呼び出すことができるメソッド
- クラス変数
-
@@
から始まる変数 - クラスメソッドから呼び出しできる変数
-
クラスメソッド、クラス変数
class User()
@@count = 0 # クラス変数
def initialize(name)
@name = name # インスタンス変数
@@count += 1
end
def sayHi() # インスタンスメソッド
puts "Hello, my name is #{@name}"
end
def User.sayHello # クラスメソッド
puts "Hello from User class (#{@@count} users)"
end
end
User.sayHello()
tom = User.new("Tom")
bob = User.new("Bob")
User.sayHello()
実行結果
Hello from User class (0 users)
Hello from User class (2 users)
クラスを継承してみよう
クラス継承
class User()
def initialize(name)
@name = name # インスタンス変数
end
def sayHi() # インスタンスメソッド
puts "Hello, my name is #{@name}"
end
end
class SuperUser < User
def shout
puts "HELLO! from #{@name}!"
end
end
tom = User.new("Tom")
bob = SuperUser.new("Bob")
tom.sayHi()
bob.sayHi()
bob.shout()
実行結果
Hello, my name is Tom
Hello, my name is Bob
HELLO! from Bob
アクセサを使ってみよう
用語について
- アクセサ
- 設定の取得
getter
- 設定の変更
setter
- 設定の取得
セッター、ゲッターの定義
class User()
def initialize(name)
@name = name # インスタンス変数
end
# インスタンス変数を外部から呼び出したり、変更したりする場合にゲッター、セッターを用いる
# ゲッター
def name
@name # return @name の return は省略可能
end
# セッター
def setName(newName)
@name = newName
end
def sayHi() # インスタンスメソッド
puts "Hello, my name is #{@name}"
end
end
bob = User.new("Bob")
bob.sayHi()
p bob.name
bob.setName("Tom")
bob.sayHi()
実行結果
Hello, my name is Bob
"Bob"
Hello, my name is Tom
- このように簡単に書ける
セッター、ゲッターの定義
class User()
def initialize(name)
@name = name # インスタンス変数
end
# ゲッター、セッターを両方定義
attr_accessor :name
# ゲッターのみを定義
attr_reader :name
# セッターのみを定義
attr_writer :name
def sayHi() # インスタンスメソッド
puts "Hello, my name is #{@name}"
end
end
bob = User.new("Bob")
bob.sayHi()
p bob.name
bob.name = "Tom" # このように書ける
bob.sayHi()
実行結果
Hello, my name is Bob
"Bob"
Hello, my name is Tom
Timeクラスを使ってみよう
現在時刻の取得
t = Time.now
p t
実行結果
2016-03-20 13:09:30 +0900
時刻指定&時刻加算
t = Time.new(2016, 3, 20, 13, 09, 30)
p t
t += 10
p t
実行結果
2016-03-20 13:09:30 +0900
2016-03-20 13:09:40 +0900
表示形式変更
t = Time.new(2016, 3, 20, 13, 09, 30)
p t.strftime("Updated: %Y-%m-%d")
p t
実行結果
"Updated: 2016-03-22"