はじめての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)

Author: Shun Takahashi

Created: 2018-08-09 木 17:09

Emacs 25.3.1 (Org mode 8.2.10)

Validate