!
!
Ruby言語 基礎演習
社会人技術者研修 2015年度 テキスト
!
!
2015.11
1 Ruby基礎演習 社会人技術者研修 2015年度テキスト本テキストについて
各方面に注目されている国産プログラミング言語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本テキストについて
各方面に注目されている国産プログラミング言語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年度テキスト 31. 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年度テキスト 41. 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年度テキスト 51.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年度テキスト 61.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年度テキスト 71.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年度テキスト 81.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年度テキスト 92.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年度テキスト 102.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!
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!
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年度テキスト 133.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年度テキスト 143.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※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※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年度テキスト 174. 演算子
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年度テキスト 184. 演算子
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年度テキスト 194.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年度テキスト 204.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年度テキスト 215.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年度テキスト
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年度テキスト
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年度テキスト 245.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!
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!
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年度テキスト 276.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年度テキスト 286.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年度テキスト 296.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年度テキスト 306.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年度テキスト 316.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年度テキスト 326.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年度テキスト 337. 配列とハッシュ
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年度テキスト 347. 配列とハッシュ
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演習
!
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演習
!
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年度テキスト 378. メソッドとクラス
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年度テキスト 388. メソッドとクラス
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演習
!
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演習
!
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
!
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
!
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年度テキスト 439. モジュール
モジュールはインスタンスを生成できない、継承もできない、
共通部品のようなものと考えるとよい
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年度テキスト 449. モジュール
モジュールはインスタンスを生成できない、継承もできない、
共通部品のようなものと考えるとよい
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年度テキスト 4510.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年度テキスト 4610.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コマンドから実行
>ruby fig_net1b.rb 今日の東京の天気は 晴時々曇 です。!
!
48 Ruby基礎演習 社会人技術者研修 2015年度テキスト11.次のステップへ
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年度テキスト 4912.演習プログラム
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年度テキスト 5012.演習プログラム
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年度テキスト 513.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年度テキスト 523.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年度テキスト 554.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年度テキスト 564.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年度テキスト 638. 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年度テキスト 648. 1メソッド list8-1 fig10-1.rb