独学Ruby -基礎②-

引き続き、Rubyの基礎その2。

tanoshiiruby.github.io

Contents


オブジェクトと変数・定数

データを表現する基本単位(オブジェクト)。

  • 数値オブジェクト(Numeric)
  • 文字列オブジェクト(String)
  • 配列オブジェクト (Array)
  • ハッシュオブジェクト(Hash)
  • 正規表現オブジェクト(Regexp
  • ファイルオブジェクト(File) などなど

変数の種類

  • ローカル変数 ... 先頭がアルファベットの小文字か「_」で始まる
  • グローバル変数 ... 先頭が「$」で始まる
  • インスタンス変数 ... 先頭が「@」で始まる
  • クラス変数 ... 先頭が「@@」で始まる
  • 擬似変数 ... true, false, self, nil などの予約語

変数のスコープ確認

# グローバル変数
$globalVariable = 111

# ローカル変数
localVariable = 222

# sub.rb呼び出し
require_relative "sub"

p $globalVariable
p localVariable
#グローバル変数に代入
$globalVariable = 777

#ローカル変数に代入
localVariable = 555

globalVariableは111ではなく777となる。

localVariableは555ではなく222のまま。

定数

先頭がアルファベットの大文字で始まるもの

実際に定数宣言後に別の値を代入するとWarningが宣告される。

値は書き換わる。

scopetest.rb:17: warning: already initialized constant CONST_VARIABLE
scopetest.rb:14: warning: previous definition of CONST_VARIABLE was here

予約語

BEGIN

END など


条件判断

  • if
  • unless
  • case
number = ARGV[0].to_i

#-------------------------
# if文
#-------------------------
if number == 1
    print "number is 1.\n"
elsif number == 2
    print "number is 2.\n"
else
    print "number is ", number , "\n"
end

#-------------------------
# unless文
#-------------------------
unless (number == 1) || (number == 2)
    print "number is ", number , "\n"
else
    print "number is 1 or 2.\n"
end

#-------------------------
# case文
#-------------------------
case number
when 1 then
    print "number is 1.\n"
when 2 then
    print "number is 2.\n"
else
    print "number is ", number, ".\n"
end

# 複数の条件を指定することもできる
case number
when 1, 2 then
    print "number is 1 or 2.\n"
else
    print "number is ", number, ".\n"
end

# クラス判定
array = ["moji", 1, nil]
array.each do |obj|
    case obj
    when String
        print "obj is a String.\n"
    when Numeric
        print "obj is a Numeric.\n"
    else
        print "obj is someting.\n"
    end
end

if修飾子とunless修飾子

実行したい式の後ろに条件式を書ける。

number = ARGV[0].to_i

print "number is 0.\n"      if number == 0
print "number is not 0.\n"  if number != 0

繰り返し

  • 構文
  • メソッド
命令 構文 メソッド
times
for
while
until
each
loop

timesメソッド

2通りの書き方がある。

# timesメソッド

# 書き方1
3.times do
    print "loop.\n"
end

# 書き方2
3.times {
    print "loop.\n"
}

# 繰り返し回数を知る
3.times do |i|
    print "loop[", i, "].\n"
end

for文

#ループ回数を指定する方法
from_idx = 3
to_idx   =  5
for idx in from_idx..to_idx
    print idx,"\n"
end

#範囲オブジェクトでループ回数を指定する方法
array = [1, 2, 3]
for var in array
    print var,"\n"
end

while文

i = 1
while i < 3
    print i,"\n"
    i += 1
end

until文

i = 1
until i > 3
    print i,"\n"
    i += 1
end

eachメソッド

names = ["awk", "Perl", "Python", "Ruby"]
#書き方1
names.each do |name|
    print name, "\n"
end

#書き方2
names.each { |name|
    print name, "\n"
}

#書き方3
(1..5).each do |num|
    print num, "\n"
end

loopメソッド

無限ループにならないように繰り返しの制御を。

#loopメソッド + break

i = 0
loop do
    if i == 5 then
        break
    else
        i += 1
    end
    
    print i, "\n"
end

繰り返し制御

language = ["C", "C++", "Ruby", "Python", "Java"]
print language,"\n"

# break
language.each do |lang|
    case lang
    when /^C/ then
        print "C Series language =>", lang, "\n"
    when /Ruby/ then
        print "Ruby\n"
    else
        print "Other"
        break;
    end
end

print "\n---------------\n"

# next
language.each do |lang|
    if lang == "C++" then
        print "Skip C++\n"
        next
    end
    
    print lang,"\n"
end

print "\n---------------\n"

# redo
language.each do |lang|
    if lang == "C++" then
        print "C++ => C#\n"
        lang = "C#"
        redo
    end
    
    print lang,"\n"
end

以上。