はじめてのRuby
Table of Contents
1 print,puts,pメソッド
1.1 helloruby.rb
「Hello, Ruby.」という文字列を出力するプログラムを作成せよ
print 'Hello, Ruby.\n'
> answer.rb Hello, Ruby.
1.2 helloruby_2.rb
「Hello, "Ruby".」という文字列を出力するプログラムを作成せよ
print Hello, \"Ruby\".\n"
> answer.rb Hello, "Ruby".
1.3 p_method.rb
「"Hello,\n\tRuby."」という文字列を出力するプログラムを作成せよ
p "Hello,\n\tRuby."
> answer.rb "Hello,\n\tRuby."
1.4 kiritsubo.rb
2 コマンドラインからのデータの入力
2.1 print_argv.rb
コマンドラインから引数を5つ入力として受け取り、出力するプログラム
puts ARGV[0] puts ARGV[1] puts ARGV[2] puts ARGV[3] puts ARGV[4]
> ruby answer.rb 1st 2nd 3rd 4th 5th 1st 2nd 3rd 4th 5th
2.2 arg_arith.rb
コマンドラインから数値を2つ受け取り、和、差、積、商を表示するプログラム
num0 = ARGV[0].to_i num1 = ARGV[1].to_i sum = num0 + num1 dif = num0 - num1 pro = num0 * num1 quo = num0 / num1 puts sum puts dif puts pro puts quo
> ruby answer.rb 5 3 8 2 15 1
3 変数
3.1 area_volume.rb
3つの数値x、y、zを受け取り、縦x、横y、高さzの直方体の表面積と体積を求めるプログラム
x = ARGV[0].to_i y = ARGV[1].to_i z = ARGV[2].to_i area = (x * y + y * z + z * x) * 2 volume = x * y * z print '表面積=', area, "\n" print '体積=' volume, "\n"
> ruby answer.rb 10 20 30 表面積=2200 体積=6000
4 条件判断
4.1 greater_smaller_else.rb
数値を1つ引数として受け取り、それが10より大きければ「greater」小さければ「smaller」と表示するプログラム
a = ARGV[0].to_i if a >= 10 print "greater\n" else print "smaller\n" end
>ruby answer.rb 20 greater >ruby answer.rb 5 smaller
5 繰り返し
5.1 1_to_n.rb
入力された1つの数値nを引数として受け取り、1からnまでの数を順番に表示するプログラムを作成せよ
n = ARGV[0].to_i i = 1 while i <= n print i, "\n" i += 1 end
> ruby answer.rb 5 1 2 3 4 5
5.2 five_times.rb
「All work and no play makes Jack a dull boy.」と5行表示するプログラム
5.times do print "All work and no play makes Jack a dull boy.\n" end
> answer.rb All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.
6 配列
6.1 配列からオブジェクトを取り出す
配列のn番目の要素を取り出し、表示するプログラム.ただし、配列には数値が入るものとする。
nums = [3, 1, 4, 1, 5] print nums[ARGV[0].to_i]
> ruby answer.rb 0 3 > ruby answer.rb 3 1
6.2 配列にオブジェクトを格納する
配列の先頭の要素をコマンドラインに入力した要素に変更するプログラム
nums = [3, 1, 4, 1, 5] nums[0] = ARGV[0].to_i print nums
> ruby answer.rb 5 [5, 1, 4, 1, 5]
6.3 配列の大きさ
配列を表示し、その配列の大きさも表示するプログラムを作成せよ
names = print names, "\n" print names.size
6.4 配列と繰り返し
配列全体を表示してから、配列の要素を順に表示するプログラム
names = ["小林", "林", "高野", "森岡"] print names, "\n" names.each do |n| puts n end
> ruby answer.rb ["小林", "林", "高野", "森岡"] 小林 林 高野 森岡
7 ハッシュ
7.1 シンボル
コマンドラインから文字列を受け取り、シンボルに変換して表示するプログラム
n = ARGV[0] p n.to_sym
> ruby answer.rb hash :hash
7.2 ハッシュの操作
:name, :furiganaというそれぞれのキーに"高橋", "タカハシ"というオブジェクトが格納されているハッシュを表示、さらに:telというキーに"000-1234-5678"を格納して再度表示するプログラム
address = {name: "高橋", furigana: "タカハシ"} puts address address[:tel] = "000-1234-5678" puts address
> ruby answer.rb {:name=>"高橋", :furigana=>"タカハシ"} {:name=>"高橋", :furigana=>"タカハシ", :tel=>"000-1234-5678"}
8 正規表現
8.1 パターンとマッチング
9 ファイルからの読み込み
9.1 read_text.rb
コマンドラインからファイル名を受け取り、該当ファイルのテキストデータを表示するプログラム
filename = ARGV[0] text = File.read(filename) print text
>ruby answer.rb [filename] [text]
9.2 read_line.rb
コマンドラインからファイル名を受け取り、該当ファイルのテキストデータを1行ずつ表示すつプログラム
filename = ARGV[0] file = File.open(filename) file.each_line do |line| print line end
9.3 simple_grep.rb
入力したテキストデータの中から、正規表現で指定した特定のパターンにマッチする行を出力するプログラム
pattern = Regexp.new(ARGV[0]) filename = ARGV[1] file = File.open(filename) file.each_line do |line| if pattern =~ line print line end end file.close
>ruby answer.rb [pattern] [filename]
10 メソッドの作成
10.1 hello_ruby2.rb
「Hello, Ruby.」と表示するメソッドhelloを用いて、
def hello puts "Hello, Ruby." end hello()
> ruby hello_ruby2.rb Hello, Ruby.
11 別のファイルを取り込む
11.1 ディレクトリ内のファイルの取り込み
def simple_grep(pattern, filename) file = File.open(filename) file.each_line do |line| if pattern =~ line print line end end file.close end
require_relative "grep" pattern = Regexp.new(ARGV[0]) filename = ARGV[1] simple_grep(pattern, filename)
11.2 Rubyの標準ライブラリ
require "date" days = Date.today - Date.new(1993, 2, 24) puts(days.to_i)