LoginSignup
5
5

More than 5 years have passed since last update.

Ruby入門(ドットインストール)

Posted at

はじめに

ドットインストールの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"
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5