独学Ruby -基礎①-
まずは基礎の基礎から。
Contents
・配列(Array) ・ハッシュとシンボル ・正規表現(パターンマッチング) ・コマンドライン ・ファイルの読み込み
paiza.io (https://paiza.io/ja/projects/new)
Ruby MSI Packages (https://www.artonx.org/data/asr/)
ではさっそく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
# パターンマッチング # 先頭で一致 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
以上。