独学Ruby -基礎①-

まずは基礎の基礎から。

tanoshiiruby.github.io

Contents

 ・配列(Array)  ・ハッシュとシンボル  ・正規表現(パターンマッチング)  ・コマンドライン  ・ファイルの読み込み



動作環境

paiza.io (https://paiza.io/ja/projects/new)

Ruby MSI Packages (https://www.artonx.org/data/asr/)


まずはRubyを使ってみる

ではさっそくRubyを動かしてみよう

まずはお決まりのHelloWorldから。どれも同じ出力結果。

print("Hello World\n")
print "Hello World\n"
print "Hello", " ", "World", "\n"
puts "Hello World\n"

文字列と数値を意識して出力してくれるpメソッド。

3puts "100"
puts 100

コメントを現す記号は#。行末までコメントになる。

# コメント

=beginと=endで囲まれた範囲もコメント。

=begin
コメント
コメント
=end

制御構造を分類すると、

  • 逐次処理
  • 条件判断 (if then end)
  • 繰り返し (while times)
  • 例外処理
my_weight_kg = 80
your_weight_kg = 70

# 条件判断
if my_weight_kg > your_weight_kg then
    print "私の体重のほうが重い"
else
    print "あなたの体重のほうが重い"
end

# 繰り返し
i = 1
while i <= 10
    print i, "\n"
    i = i + 1
end

10.times do
    print "A"
end

メソッドの作成について。

# メソッド定義
def hello
    print "Hello World\n"
end

# メソッド呼び出し
hello

自作したrubyファイル(.rb)を呼び出す

def hello
    print("Hello World\n")
end

hello.rbのhelloメソッドを呼び出すためにrequireメソッドを使うのだが、自作したrbファイルはrequire_relativeメソッドがよさそう。requireメソッドはPathが通っていないとダメっぽい。

require_relative "hello"
hello()

便利なオブジェクト

Rubyで書籍の購入リストを作ることを考えてみる。購入リストの項目は以下とする。

  • 購入日
  • 種別(コンピュータ書、ノンフィクション、小説など)
  • 書名
  • 著者名
  • 出版社
  • ISBN
  • 金額

例)

パラメータ名 値の例 データ型
購入日 2019年1月17日 日付
種別 コンピュータ書 文字列
書名 たのしいRuby 第3版 文字列
著者名 高橋征義、後藤裕蔵 文字列
出版社 Softbank Creative 文字列
ISBN 978-4-7973-5740-0 文字列
金額 2640 数値

配列(Array)

  • 生成
  • 取り出し
  • 代入
  • 繰り返し
# 空配列の生成
name = []
p name

# 初期値付き配列の生成
name = ["A", "B", "C"]
p name

# 配列からオブジェクトを取り出す
print("[0]=", name[0], "[1]=", name[1], "[2]=", name[2], "\n")

# オブジェクトの代入
name[0] = "D"
print("[0]=", name[0],"\n")

# 配列には異なるデータ型のオブジェクトを混ぜられる
mix = ["String", 1, "A", 2, "B"]
p mix

# 配列と繰り返し
mix.each do |var|
    print(var , "\n")
end

ハッシュ(Hash)とシンボル(Symbol)

  • 生成
  • 取り出し
  • 代入
  • 繰り返し
# ハッシュテーブルの生成]
hash_table = {:sym1 => 0, :sym2 => "string"}
p hash_table

# ハッシュテーブルからの取り出し
print("[0] = ", hash_table[:sym1], "\n")
print("[1] = ", hash_table[:sym2], "\n")

# ハッシュテーブルへの格納
hash_table[:sym1] = 1
hash_table[:sym2] = "index"
hash_table[:sym3] = "new"
print("[0] = ", hash_table[:sym1], "\n")
print("[1] = ", hash_table[:sym2], "\n")
print("[2] = ", hash_table[:sym3], "\n")

# データ型も変更可能
hash_table[:sym3] = 1
print("[2] = ", hash_table[:sym3], "\n")

# 繰り返し
hash_table.each do |symbol, var|
    print(symbol, "=", var, "\n")
end

正規表現

  • パターンマッチング (=~演算子)
    • マッチングに成功するとマッチした位置を返す
    • マッチングに失敗するとnilを返す
# パターンマッチング

# 先頭で一致
pos = /Ruby/ =~ "Ruby"
print(pos, "\n")

# 中間で一致
pos = /Ruby/ =~ "iRuby"
print(pos, "\n")

# 一致しない
pos = /Ruby/ =~ "rUBY"
print(pos, "\n")

nil(ニル)

  • オブジェクトが存在しないことを示す値

コマンドライン

コマンドライン引数ARGV[]。

print "1番目の引数:", ARGV[0], "\n"
print "2番目の引数:", ARGV[1], "\n"
print "3番目の引数:", ARGV[2], "\n"

文字列を数値に変換(to_iメソッド)

print ARGV[0], "\n"
num = ARGV[0].to_i
print num

ファイル読み込み

  • openメソッド
  • readメソッド
  • closeメソッド
  • getsメソッド

一度にテキストファイルをロードする

# ARGV[0] = FileName(*.txt)

# Case1
filename = ARGV[0]
file = open(filename)
text = file.read
print text
file.close

# Case2
filename = ARGV[0]
text = File.read(filename)
print text

# Case3
print File.read(ARGV[0])

一行ずつ読み込む

# ARGV[0] = FileName

filename = ARGV[0]
file = open(filename)

# 1行ずつ読み出す
while textline = file.gets
    print textline
end

file.close

特定パターンの行のみを出力する

# ARGV[0] is Pattern String
# ARGV[1] is File Name

pattern = Regexp.new(ARGV[0])
filename = ARGV[1]

file = open(filename)
while textline = file.gets
    if pattern =~ textline
        print textline
    end
end
file.close

utf-8

ruby -Ks スクリプトファイル名.rb

以上。