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

Ruby演習テキスト2015_本文.indd

N/A
N/A
Protected

Academic year: 2021

シェア "Ruby演習テキスト2015_本文.indd"

Copied!
90
0
0

読み込み中.... (全文を見る)

全文

(1)

!

!

Ruby言語 基礎演習

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

!

!

2015.11


1 Ruby基礎演習 社会人技術者研修 2015年度テキスト

(2)

本テキストについて

各方面に注目されている国産プログラミング言語Rubyについて、

基本的な言語の概要と、一般的に利用される要素について解説、

本テキストはその解説補助とするものです

!

達成目標

Ruby言語の基礎的な部分の理解

インタプリタ型言語の特色を活かし対話的にプログラミング実習

既にあるコードを読んでいけるまでの理解

その後、各自がさらに習熟をすすめていけるところまでを目標

!

!

2 Ruby基礎演習 社会人技術者研修 2015年度テキスト

改訂・更新

2014.11 作成 2015.2.1 改訂 2015.11 改訂

!!

!

参考リファレンス:   Ruby 2.0.0 リファレンスマニュアル http://docs.ruby-lang.org/ja/2.0.0/doc/index.html
 3 Ruby基礎演習 社会人技術者研修 2015年度テキスト 2

(3)

本テキストについて

各方面に注目されている国産プログラミング言語Rubyについて、

基本的な言語の概要と、一般的に利用される要素について解説、

本テキストはその解説補助とするものです

!

達成目標

Ruby言語の基礎的な部分の理解

インタプリタ型言語の特色を活かし対話的にプログラミング実習

既にあるコードを読んでいけるまでの理解

その後、各自がさらに習熟をすすめていけるところまでを目標

!

!

2 Ruby基礎演習 社会人技術者研修 2015年度テキスト

改訂・更新

2014.11 作成 2015.2.1 改訂 2015.11 改訂

!!

!

参考リファレンス:   Ruby 2.0.0 リファレンスマニュアル http://docs.ruby-lang.org/ja/2.0.0/doc/index.html
 3 Ruby基礎演習 社会人技術者研修 2015年度テキスト 3

(4)

1. Rubyについて

1.1. Rubyの基礎知識

Rubyは、手軽にオブジェクト指向プログラミングができるスクリプト言語です。

近年ではWebアプリケーション開発用として登場したフレームワーク「Ruby on Rails」の普及により、

メジャーな開発言語の1つとなっています。

→ Rubyとは https://www.ruby-lang.org/ja/about/

!

4 Ruby基礎演習 社会人技術者研修 2015年度テキスト

1.2. 主な特徴

・インタプリタ言語


・簡潔で綺麗な記述の文法


・オブジェクト指向言語


・オープンソース、無料


・マルチプラットフォーム


・Ruby on Rails の他、多種のプラッットフォームやライブラリ


!

・日本発祥の開発言語(まつもとゆきひろ氏)


5 Ruby基礎演習 社会人技術者研修 2015年度テキスト 4

(5)

1. Rubyについて

1.1. Rubyの基礎知識

Rubyは、手軽にオブジェクト指向プログラミングができるスクリプト言語です。

近年ではWebアプリケーション開発用として登場したフレームワーク「Ruby on Rails」の普及により、

メジャーな開発言語の1つとなっています。

→ Rubyとは https://www.ruby-lang.org/ja/about/

!

4 Ruby基礎演習 社会人技術者研修 2015年度テキスト

1.2. 主な特徴

・インタプリタ言語


・簡潔で綺麗な記述の文法


・オブジェクト指向言語


・オープンソース、無料


・マルチプラットフォーム


・Ruby on Rails の他、多種のプラッットフォームやライブラリ


!

・日本発祥の開発言語(まつもとゆきひろ氏)


5 Ruby基礎演習 社会人技術者研修 2015年度テキスト 5

(6)

1.3. Rubyのインストール

様々なインストール方法がある(標準でインストールされているOS環境もある)


