• 検索結果がありません。

Rubyプログラミングでの主な他要素

ドキュメント内 Ruby演習テキスト2015_本文.indd (ページ 48-90)

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”)


!

=begin

puts(“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”)


!

=begin

puts(“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 = 100


d+=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 "今は午前です"

!

end

list5-2 fig4.rb

!

# 年齢チェック
 age = 20

puts (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 = 100


d+=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 "今は午前です"

!

end

list5-2 fig4.rb

!

# 年齢チェック
 age = 20

puts (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.now

str = 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.now

str = 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 Fruit

DEFAULT_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 Fruit

DEFAULT_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 xxx

end end


70 Ruby基礎演習

社会人技術者研修 2015年度テキスト

!

list8-6 fig13-2.rb

!

# 面積クラス class Area

def 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 xxx

end end


70 Ruby基礎演習

社会人技術者研修 2015年度テキスト

!

list8-6 fig13-2.rb

!

# 面積クラス class Area

def 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

ドキュメント内 Ruby演習テキスト2015_本文.indd (ページ 48-90)

関連したドキュメント