9. モジュール
11.1. Rubyプログラミングでの主な他要素
オブジェクト指向プログラミング
→ 組んですぐ動かして確認ができる特徴を活用 正規表現
→ とかく避けては通れない要素、試しながら習熟 例外処理・エラー処理など
→ 実践的・実用目的なプログラミングで必修 各種ライブラリの活用
→ 膨大なライブラリの活用、実用コードの習熟 Ruby on Railsへ
→ Webシステム開発の切り札
!
49 Ruby基礎演習
社会人技術者研修 2015年度テキスト
48
コマンドから実行
>ruby fig_net1b.rb
今日の東京の天気は 晴時々曇 です。
! !
48 Ruby基礎演習
社会人技術者研修 2015年度テキスト
11.次のステップへ
11.1.Rubyプログラミングでの主な他要素
オブジェクト指向プログラミング
→ 組んですぐ動かして確認ができる特徴を活用 正規表現
→ とかく避けては通れない要素、試しながら習熟 例外処理・エラー処理など
→ 実践的・実用目的なプログラミングで必修 各種ライブラリの活用
→ 膨大なライブラリの活用、実用コードの習熟 Ruby on Railsへ
→ Webシステム開発の切り札
!
49 Ruby基礎演習
社会人技術者研修 2015年度テキスト
49
12.演習プログラム
2.1 最初のプログラム
list2-1 hello.rb
!
puts(“Hello”)!
2.2 コメント
list2-2 hello2.rb
!
#はじめてのrubyプログラム puts(“Hello”)!
=beginputs(“Bye!") # =begin =end 間はコメントアウト
=end
!
50 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
2.3 セミコロン
list2-3 hello3.rb
!
# はじめてのrubyプログラムputs "Hello! Ruby”; puts ”Bye!”
51 Ruby基礎演習
社会人技術者研修 2015年度テキスト
50
12.演習プログラム
2.1 最初のプログラム
list2-1 hello.rb
!
puts(“Hello”)!
2.2 コメント
list2-2 hello2.rb
!
#はじめてのrubyプログラム puts(“Hello”)!
=beginputs(“Bye!") # =begin =end 間はコメントアウト
=end
!
50 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
2.3 セミコロン
list2-3 hello3.rb
!
# はじめてのrubyプログラムputs "Hello! Ruby”; puts ”Bye!”
51 Ruby基礎演習
社会人技術者研修 2015年度テキスト
51
3.1 文字列
list3-1 string.rb
!
# 文字列 str = "Hello"str = ‘Hello'
!
# ※ダブルコーテーションをシングルコーテーションで囲むと# ダブルコーテーションも文字列に含まれます その逆も可 str = ‘“test”’
# 特殊文字
puts "Hello! ¥nBye!”
puts “tab¥ttab”
52 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
3.2 数値
list3-2 numeric.rb
!
# 変数num1に整数123を代入、num2に小数10.8を代入 num1 = 123 # 整数num2 = 10.8 # 小数
!
# その他の数値表現hex = 0x1fff # 16進 binary = 0b1011 # 2進 fixnum = 4e20 # 指数
53 Ruby基礎演習
社会人技術者研修 2015年度テキスト
52
3.1 文字列
list3-1 string.rb
!
# 文字列 str = "Hello"str = ‘Hello'
!
# ※ダブルコーテーションをシングルコーテーションで囲むと# ダブルコーテーションも文字列に含まれます その逆も可 str = ‘“test”’
# 特殊文字
puts "Hello! ¥nBye!”
puts “tab¥ttab”
52 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
3.2 数値
list3-2 numeric.rb
!
# 変数num1に整数123を代入、num2に小数10.8を代入 num1 = 123 # 整数num2 = 10.8 # 小数
!
# その他の数値表現hex = 0x1fff # 16進 binary = 0b1011 # 2進 fixnum = 4e20 # 指数
53 Ruby基礎演習
社会人技術者研修 2015年度テキスト
53
!
3.3 変数 3.4 定数 3.5 nil値
list3-3 fig2.rb
!
#変数foo = 1 # 数値代入 foo = "FOO" # 文字列代入 _value = 100
$bar = 999 # グローバル変数
@value = 123 # インスタンス変数
@@test = 0 # クラス変数
Foo = ‘FOO' # 定数
p true # 真
p false # 偽
p nil # nil値
!
54 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
4.1 演算子
list4-1 operator.rb
!
p 2 * 3 # 乗算 p 9 / 3 # 序算 p 7 + 3 # 加算 p 7 - 3 # 減算 p 7 & 3 # 剰余 p 2 ** 2 # べき乗!
!
55 Ruby基礎演習
社会人技術者研修 2015年度テキスト
54
!
3.3 変数 3.4 定数 3.5 nil値
list3-3 fig2.rb
!
#変数foo = 1 # 数値代入 foo = "FOO" # 文字列代入 _value = 100
$bar = 999 # グローバル変数
@value = 123 # インスタンス変数
@@test = 0 # クラス変数
Foo = ‘FOO' # 定数
p true # 真
p false # 偽
p nil # nil値
!
54 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
4.1 演算子
list4-1 operator.rb
!
p 2 * 3 # 乗算 p 9 / 3 # 序算 p 7 + 3 # 加算 p 7 - 3 # 減算 p 7 & 3 # 剰余 p 2 ** 2 # べき乗!
!
55 Ruby基礎演習
社会人技術者研修 2015年度テキスト
55
4.2 代入演算子 4.3 その他の演算子
list4-2 fig3.rb
!
# 代入演算子 d = 100d+=1 # =>101 d-=1 # =>100 d*=2 # =>200 d**=2 # =>4000 p d
p 3 && 1 # =>2 論理演算子 p 3 || 1 # =>3 論理演算子 p not true # =>false 論理演算子
p not 0 # => false ※ 0はtrue扱い(nilではない)ことに注意 p not 1 # => false
p not nil # => true
! !
56 Ruby基礎演習
社会人技術者研修 2015年度テキスト
5.1 条件分岐 5.2 if修飾式 5.3 unless式 5.3 条件演算子
list5-1 fig3.rb
!
# 今が午後か午前かを表示hour = Time.now.hour # 時刻を得る if hour >= 12
p "今は午後です"
else
p "今は午前です"
!
endlist5-2 fig4.rb
!
# 年齢チェック age = 20puts (age < 20) ? "ng" : "ok" # 三項演算子 (条件演算子)
puts "ng" if age < 20 # if修飾子 puts "ok" unless age < 20 # unless修飾子
57 Ruby基礎演習
社会人技術者研修 2015年度テキスト
56
4.2 代入演算子 4.3 その他の演算子
list4-2 fig3.rb
!
# 代入演算子 d = 100d+=1 # =>101 d-=1 # =>100 d*=2 # =>200 d**=2 # =>4000 p d
p 3 && 1 # =>2 論理演算子 p 3 || 1 # =>3 論理演算子 p not true # =>false 論理演算子
p not 0 # => false ※ 0はtrue扱い(nilではない)ことに注意 p not 1 # => false
p not nil # => true
! !
56 Ruby基礎演習
社会人技術者研修 2015年度テキスト
5.1 条件分岐 5.2 if修飾式 5.3 unless式 5.3 条件演算子
list5-1 fig3.rb
!
# 今が午後か午前かを表示hour = Time.now.hour # 時刻を得る if hour >= 12
p "今は午後です"
else
p "今は午前です"
!
endlist5-2 fig4.rb
!
# 年齢チェック age = 20puts (age < 20) ? "ng" : "ok" # 三項演算子 (条件演算子)
puts "ng" if age < 20 # if修飾子 puts "ok" unless age < 20 # unless修飾子
57 Ruby基礎演習
社会人技術者研修 2015年度テキスト
57
!
5.5 case式
list5-3 fig5.rb
!
# case式 num = 150 case num when 1 p "a"when 2,3,4 p "b"
when 100..200 p "c"
else p "???"
end
58 Ruby基礎演習
社会人技術者研修 2015年度テキスト
6 繰り返し処理
list6-1 fig6.rb
!
# 繰り返し処理 p "while:"num = 0
while num < 3 do puts num num += 1 end
!
p "for:"
for n in 1..3 do puts n
end
!
p "range:"
(5..8).each { |n|
puts n }
!
p "times:"
10.times do |n|
puts n end
!
59 Ruby基礎演習
社会人技術者研修 2015年度テキスト
58
!
5.5 case式
list5-3 fig5.rb
!
# case式 num = 150 case num when 1 p "a"when 2,3,4 p "b"
when 100..200 p "c"
else p "???"
end
58 Ruby基礎演習
社会人技術者研修 2015年度テキスト
6 繰り返し処理
list6-1 fig6.rb
!
# 繰り返し処理 p "while:"num = 0
while num < 3 do puts num num += 1 end
!
p "for:"
for n in 1..3 do puts n
end
!
p "range:"
(5..8).each { |n|
puts n }
!
p "times:"
10.times do |n|
puts n end
!
59 Ruby基礎演習
社会人技術者研修 2015年度テキスト
59
!
p "upto:"3.upto(8) do |n|
puts n end
!
p "downto:"
3.downto(-2) do |n|
puts n end
!
p "step:"
3.step(8,2) do |n|
puts n end
60 Ruby基礎演習
社会人技術者研修 2015年度テキスト
6.6 ループ脱出
list6-6 fig7.rb
!
(1..10).each {|n|break if n > 4 # breakでループを抜ける(if修飾子との組み合わせ)
p n # 1,2,3だけ表示される
count = n }
p "break."
!
p "next:"(1..10).each do |n|
next if n < 4 # ループの最初に戻る
p n # 1,2,3は表示されない
end
!
61 Ruby基礎演習
社会人技術者研修 2015年度テキスト
60
!
p "upto:"3.upto(8) do |n|
puts n end
!
p "downto:"
3.downto(-2) do |n|
puts n end
!
p "step:"
3.step(8,2) do |n|
puts n end
60 Ruby基礎演習
社会人技術者研修 2015年度テキスト
6.6 ループ脱出
list6-6 fig7.rb
!
(1..10).each {|n|break if n > 4 # breakでループを抜ける(if修飾子との組み合わせ)
p n # 1,2,3だけ表示される
count = n }
p "break."
!
p "next:"(1..10).each do |n|
next if n < 4 # ループの最初に戻る
p n # 1,2,3は表示されない
end
!
61 Ruby基礎演習
社会人技術者研修 2015年度テキスト
61
!
7.1 配列
list7-1 fig8.rb
!
a = [1, 2, 3, 9 , -1]puts a[0] # => 1 puts a[3] # => 9 puts "max = #{a.max}"
p "---"
b = [ "apple", "banana", "orange" ] puts b[2] # => orange
puts b[4].nil? #
puts "length = #{b.length}"
p "---"
c = [ "abcd", 3, "aaaa", 4.56 ] c[2] = 10
c[3] = [ 1, 2, 3]
c[1] = 1..5 c.each do |obj|
p obj end
!
62 Ruby基礎演習
社会人技術者研修 2015年度テキスト
7.2 ハッシュ
list7-2 fig9.rb
!
a = {"taro" => 18, "ken" => 20}p a["taro"]
p a["hoge"]
a["hanako"] = "unknown"
a.each do |key, value|
p "name: #{key} age: #{value}" if value.to_i > 19 end
p a p a.to_a
!
63 Ruby基礎演習
社会人技術者研修 2015年度テキスト
62
!
7.1 配列
list7-1 fig8.rb
!
a = [1, 2, 3, 9 , -1]puts a[0] # => 1 puts a[3] # => 9 puts "max = #{a.max}"
p "---"
b = [ "apple", "banana", "orange" ] puts b[2] # => orange
puts b[4].nil? #
puts "length = #{b.length}"
p "---"
c = [ "abcd", 3, "aaaa", 4.56 ] c[2] = 10
c[3] = [ 1, 2, 3]
c[1] = 1..5 c.each do |obj|
p obj end
!
62 Ruby基礎演習
社会人技術者研修 2015年度テキスト
7.2 ハッシュ
list7-2 fig9.rb
!
a = {"taro" => 18, "ken" => 20}p a["taro"]
p a["hoge"]
a["hanako"] = "unknown"
a.each do |key, value|
p "name: #{key} age: #{value}" if value.to_i > 19 end
p a p a.to_a
!
63 Ruby基礎演習
社会人技術者研修 2015年度テキスト
63
8. 1メソッド
list8-1 fig10-1.rb
!
def testfunc puts "Hello"end
!
def testfunc2( num = 100, memo = nil )
# "ng"
# "ok"
if num > 100
return "result" => "high", :memo => memo else
return "result" => "low", :memo => memo end
end
!
testfunc
puts testfunc2(90,"abcd") puts testfunc2(150)
puts testfunc2(200, "xxxx")
64 Ruby基礎演習
社会人技術者研修 2015年度テキスト
list8-2 fig12.rb
!
# ハッシュ経由で不定数データを渡す例def check_param1( params = {} ) name = param[:name]
age = param[:age]
p name, age
p "age ?? #{name}" if age.to_i < 20 end
!
def check_param2( params = {} ) p params[:school]end
!
data = {:name => "taro", :age => 15, :school => "aaaa"}
check_param1(data) check_param2(data)
!!
65 Ruby基礎演習
社会人技術者研修 2015年度テキスト
64
8. 1メソッド
list8-1 fig10-1.rb
!
def testfunc puts "Hello"end
!
def testfunc2( num = 100, memo = nil )
# "ng"
# "ok"
if num > 100
return "result" => "high", :memo => memo else
return "result" => "low", :memo => memo end
end
!
testfunc
puts testfunc2(90,"abcd") puts testfunc2(150)
puts testfunc2(200, "xxxx")
64 Ruby基礎演習
社会人技術者研修 2015年度テキスト
list8-2 fig12.rb
!
# ハッシュ経由で不定数データを渡す例def check_param1( params = {} ) name = param[:name]
age = param[:age]
p name, age
p "age ?? #{name}" if age.to_i < 20 end
!
def check_param2( params = {} ) p params[:school]end
!
data = {:name => "taro", :age => 15, :school => "aaaa"}
check_param1(data) check_param2(data)
!!
65 Ruby基礎演習
社会人技術者研修 2015年度テキスト
65
!
list8-3 fig11-1.rb!
# 現在時刻を表示 def get_datetime str = Time.nowstr = d.strftime("%Y年 %m月 %d日") end
p get_datetime
!!
66 Ruby基礎演習
社会人技術者研修 2015年度テキスト
list8-4 fig11-2.rb
!
!
# (参考)時刻計算を強力にサポートするライブラリrequire 'rubygems'
require 'active_support'
t = Time.now # Mon Sep 07 00:24:07 +0900 2009
t - 5.days # 5日前 (Wed Sep 02 00:24:07 +0900 2009) t - 1.week # 1週間前 (Mon Aug 31 00:24:07 +0900 2009) t - 2.years # 2年前 (Fri Sep 07 00:24:07 +0900 2007)
# xxx前には ago を使う
1.hour.ago # 1日前 (Sun Sep 06 23:24:07 +0900 2009) # xxx後には since を使う
2.days.since # 2日後 (Wed Sep 09 00:26:07 +0900 2009) t.yesterday # Mon Sep 06 00:24:07 +0900 2009
t.tomorrow # Mon Sep 08 00:24:07 +0900 2009
t.beginning_of_month # 月初め (Tue Sep 01 00:00:00 0900 2009) t.last_month # 1ヶ月前 (Fri Aug 07 00:24:07 0900 2009)
2.minutes.ago.class # Time クラスが返る
!
67 Ruby基礎演習
社会人技術者研修 2015年度テキスト
66
!
list8-3 fig11-1.rb!
# 現在時刻を表示 def get_datetime str = Time.nowstr = d.strftime("%Y年 %m月 %d日") end
p get_datetime
!!
66 Ruby基礎演習
社会人技術者研修 2015年度テキスト
list8-4 fig11-2.rb
!
!
# (参考)時刻計算を強力にサポートするライブラリrequire 'rubygems'
require 'active_support'
t = Time.now # Mon Sep 07 00:24:07 +0900 2009
t - 5.days # 5日前 (Wed Sep 02 00:24:07 +0900 2009) t - 1.week # 1週間前 (Mon Aug 31 00:24:07 +0900 2009) t - 2.years # 2年前 (Fri Sep 07 00:24:07 +0900 2007)
# xxx前には ago を使う
1.hour.ago # 1日前 (Sun Sep 06 23:24:07 +0900 2009) # xxx後には since を使う
2.days.since # 2日後 (Wed Sep 09 00:26:07 +0900 2009) t.yesterday # Mon Sep 06 00:24:07 +0900 2009
t.tomorrow # Mon Sep 08 00:24:07 +0900 2009
t.beginning_of_month # 月初め (Tue Sep 01 00:00:00 0900 2009) t.last_month # 1ヶ月前 (Fri Aug 07 00:24:07 0900 2009)
2.minutes.ago.class # Time クラスが返る
!
67 Ruby基礎演習
社会人技術者研修 2015年度テキスト
67
!
list8-4 fig11-3.rb!
# (参考)正規表現の使用def time_sub
/(\d+)-*(\d+)-(\d+) (\d+):(\d+):(\d+)/ =~ Time.now.to_s "#{$1}/#{$2}/#{$3} #{$4}:#{$5}:#{$6}"
end
puts time_sub
68 Ruby基礎演習
社会人技術者研修 2015年度テキスト
8.2 クラス
list8-5 fig13-1.rb
!
# 果物クラス class FruitDEFAULT_BRAND = "tsugaru"
def initialize(str = "apple")
@str_name = str # $B%$%s%9%?%s%9JQ?t(B @str_brand = "unknown" #
end
def name @str_name end
def brand @str_brand end
!
def set_name(str, brand) @str_name = str@str_brand = brand end
end
!
69 Ruby基礎演習
社会人技術者研修 2015年度テキスト
68
!
list8-4 fig11-3.rb!
# (参考)正規表現の使用def time_sub
/(\d+)-*(\d+)-(\d+) (\d+):(\d+):(\d+)/ =~ Time.now.to_s "#{$1}/#{$2}/#{$3} #{$4}:#{$5}:#{$6}"
end
puts time_sub
68 Ruby基礎演習
社会人技術者研修 2015年度テキスト
8.2 クラス
list8-5 fig13-1.rb
!
# 果物クラス class FruitDEFAULT_BRAND = "tsugaru"
def initialize(str = "apple")
@str_name = str # $B%$%s%9%?%s%9JQ?t(B @str_brand = "unknown" #
end
def name @str_name end
def brand @str_brand end
!
def set_name(str, brand) @str_name = str@str_brand = brand end
end
!
69 Ruby基礎演習
社会人技術者研修 2015年度テキスト
69
!
p "brand name : #{Fruit::DEFAULT_BRAND}"a = Fruit.new p a.brand
a.set_name("apple", "fuji") p a.brand
!
class Fruit # 多重定義 def xxxend end
70 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
list8-6 fig13-2.rb!
# 面積クラス class Areadef initialize(x=0, y=0)
@x = x
@y = y end
def calc_gross
@x * @y end
end
a = Area.new( 10, 20 ) p a.calc_gross
b = Area.new( ) p b.calc_gross
!!
71 Ruby基礎演習
社会人技術者研修 2015年度テキスト
70
!
p "brand name : #{Fruit::DEFAULT_BRAND}"a = Fruit.new p a.brand
a.set_name("apple", "fuji") p a.brand
!
class Fruit # 多重定義 def xxxend end
70 Ruby基礎演習
社会人技術者研修 2015年度テキスト
!
list8-6 fig13-2.rb!
# 面積クラス class Areadef initialize(x=0, y=0)
@x = x
@y = y end
def calc_gross
@x * @y end
end
a = Area.new( 10, 20 ) p a.calc_gross
b = Area.new( ) p b.calc_gross
!!
71 Ruby基礎演習
社会人技術者研修 2015年度テキスト
71