はじめてのRuby

Table of Contents

1 print,puts,pメソッド

1.1 helloruby.rb

「Hello, Ruby.」という文字列を出力するプログラムを作成せよ

print('Hello, Ruby.\n')
Hello, Ruby.

1.2 helloruby_2.rb

「Hello, "Ruby".」という文字列を出力するプログラムを作成せよ

print("Hello, \"Ruby\".\n")
> helloruby_2.rb
Hello,"Ruby".

1.3 p_method.rb

「"Hello,\n\tRuby."」という文字列を出力するプログラムを作成せよ

p "Hello,\n\tRuby."

1.4 kiritsubo.rb

2 変数

2.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 area_volume.rb 10 20 30
表面積=2200
体積=6000

3 条件判断

3.1 greater_smaller.rb

数値を1つ引数として受け取り、それが10以上ならば「greater」、9以下ならば「smaller」と出力するプログラム

a = ARGV[0].to_i

if a >= 10
  print "greater\n"
end
if a <= 9
  print "smaller\n"
end
>ruby greater_smaller_else.rb 20
greater

>ruby greater_smaller_else.rb 5
smaller

3.2 greater_smaller_else.rb

List1.6のプログラムと同じ処理を、elseを用いて実行するプログラム

a = ARGV[0].to_i

if a >= 10
  print "greater\n"
else
  print "smaller\n"
>ruby greater_smaller_else.rb 20
greater

>ruby greater_smaller_else.rb 5
smaller

4 繰り返し

4.1 1_to_n.rb

入力された1つの数値nを引数として受け取り、1からnまでの数を順番に表示するプログラムを作成せよ

n = ARGV[0].to_i
i = 1
while i <= n
  print i, "\n"
  i = i + 1
end
> ruby 1_to_n.rb 5
1
2
3
4
5

4.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."
end

5 配列

5.1 配列からオブジェクトを取り出す

配列のn番目の要素を取り出し、表示するプログラム

names = ["小林", "林", "高野", "森岡"]

print names[ARGV[0]]
>ruby answer.rb 0
小林

5.2 配列にオブジェクトを格納する

配列の先頭の要素をコマンドラインに入力した要素に変更するプログラム

nums = [1, 2, 3]

nums[0] = ARGV[0]

print nums
> ruby answer.rb 5
[5, 2, 3]

5.3 配列の大きさ

配列を表示し、その配列の大きさも表示するプログラムを作成せよ

names = 

print names, "\n"

print names.size

5.4 配列と繰り返し

配列全体を表示してから、配列の要素を順に表示するプログラム

names = ["小林", "林", "高野", "森岡"]

print names, "\n"

names.each do |n|
  puts n
end
> ruby answer.rb
["小林", "林", "高野", "森岡"]
小林
林
高野
森岡

6 ハッシュ

6.1 シンボル

コマンドラインから文字列を受け取り、シンボルに変換して表示するプログラム

n = ARGV[0]

p n.to_sym
> ruby answer.rb hash
:hash

6.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"}

7 正規表現

7.1 パターンとマッチング


8 コマンドラインからのデータの入力

8.1 List3.1 print_argv.rb

コマンドラインから引数を5つ入力として受け取り、出力するプログラム

# List3.1 print_argv.rb
puts "最初の引数: #{ARGV[0]}"
puts "2番目の引数: #{ARGV[1]}"
puts "3番目の引数: #{ARGV[2]}"
puts "4番目の引数: #{ARGV[3]}"
puts "5番目の引数: #{ARGV[4]}"
実行例
> ruby print_argv.rb 1st 2nd 3rd 4th 5th
最初の引数: 1st
2番目の引数: 2nd
3番目の引数: 3rd
4番目の引数: 4th
5番目の引数: 5th

8.2 List3.3 arg_arith.rb

コマンドラインから数値を2つ受け取り、和、差、積、商を表示するプログラム

num0 = ARGV[0].to_i
num1 = ARGV[1].to_i

puts "#{num0 + num1}"
puts "#{num0 - num1}"
puts "#{num0 * num1}"
puts "#{num0 / num1}"
> ruby answer.rb 5 3 
8
2
15
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 別のファイルを取り込む

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.1 Rubyの標準ライブラリ

require "date"

days = Date.today - Date.new(1993, 2, 24)
puts(days.to_i)

Author: Shun Takahashi

Created: 2018-08-04 土 04:56

Emacs 25.3.1 (Org mode 8.2.10)

Validate