まずは本家Ruby.org(https://www.ruby-lang.org/ja/)を確認、


各OS環境でインストールできる情報から調べてみるとよい

- バージョン

 1.8系


 1.9系


 2.0系以降(最新は2.3系)

現在は2.0以降が主

※OSによっては標準でインストールされているが、バージョンが古いケースもある。


 ただし基本的な記述の大幅な変化は少ない

スマホ上で動くRubyも近年では出てきている

!

!

6 Ruby基礎演習 社会人技術者研修 2015年度テキスト

1.4. テキストエディタについて

普通のテキストエディタでとりあずは始められる


開発者がよく使うエディタでは

・sublime text


・emacs


・vim


・rubymine


・eclipse

などが使われています。


7 Ruby基礎演習 社会人技術者研修 2015年度テキスト 6

(7)

1.3. Rubyのインストール

様々なインストール方法がある(標準でインストールされているOS環境もある)


まずは本家Ruby.org(https://www.ruby-lang.org/ja/)を確認、


各OS環境でインストールできる情報から調べてみるとよい

- バージョン

 1.8系


 1.9系


 2.0系以降(最新は2.3系)

現在は2.0以降が主

※OSによっては標準でインストールされているが、バージョンが古いケースもある。


 ただし基本的な記述の大幅な変化は少ない

スマホ上で動くRubyも近年では出てきている

!

!

6 Ruby基礎演習 社会人技術者研修 2015年度テキスト

1.4. テキストエディタについて

普通のテキストエディタでとりあずは始められる


開発者がよく使うエディタでは

・sublime text


・emacs


・vim


・rubymine


・eclipse

などが使われています。


7 Ruby基礎演習 社会人技術者研修 2015年度テキスト 7

(8)

1.5. コマンドプロンプトの操作

本演習では各OSのコマンドライン(DOSプロンプト等)を利用します。


各OSのコマンド操作の基礎的な操作を必要とします

・Windows → コマンド


・MacOS → ターミナル

!

!

8 Ruby基礎演習 社会人技術者研修 2015年度テキスト

2. さっそく動かしてみる

2.1.

最初のプログラム

テキストエディタを使って下のコードを入力し、


「hello.rb」という名前で保存してください。

hello.rb puts "Hello! Ruby”


!

ファイル保存後、コマンドラインから以下のようにで実行します

>ruby hello.rb (リターン)

すると以下のように画面出力されます。


このプログラムでは、ただ文字を画面に出力するだけの動作です。

> ruby hello.rb
 Hello! Ruby

!

9 Ruby基礎演習 社会人技術者研修 2015年度テキスト 8

(9)

1.5. コマンドプロンプトの操作

本演習では各OSのコマンドライン(DOSプロンプト等)を利用します。


各OSのコマンド操作の基礎的な操作を必要とします

・Windows → コマンド


・MacOS → ターミナル

!

!

8 Ruby基礎演習 社会人技術者研修 2015年度テキスト

2. さっそく動かしてみる

2.1.

最初のプログラム

テキストエディタを使って下のコードを入力し、


「hello.rb」という名前で保存してください。

hello.rb puts "Hello! Ruby”


!

ファイル保存後、コマンドラインから以下のようにで実行します

>ruby hello.rb (リターン)

すると以下のように画面出力されます。


このプログラムでは、ただ文字を画面に出力するだけの動作です。

> ruby hello.rb
 Hello! Ruby

!

9 Ruby基礎演習 社会人技術者研修 2015年度テキスト 9

(10)

2.2.コメント記述

プログラムの記述意外に、メモや注釈を入れてみます。

# はじめてのrubyプログラム
 puts "Hello! Ruby"

Ruby言語におけるコメント記述は 半角 # から続く行の終わりまでが対象となります。

実行してみましょう。

> ruby hello.rb
 Hello! Ruby


!

コメント行は何も実行しないので、同じ結果となります。


(他に =begin ~ =end 記述の方法もあります)

!

10 Ruby基礎演習 社会人技術者研修 2015年度テキスト

2.3.セミコロン記述

通常は1行で1つの処理ですが、セミコロン「;」を改行の替わりに使う事も出来ます。

puts "Hello! Ruby”; puts ”Bye!”


!

(実行結果)

> ruby hello.rb
 Hello! Ruby
 Bye!

!

2.4.ワンライナー実行

コマンドラインから1行だけRubyプログラムを実行することができます。

>ruby -e 'puts "Hello world"'
 Hello world

!

11 Ruby基礎演習 社会人技術者研修 2015年度テキスト 10

(11)

2.2.コメント記述

プログラムの記述意外に、メモや注釈を入れてみます。

# はじめてのrubyプログラム
 puts "Hello! Ruby"

Ruby言語におけるコメント記述は 半角 # から続く行の終わりまでが対象となります。

実行してみましょう。

> ruby hello.rb
 Hello! Ruby


!

コメント行は何も実行しないので、同じ結果となります。


(他に =begin ~ =end 記述の方法もあります)

!

10 Ruby基礎演習 社会人技術者研修 2015年度テキスト

2.3.セミコロン記述

通常は1行で1つの処理ですが、セミコロン「;」を改行の替わりに使う事も出来ます。

puts "Hello! Ruby”; puts ”Bye!”


!

(実行結果)

> ruby hello.rb
 Hello! Ruby
 Bye!

!

2.4.ワンライナー実行

コマンドラインから1行だけRubyプログラムを実行することができます。

>ruby -e 'puts "Hello world"'
 Hello world

!

11 Ruby基礎演習 社会人技術者研修 2015年度テキスト 11

(12)

!

2.5.対話環境(irb)

Rubyの実行を対話的に操作する環境があります。


命令実行を確認したりする場合にはこちらが便利です。

>irb
 irb(main):001:0> puts "Hello world"
 Hello world
 => nil
 irb(main):002:0>


!

終了するには exit か quit を入力


12 Ruby基礎演習 社会人技術者研修 2015年度テキスト

3. 変数と定数

3.1.文字列 

文字列はダブルコーテーション、またはシングルコーテーションで囲み、次のように代入します

str = "Hello"
 str = ‘Hello' ※ダブルコーテーションをシングルコーテーションで囲むと
 ダブルコーテーションも文字列に含まれます その逆も可

!

特殊文字(他にもありますが略)

¥t タブ
 ¥n 改行
 ¥r リターン
 ¥f 改ページ
 ¥s 空白

!

以下のように記述します

puts "Hello!¥nBye!”
 
 > ruby hello.rb
 Hello!
 Bye!
 13 Ruby基礎演習 社会人技術者研修 2015年度テキスト 12

(13)

!

2.5.対話環境(irb)

Rubyの実行を対話的に操作する環境があります。


命令実行を確認したりする場合にはこちらが便利です。

>irb
 irb(main):001:0> puts "Hello world"
 Hello world
 => nil
 irb(main):002:0>


!

終了するには exit か quit を入力


12 Ruby基礎演習 社会人技術者研修 2015年度テキスト

3. 変数と定数

3.1.文字列 

文字列はダブルコーテーション、またはシングルコーテーションで囲み、次のように代入します

str = "Hello"
 str = ‘Hello' ※ダブルコーテーションをシングルコーテーションで囲むと
 ダブルコーテーションも文字列に含まれます その逆も可

!

特殊文字(他にもありますが略)

¥t タブ
 ¥n 改行
 ¥r リターン
 ¥f 改ページ
 ¥s 空白

!

以下のように記述します

puts "Hello!¥nBye!”
 
 > ruby hello.rb
 Hello!
 Bye!
 13 Ruby基礎演習 社会人技術者研修 2015年度テキスト 13

(14)

3.2.数値

整数値の記述だと整数、小数点以下が含まれると小数拡張して扱われることに注意。

fig2.rb # 変数num1に整数123を代入、num2に小数10.8を代入
 num1 = 123 # 整数
 num2 = 10.8 # 小数

!

(その他)

0x1fff # 16進 0b1011 # 2進
 4e20 # 指数

!

14 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

3.3.変数

変数は小文字または _ で始まる識別子で記述


Rubyには型宣言が無い(全てがオブジェクト)

ローカル変数

foo = 1 # 数値代入
 foo = "FOO" # 文字列代入
 _value = 100

!

グローバル変数は先頭が$

$bar = 999

!

インスタンス変数、クラス変数(後述)

@value = 123 # インスタンス変数
 @@test = 0 # クラス変数


!

!

15 Ruby基礎演習 社会人技術者研修 2015年度テキスト 14

(15)

3.2.数値

整数値の記述だと整数、小数点以下が含まれると小数拡張して扱われることに注意。

fig2.rb # 変数num1に整数123を代入、num2に小数10.8を代入
 num1 = 123 # 整数
 num2 = 10.8 # 小数

!

(その他)

0x1fff # 16進 0b1011 # 2進
 4e20 # 指数

!

14 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

3.3.変数

変数は小文字または _ で始まる識別子で記述


Rubyには型宣言が無い(全てがオブジェクト)

ローカル変数

foo = 1 # 数値代入
 foo = "FOO" # 文字列代入
 _value = 100

!

グローバル変数は先頭が$

$bar = 999

!

インスタンス変数、クラス変数(後述)

@value = 123 # インスタンス変数
 @@test = 0 # クラス変数


!

!

15 Ruby基礎演習 社会人技術者研修 2015年度テキスト 15

(16)

※Rubyの変数はその値を指すメモリ領域ということに注意

(参考: 値渡しと参照渡しの違いを理解する ー Rubyist Magazine) → http://magazine.rubyist.net/?0032-CallByValueAndCallByReference

!

16 Ruby基礎演習 社会人技術者研修 2015年度テキスト

3.4.定数

アルファベット大文字で始まる識別子が定数

FOO = 'FOO'

※true,falseについては予約語(疑似変数)として予約済み

true (真)
 false (偽)

!

3.5.nil値

nil は「値のない状態」を示す

foo = nil

!

他言語におけるNULL等に相当

!

17 Ruby基礎演習 社会人技術者研修 2015年度テキスト 16

(17)

※Rubyの変数はその値を指すメモリ領域ということに注意

(参考: 値渡しと参照渡しの違いを理解する ー Rubyist Magazine) → http://magazine.rubyist.net/?0032-CallByValueAndCallByReference

!

16 Ruby基礎演習 社会人技術者研修 2015年度テキスト

3.4.定数

アルファベット大文字で始まる識別子が定数

FOO = 'FOO'

※true,falseについては予約語(疑似変数)として予約済み

true (真)
 false (偽)

!

3.5.nil値

nil は「値のない状態」を示す

foo = nil

!

他言語におけるNULL等に相当

!

17 Ruby基礎演習 社会人技術者研修 2015年度テキスト 17

(18)

4. 演算子

4.1.四則演算など

演算子の記述

* 乗算
 / 除算
 + 加算 
 - 減算 
 % 剰余
 ** べき乗
 
 d = 100 + 23 # ans. 123 


!

演算子の優先順位

参考 http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2foperator.html

!

18 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

4.2.代入演算子

動作例

d = 100 d += 1 # => 101 d -= 1 # => 100 d *= 2 # => 200 d **= 2 # => 4000

!

!

※インクリメント、デクリメント演算子はRubyにはありません

!

19 Ruby基礎演習 社会人技術者研修 2015年度テキスト 18

(19)

4. 演算子

4.1.四則演算など

演算子の記述

* 乗算
 / 除算
 + 加算 
 - 減算 
 % 剰余
 ** べき乗
 
 d = 100 + 23 # ans. 123 


!

演算子の優先順位

参考 http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2foperator.html

!

18 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

4.2.代入演算子

動作例

d = 100 d += 1 # => 101 d -= 1 # => 100 d *= 2 # => 200 d **= 2 # => 4000

!

!

※インクリメント、デクリメント演算子はRubyにはありません

!

19 Ruby基礎演習 社会人技術者研修 2015年度テキスト 19

(20)

4.3.その他の演算子

演算子の記述

= 代入演算子(これも演算として考える) && and 論理演算子 || or 論理演算子 ! not 論理演算子 .. 範囲演算子 ... 範囲演算子 :: スコープ演算子 ?: 条件演算子
 20 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5. 条件分岐

5.1.if式

記述

if 条件式 then 式 else 式 end

!

※then表記、else式 は省略できます

動作例

fig4.rb 今が午後か午前かを表示 # coding: UTF-8 hour = Time.now.hour # 時刻を得る if hour >= 12 p "今は午後です" else p "今は午前です" end
 21 Ruby基礎演習 社会人技術者研修 2015年度テキスト 20

(21)

4.3.その他の演算子

演算子の記述

= 代入演算子(これも演算として考える) && and 論理演算子 || or 論理演算子 ! not 論理演算子 .. 範囲演算子 ... 範囲演算子 :: スコープ演算子 ?: 条件演算子
 20 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5. 条件分岐

5.1.if式

記述

if 条件式 then 式 else 式 end

!

※then表記、else式 は省略できます

動作例

fig4.rb 今が午後か午前かを表示 # coding: UTF-8 hour = Time.now.hour # 時刻を得る if hour >= 12 p "今は午後です" else p "今は午前です" end
 21 Ruby基礎演習 社会人技術者研修 2015年度テキスト 21

(22)

5.2. if修飾式

文の末尾にif式を置く事で、そのif式の結果により前方の文の実行が行われます。

記述

式 if 条件式

!

動作例

puts "ok" if true # => “ok”

!

通常のif式構文より凝縮して記述ができる。Rubyの特徴

!

22 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5.3.unless式

unless式は、if文の真偽逆の動きを行う

記述

unless 条件式 then 式 else 式 end

!

式 unless 条件式

!

(if not を使うか、unlessを使うかは好みの問題)


23 Ruby基礎演習

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

(23)

5.2. if修飾式

文の末尾にif式を置く事で、そのif式の結果により前方の文の実行が行われます。

記述

式 if 条件式

!

動作例

puts "ok" if true # => “ok”

!

通常のif式構文より凝縮して記述ができる。Rubyの特徴

!

22 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5.3.unless式

unless式は、if文の真偽逆の動きを行う

記述

unless 条件式 then 式 else 式 end

!

式 unless 条件式

!

(if not を使うか、unlessを使うかは好みの問題)


23 Ruby基礎演習

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

(24)

5.4.条件演算子

C言語での三項演算子と同類

記述

評価式 ? 式 : 式

!

動作例

age = 20 puts (age < 20) ? "ng" : “ok"  # => “ok”

!

a = true ? "ok" : "ng" puts a # => "ok"

!

if修飾式と同様に凝縮した記述ができる


24 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5.5.case式

C言語やJavaでのswitch~case文等に相当

記述

case 評価対象 when 値1 then 値1と一致する場合に行う処理 when 値2 then 値2と一致する場合に行う処理 else どの値にも一致しない場合に行う処理 end


!

thenは省略可能


※C言語におけるbreak記述はなく、when、elseの中の処理後は必ずendへ抜けます。

!

25 Ruby基礎演習 社会人技術者研修 2015年度テキスト 24

(25)

5.4.条件演算子

C言語での三項演算子と同類

記述

評価式 ? 式 : 式

!

動作例

age = 20 puts (age < 20) ? "ng" : “ok"  # => “ok”

!

a = true ? "ok" : "ng" puts a # => "ok"

!

if修飾式と同様に凝縮した記述ができる


24 Ruby基礎演習 社会人技術者研修 2015年度テキスト

5.5.case式

C言語やJavaでのswitch~case文等に相当

記述

case 評価対象 when 値1 then 値1と一致する場合に行う処理 when 値2 then 値2と一致する場合に行う処理 else どの値にも一致しない場合に行う処理 end


!

thenは省略可能


※C言語におけるbreak記述はなく、when、elseの中の処理後は必ずendへ抜けます。

!

25 Ruby基礎演習 社会人技術者研修 2015年度テキスト 25

(26)

!

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 # => "c"

!

詳細参考
 http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html

!

26 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6. 繰り返し処理

6.1.while式

記述

while 評価式 do end

!

動作例

n = 1 while n <= 3 do puts n # 1,2,3の順で表示出力 n += 1 end

!

27 Ruby基礎演習 社会人技術者研修 2015年度テキスト 26

(27)

!

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 # => "c"

!

詳細参考
 http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html

!

26 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6. 繰り返し処理

6.1.while式

記述

while 評価式 do end

!

動作例

n = 1 while n <= 3 do puts n # 1,2,3の順で表示出力 n += 1 end

!

27 Ruby基礎演習 社会人技術者研修 2015年度テキスト 27

(28)

6.2.for式

記述

for 識別子 in 式 do end

!

動作例

for n in 1..3 do # 1..3 は1から3を示す範囲記述 puts n end

!

28 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6.3.範囲オブジェクト等

記述例

1..10


 # 1から10までの整数の集合を示す表現


!

[1,2,3,4]


 # 配列表現


!

{ "apple" => 1, "orange" => 2, "banana" => 3 }


 # ハッシュ表現


!

29 Ruby基礎演習 社会人技術者研修 2015年度テキスト 28

(29)

6.2.for式

記述

for 識別子 in 式 do end

!

動作例

for n in 1..3 do # 1..3 は1から3を示す範囲記述 puts n end

!

28 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6.3.範囲オブジェクト等

記述例

1..10


 # 1から10までの整数の集合を示す表現


!

[1,2,3,4]


 # 配列表現


!

{ "apple" => 1, "orange" => 2, "banana" => 3 }


 # ハッシュ表現


!

29 Ruby基礎演習 社会人技術者研修 2015年度テキスト 29

(30)

6.4.eachメソッド

記述

オブジェクト.each do |識別子|
 end
 # ※オブジェクトは範囲オブジェクトや配列など 


!

動作例

a = [1,3,5] 
 a.each do |n|
 puts n  # 1,3,5と出力
 end
 30 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6.5.その他の繰り返し式

他にも様々な記述がある

fig6.rb 繰り返し式記述例 # 5回繰り返し 5.times { puts "hello" }

!

# 3から7まで昇順に繰り返し 3.upto(7) {|n| puts n }

!

# 3から-2まで降順に繰り返し 3.downto(-2) {|n| puts n }

!

# 3から9まで2刻みで繰り返し 3.step(9,2) {|n| puts n }

!

※do~endはと{~}の記述は同義

!

31 Ruby基礎演習 社会人技術者研修 2015年度テキスト 30

(31)

6.4.eachメソッド

記述

オブジェクト.each do |識別子|
 end
 # ※オブジェクトは範囲オブジェクトや配列など 


!

動作例

a = [1,3,5] 
 a.each do |n|
 puts n  # 1,3,5と出力
 end
 30 Ruby基礎演習 社会人技術者研修 2015年度テキスト

6.5.その他の繰り返し式

他にも様々な記述がある

fig6.rb 繰り返し式記述例 # 5回繰り返し 5.times { puts "hello" }

!

# 3から7まで昇順に繰り返し 3.upto(7) {|n| puts n }

!

# 3から-2まで降順に繰り返し 3.downto(-2) {|n| puts n }

!

# 3から9まで2刻みで繰り返し 3.step(9,2) {|n| puts n }

!

※do~endはと{~}の記述は同義

!

31 Ruby基礎演習 社会人技術者研修 2015年度テキスト 31

(32)

6.6.ループ脱出等

break

脱出


next

ループの最初に戻る

!

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

!

!

32 Ruby基礎演習 社会人技術者研修 2015年度テキスト

演習

!

Q1.�1から100まで画面出力する(2通り以上の方法で)

!!

!

Q2.�1から10のループのうち、3、4、8、9だけを表示

!!

!

Q3. 1から100の総和を求める

!!

!!

33 Ruby基礎演習 社会人技術者研修 2015年度テキスト 32

(33)

6.6.ループ脱出等

break

脱出


next

ループの最初に戻る

!

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

!

!

32 Ruby基礎演習 社会人技術者研修 2015年度テキスト

演習

!

Q1.�1から100まで画面出力する(2通り以上の方法で)

!!

!

Q2.�1から10のループのうち、3、4、8、9だけを表示

!!

!

Q3. 1から100の総和を求める

!!

!!

33 Ruby基礎演習 社会人技術者研修 2015年度テキスト 33

(34)

7. 配列とハッシュ

7.1.配列

fig8.rb 配列操作例

!

配列と要素参照

a = [1, 2, 3, 9 , -1] # 一次元配列の格納 puts a[0] # => 1 # 要素の参照 puts a[3] # => 9 puts "max = #{a.max}" # 配列の中の最大値を得る

!

配列要素の追加

a = [1,3,5,7] a << 2 # [1,3,5,7,2] になる

!

文字列の配列格納と参照

b = [ "apple", "banana", "orange" ] puts b[2] # => orange puts b[4].nil? # => true puts "length = #{b.length}" # => 3
 34 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

異なる型の配列格納と参照

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 # 1..5, 10, [1,2,3], 4.56 が表示される

!

!

※ %記法 という記述もあります(詳細はリファレンスマニュアル等参照)

%w(foo bar baz) という記述は

!

['foo', 'bar', ‘baz’]   と同じ
 35 Ruby基礎演習 社会人技術者研修 2015年度テキスト 34

(35)

7. 配列とハッシュ

7.1.配列

fig8.rb 配列操作例

!

配列と要素参照

a = [1, 2, 3, 9 , -1] # 一次元配列の格納 puts a[0] # => 1 # 要素の参照 puts a[3] # => 9 puts "max = #{a.max}" # 配列の中の最大値を得る

!

配列要素の追加

a = [1,3,5,7] a << 2 # [1,3,5,7,2] になる

!

文字列の配列格納と参照

b = [ "apple", "banana", "orange" ] puts b[2] # => orange puts b[4].nil? # => true puts "length = #{b.length}" # => 3
 34 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

異なる型の配列格納と参照

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 # 1..5, 10, [1,2,3], 4.56 が表示される

!

!

※ %記法 という記述もあります(詳細はリファレンスマニュアル等参照)

%w(foo bar baz) という記述は

!

['foo', 'bar', ‘baz’]   と同じ
 35 Ruby基礎演習 社会人技術者研修 2015年度テキスト 35

(36)

演習

!

Q4. 任意の配列の要素の総和を求める��例[3,4,8,9]

!!

!

Q5. 任意の配列を引数として、奇数だけの要素の配列を返すメソッドを作る

!!

!

Q6. Q5から、さらに3〜7までの要素に絞り、総和と配列を返すメソッドを作る

!

36 Ruby基礎演習 社会人技術者研修 2015年度テキスト

7.2.ハッシュ

fig9.rb ハッシュ操作例

!

ハッシュ (JavascriptやPHPの連想配列と同類)

a = {"taro" => 18, "ken" => 20} p a["taro"] # => 18 p a["hoge"] # => nil (該当がない)


!

ハッシュの代入

a["hanako"] = “unknown"


!

ハッシュの列挙参照

a.each do |key, value|
 # 20以上の要素だけ表示 p "name: #{key} age: #{value}" if value.to_i > 19 end


!

ハッシュを配列に変換

p a # =>{"taro" => 18, "ken" => 20, ”hanako”=> "unknown"} p a.to_a # =>[[“taro” => 18], [“ken" => 20], [hanako”=> “unknown”]]
 37 Ruby基礎演習 社会人技術者研修 2015年度テキスト 36

(37)

演習

!

Q4. 任意の配列の要素の総和を求める��例[3,4,8,9]

!!

!

Q5. 任意の配列を引数として、奇数だけの要素の配列を返すメソッドを作る

!!

!

Q6. Q5から、さらに3〜7までの要素に絞り、総和と配列を返すメソッドを作る

!

36 Ruby基礎演習 社会人技術者研修 2015年度テキスト

7.2.ハッシュ

fig9.rb ハッシュ操作例

!

ハッシュ (JavascriptやPHPの連想配列と同類)

a = {"taro" => 18, "ken" => 20} p a["taro"] # => 18 p a["hoge"] # => nil (該当がない)


!

ハッシュの代入

a["hanako"] = “unknown"


!

ハッシュの列挙参照

a.each do |key, value|
 # 20以上の要素だけ表示 p "name: #{key} age: #{value}" if value.to_i > 19 end


!

ハッシュを配列に変換

p a # =>{"taro" => 18, "ken" => 20, ”hanako”=> "unknown"} p a.to_a # =>[[“taro” => 18], [“ken" => 20], [hanako”=> “unknown”]]
 37 Ruby基礎演習 社会人技術者研修 2015年度テキスト 37

(38)

8. メソッドとクラス

8.1.メソッド

C言語などの「関数」にあたるものをRubyでは「

メソッド

」と呼びます。


あるプログラムの手続きをまとめたものと考えます。

fig10-1.rb メソッド基本

!

def testfunc # 引数のない場合は括弧の省略可 "Hello" end # 最後の評価された式の値が返る(この場合"Hello")

!

def testfunc2( num = 100, memo = nil ) # 引数あり、デフォルト引数指定可 if num > 100 return "result" => "high", :memo => memo # 複数の返り値 else return "result" => "low", :memo => memo end end


!

puts testfunc # => “Hello” puts testfunc2(90,"abcd") # => {“result”=>”low”, :memo => “abcd”} puts testfunc2(150) # => {“result”=>”high”, :memo => nil}


!

!

38 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

メソッド名は小文字から始まる英数字


引数は省略、仮引数、デフォルト引数の指定可能


(他にも可変個数引数などの記述が可能)

!

メソッドの帰り値は、メソッド呼び出しから戻る直前の評価式の値、または return に渡された値


複数の帰り値を返す記述も可能

!

39 Ruby基礎演習 社会人技術者研修 2015年度テキスト 38

(39)

8. メソッドとクラス

8.1.メソッド

C言語などの「関数」にあたるものをRubyでは「

メソッド

」と呼びます。


あるプログラムの手続きをまとめたものと考えます。

fig10-1.rb メソッド基本

!

def testfunc # 引数のない場合は括弧の省略可 "Hello" end # 最後の評価された式の値が返る(この場合"Hello")

!

def testfunc2( num = 100, memo = nil ) # 引数あり、デフォルト引数指定可 if num > 100 return "result" => "high", :memo => memo # 複数の返り値 else return "result" => "low", :memo => memo end end


!

puts testfunc # => “Hello” puts testfunc2(90,"abcd") # => {“result”=>”low”, :memo => “abcd”} puts testfunc2(150) # => {“result”=>”high”, :memo => nil}


!

!

38 Ruby基礎演習 社会人技術者研修 2015年度テキスト

!

メソッド名は小文字から始まる英数字


引数は省略、仮引数、デフォルト引数の指定可能


(他にも可変個数引数などの記述が可能)

!

メソッドの帰り値は、メソッド呼び出しから戻る直前の評価式の値、または return に渡された値


複数の帰り値を返す記述も可能

!

39 Ruby基礎演習 社会人技術者研修 2015年度テキスト 39

(40)

演習

!

Q7. 指定ファイルの総文字数をカウントして出力

!

!!

Q8. 指定ファイル内容を大文字に変換して出力�

!!

!

Q9. 指定ファイルから任意の文字のある行だけを表示する(行番号付き)�

!

40 Ruby基礎演習 社会人技術者研修 2015年度テキスト

8.2.クラス

オブジェクトに関する 定義と手続き をまとめたものを「クラス」と呼びます。

fig13-1.rb クラス基本 class Fruit #クラス名は大文字から
 DEFAULT_BRAND = “tsugaru” #定数定義

!

def initialize(str = “apple") # initializeは、このクラスのインスタンスが生成された直後に呼び出される @str_name = str @str_brand = "unknown" end def name # クラスメソッド定義(C++で言うところのメンバ関数) @str_name end def brand # @str_brand end


!

def set_name(str, brand) @str_name = str     @str_brand = brand end
 end # Fruitクラス定義ここまで

!

41 Ruby基礎演習 社会人技術者研修 2015年度テキスト 40

(41)

演習

!

Q7. 指定ファイルの総文字数をカウントして出力

!

!!

Q8. 指定ファイル内容を大文字に変換して出力�

!!

!

Q9. 指定ファイルから任意の文字のある行だけを表示する(行番号付き)�

!

40 Ruby基礎演習 社会人技術者研修 2015年度テキスト

8.2.クラス

オブジェクトに関する 定義と手続き をまとめたものを「クラス」と呼びます。

fig13-1.rb クラス基本 class Fruit #クラス名は大文字から
 DEFAULT_BRAND = “tsugaru” #定数定義

!

def initialize(str = “apple") # initializeは、このクラスのインスタンスが生成された直後に呼び出される @str_name = str @str_brand = "unknown" end def name # クラスメソッド定義(C++で言うところのメンバ関数) @str_name end def brand # @str_brand end


!

def set_name(str, brand) @str_name = str     @str_brand = brand end
 end # Fruitクラス定義ここまで

!

41 Ruby基礎演習 社会人技術者研修 2015年度テキスト 41

(42)

!

p "brand name : #{Fruit::DEFAULT_BRAND}”   # => "tsugaru" a = Fruit.new # aはFruitクラスのインスタンス p a.brand # => “unknown” a.set_name("apple", "fuji") p a.brand # => “fuji”

!!

42 Ruby基礎演習 社会人技術者研修 2015年度テキスト

8.3.クラス継承

fig13-3.rb クラス継承

!

class Area # 面積を扱うクラス def initialize(x=0, y=0) @x = x; @y = y # @つきの変数はクラス変数 end def calc_gross @x * @y end end

!

class Area_3D < Area # 面積クラスの要素を継承して体積クラスを定義 def initialize(x=1, y=1, z=1) super(x,y) # superは継承元の同じメソッドを呼び出す @z = z end def calc_gross super * @z end end

!

a = Area_3D.new( 10, 20, 30 ) p a.calc_gross

!

43 Ruby基礎演習 社会人技術者研修 2015年度テキスト 42

(43)

!

p "brand name : #{Fruit::DEFAULT_BRAND}”   # => "tsugaru" a = Fruit.new # aはFruitクラスのインスタンス p a.brand # => “unknown” a.set_name("apple", "fuji") p a.brand # => “fuji”

!!

42 Ruby基礎演習 社会人技術者研修 2015年度テキスト

8.3.クラス継承

fig13-3.rb クラス継承

!

class Area # 面積を扱うクラス def initialize(x=0, y=0) @x = x; @y = y # @つきの変数はクラス変数 end def calc_gross @x * @y end end

!

class Area_3D < Area # 面積クラスの要素を継承して体積クラスを定義 def initialize(x=1, y=1, z=1) super(x,y) # superは継承元の同じメソッドを呼び出す @z = z end def calc_gross super * @z end end

!

a = Area_3D.new( 10, 20, 30 ) p a.calc_gross

!

43 Ruby基礎演習 社会人技術者研修 2015年度テキスト 43

(44)

9. モジュール

モジュールはインスタンスを生成できない、継承もできない、


共通部品のようなものと考えるとよい

fig14-1.rb モジュール

!

module Check_data def check_range(value) value >= 20 end end

!

class Test include Check_data # クラスの中にモジュール組み込み end

!

class Test2 include Check_data # end

!

a = Test.new b = Test2.new p a.check_range(20) p b.check_range(19)

!

44 Ruby基礎演習 社会人技術者研修 2015年度テキスト

10.演習

10.1.標準ライブラリの利用

Ruby標準のライブラリを用いてWebサーバからページをGet。

fig_net-1.rb HTTPサーバアクセス1

!

require 'net/http' # 標準ライブラリ/ネットワーク require 'uri' # URIパーサ uri = URI.parse('http://www.yahoo.co.jp/') puts Net::HTTP.get(uri) # YahooトップをGetしてHTMLソース表示

!

45 Ruby基礎演習 社会人技術者研修 2015年度テキスト 44

(45)

9. モジュール

モジュールはインスタンスを生成できない、継承もできない、


共通部品のようなものと考えるとよい

fig14-1.rb モジュール

!

module Check_data def check_range(value) value >= 20 end end

!

class Test include Check_data # クラスの中にモジュール組み込み end

!

class Test2 include Check_data # end

!

a = Test.new b = Test2.new p a.check_range(20) p b.check_range(19)

!

44 Ruby基礎演習 社会人技術者研修 2015年度テキスト

10.演習

10.1.標準ライブラリの利用

Ruby標準のライブラリを用いてWebサーバからページをGet。

fig_net-1.rb HTTPサーバアクセス1

!

require 'net/http' # 標準ライブラリ/ネットワーク require 'uri' # URIパーサ uri = URI.parse('http://www.yahoo.co.jp/') puts Net::HTTP.get(uri) # YahooトップをGetしてHTMLソース表示

!

45 Ruby基礎演習 社会人技術者研修 2015年度テキスト 45

(46)

10.2.標準ライブラリの利用(2)

Yahooページから東京の天気の情報を確認して返すモジュール

fig_net-1a.rb HTTPサーバアクセス2 module YahooTenki require 'net/http' require 'uri'

!

def tokyo uri = URI.parse('http://weather.yahoo.co.jp/weather/jp/13/4410.html') data = Net::HTTP.get(uri) doc = data tags = doc.scan(/\<.*\>.*\<.*\>/) tags.each do |tag| if tag.index('class="pict"') p tag break end end #result end module_function :tokyo end

!

YahooTenki::Tokyo
 46 Ruby基礎演習 社会人技術者研修 2015年度テキスト

10.3.外部ライブラリの利用

Yahooページから東京の天気の情報を確認して返すモジュール


(nokogiri gemライブラリ利用)

fig_net-1a.rb HTTPサーバアクセス・外部ライブラリ # encoding: utf-8 module YahooTenki require 'nokogiri' # Webスクレイピングライブラリ require 'open-uri' require 'kconv'

!

def Tokyo url = 'http://weather.yahoo.co.jp/weather/jp/13/4410.html' charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) doc.css("p.pict")[0].text end module_function :tokyo end

!

print "今日の東京の天気は #{YahooTenki::tokyo} です。".toutf8, “\n”
      #(↑#{}記述での文字列内式展開)

!

47 Ruby基礎演習 社会人技術者研修 2015年度テキスト 46

(47)

10.2.標準ライブラリの利用(2)

Yahooページから東京の天気の情報を確認して返すモジュール

fig_net-1a.rb HTTPサーバアクセス2 module YahooTenki require 'net/http' require 'uri'

!

def tokyo uri = URI.parse('http://weather.yahoo.co.jp/weather/jp/13/4410.html') data = Net::HTTP.get(uri) doc = data tags = doc.scan(/\<.*\>.*\<.*\>/) tags.each do |tag| if tag.index('class="pict"') p tag break end end #result end module_function :tokyo end

!

YahooTenki::Tokyo
 46 Ruby基礎演習 社会人技術者研修 2015年度テキスト

10.3.外部ライブラリの利用

Yahooページから東京の天気の情報を確認して返すモジュール


(nokogiri gemライブラリ利用)

fig_net-1a.rb HTTPサーバアクセス・外部ライブラリ # encoding: utf-8 module YahooTenki require 'nokogiri' # Webスクレイピングライブラリ require 'open-uri' require 'kconv'

!

def Tokyo url = 'http://weather.yahoo.co.jp/weather/jp/13/4410.html' charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) doc.css("p.pict")[0].text end module_function :tokyo end

!

print "今日の東京の天気は #{YahooTenki::tokyo} です。".toutf8, “\n”
      #(↑#{}記述での文字列内式展開)

!

47 Ruby基礎演習 社会人技術者研修 2015年度テキスト 47

(48)

コマンドから実行

>ruby fig_net1b.rb 今日の東京の天気は 晴時々曇 です。

!

!

48 Ruby基礎演習 社会人技術者研修 2015年度テキスト

11.次のステップへ

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

オブジェクト指向プログラミング

 → 組んですぐ動かして確認ができる特徴を活用

正規表現

 → とかく避けては通れない要素、試しながら習熟

例外処理・エラー処理など

 → 実践的・実用目的なプログラミングで必修

各種ライブラリの活用

 → 膨大なライブラリの活用、実用コードの習熟

Ruby on Railsへ

 → Webシステム開発の切り札

!

49 Ruby基礎演習 社会人技術者研修 2015年度テキスト 48

(49)

コマンドから実行

>ruby fig_net1b.rb 今日の東京の天気は 晴時々曇 です。

!

!

48 Ruby基礎演習 社会人技術者研修 2015年度テキスト

11.次のステップへ

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

オブジェクト指向プログラミング

 → 組んですぐ動かして確認ができる特徴を活用

正規表現

 → とかく避けては通れない要素、試しながら習熟

例外処理・エラー処理など

 → 実践的・実用目的なプログラミングで必修

各種ライブラリの活用

 → 膨大なライブラリの活用、実用コードの習熟

Ruby on Railsへ

 → Webシステム開発の切り札

!

49 Ruby基礎演習 社会人技術者研修 2015年度テキスト 49

(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年度テキスト 50

(51)

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

(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年度テキスト 52

(53)

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

(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年度テキスト 54

(55)

!

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

(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年度テキスト 56

(57)

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

(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年度テキスト 58

(59)

!

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

(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年度テキスト 60

(61)

!

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

(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年度テキスト 62

(63)

!

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

(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年度テキスト 64

(65)

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

(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年度テキスト 66

(67)

!

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

(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年度テキスト 68

(69)

!

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

(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年度テキスト 70

(71)

!

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

(72)

!

list8-7 fig13-3.rb

!

# アクセスメソッド class Car def initialize(car_name="unknown") @name = car_name end attr_accessor :name # 読み書き # attr_reader :name # 読み込みのみ # attr_writer :name # 書き込みのみ end

!

car = Car.new() p car.name car.name = "PRIUS" p car.name

!

p car.methods # 登録されているメソッド一覧
 72 Ruby基礎演習 社会人技術者研修 2015年度テキスト 8.3 クラス継承 list8-8 fig13-4.rb

!

# 面積クラス class Area def initialize(x=0, y=0) @x = x; @y = y end def calc_gross @x * @y end end

!

# 面積クラスを継承した体積クラス class Area_3D < Area def initialize(x=1, y=1, z=1) super(x,y) ; @z = z end def calc_gross super * @z end end a = Area_3D.new( 10, 20, 30 ) p a.calc_gross

!!

73 Ruby基礎演習 社会人技術者研修 2015年度テキスト 72

参照

関連したドキュメント

 文学部では今年度から中国語学習会が 週2回、韓国朝鮮語学習会が週1回、文学

・ ○○ エリアの高木は、チョウ類の食餌木である ○○ などの低木の成長を促すた

ことの確認を実施するため,2019 年度,2020

国際地域理解入門B 国際学入門 日本経済基礎 Japanese Economy 基礎演習A 基礎演習B 国際移民論 研究演習Ⅰ 研究演習Ⅱ 卒業論文

平成 31 年度アウトドアリーダー養成講習会 後援 秋田県キャンプ協会 キャンプインストラクター養成講習会 後援. (公財)日本教育科学研究所

授業は行っていません。このため、井口担当の 3 年生の研究演習は、2022 年度春学期に 2 コマ行います。また、井口担当の 4 年生の研究演習は、 2023 年秋学期に 2

(6) 管理者研修:夏に、 「中長期計画策定」の演習/年度末の 3 月は、 「管理者の役割につ

介護労働安定センター主催研修 随時 研修テーマに基づき選定 その他各種関係機関主催研修 随時 研修テーマに基づき選定