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

Ruby演習テキスト1

N/A
N/A
Protected

Academic year: 2021

シェア "Ruby演習テキスト1"

Copied!
30
0
0

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

全文

(1)

!

!

Ruby言語 基礎演習

社会人技術者研修

2014年度 テキスト

!

!

2014.11

!

(2)

目的

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

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

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

!

達成目標

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

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

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

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

!

!

改訂・更新

2014.11 作成 2015.2.1 改訂 2 Ruby基礎演習 社会人技術者研修 2014年度テキスト

(3)

1. Rubyについて

1.1. Rubyの基礎知識

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

プト言語です。

近年ではWebアプリケーション開発用として登場したフレームワー

ク「Ruby on Rails」の普及により、メジャーな開発言語の1つと

なっています。

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

!

1.2. 主な特徴

・インタプリタ言語

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

・オブジェクト指向言語

・オープンソース、無料

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

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

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

(4)

1.3. Rubyのインストール

様々なインストール方法がある

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

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

• バージョン

 1.8系

 1.9系

 2.0系以降(最新は2.1系)

現在は2.0以降が主

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

古いケースもある。ただし基本的な記述の大幅な変化は少ない

!

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

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

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

・sublime text

・emacs

・vim

・rubymine

・eclipse

などが使われています。

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

(5)

!

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

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

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

・Windows → コマンド

・MacOS → ターミナル

!

!

(6)

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

2.1.

最初のプログラム

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

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

hello.rb

puts "Hello! Ruby”


!

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

>ruby hello.rb (リターン)

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

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

> ruby hello.rb
 Hello! Ruby

2.2.コメント記述

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

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

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

が対象となります。実行してみましょう。

> ruby hello.rb
 Hello! Ruby


!

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

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

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

(7)

!

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

2.5.対話環境(irb)

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

したりする場合にはこちらが便利です。

>irb


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


=> nil


irb(main):002:0>


!

(8)

3. 変数と定数

3.1.文字列 

文字列はダブルコーテーション、またはシングルコーテーションで

囲み、次のように代入します

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

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

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

以下のように記述します

puts "Hello!¥nBye!”
 
 > ruby hello.rb
 Hello!
 Bye!

!

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

(9)

3.2.数値

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

れることに注意。

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

(その他)

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

3.3.変数

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

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

ローカル変数

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

グローバル変数は戦闘が$

$bar = 999

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

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


!

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

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

!

(10)

3.4.定数

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

FOO = 'FOO'

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

true (真)
 false (偽)

3.5.nil値

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

foo = nil

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

!

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

(11)

4. 演算子

4.1.四則演算など

演算子の記述

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


!

演算子の優先順位

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

4.2.代入演算子

動作例

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

!

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

!

(12)

4.3.その他の演算子

演算子の記述

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

(13)

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


(14)

5.2.if修飾式

文の末尾にif式を置く事で、そのif式の結果により前方の文の実行

が行われます。

記述

式 if 条件式

!

動作例

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

!

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

5.3.unless式

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

記述

unless 条件式 then 式 else 式 end

!

式 unless 条件式

!

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

14 Ruby基礎演習

(15)

5.4.条件演算子

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

記述

評価式 ? 式 : 式

!

動作例

age = 20

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

!

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

!

(16)

5.5.case式

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

記述

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


!

thenは省略可能

※C言語におけるbreak記述はなく、when、elseの中の処理後は必

ずendへ抜けます。

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

!

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

(17)

6. 繰り返し処理

6.1.while式

記述

while 評価式 do end

!

動作例

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

!

6.2.for式

記述

for 識別子 in 式�do end

!

動作例

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

!

(18)

6.3.範囲オブジェクト等

記述例

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


!

[1,2,3,4]
 # 配列表現


!

{ "apple" => 1, "orange" => 2, "banana" => 3 }
 # ハッシュ表現


!

6.4.eachメソッド

記述

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


!

動作例

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

(19)

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はと{∼}の記述は同義

!

(20)

6.6.ループ脱出等

break ー 脱出

next ー ループの最初に戻る

!

fig7.rb ループ脱出記述例

!

lev = 4 count = 0 (1..10).each {|n| break if n > 4 # if修飾との組み合わせ p n count = n } p "break."

!

p "next:" (1..10).each do |n| next if n < 4 p n # 1,2,3は表示されない end

!

!

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

(21)

7. 配列とハッシュ

7.1.配列

fig8.rb 配列操作例

!

配列と要素参照

a = [1, 2, 3, 9 , -1] # 一次元配列の格納 puts a[0] # => 1 # 要素の参照 puts a[3] # => 9

puts "max = #{a.max}" # 配列の中の最大値を得る


!

文字列の配列格納と参照

b = [ "apple", "banana", "orange" ]

puts b[2] # => orange

puts b[4].nil? # => true

puts "length = #{b.length}" # => 3

!

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

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 が表示される

!

(22)

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

!

22 Ruby基礎演習

(23)

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}


!

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

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

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

メソッドの帰り値は、メソッド呼び出しから戻る直前の評価式の値、

または return に渡された値。 複数の帰り値を返す記述も可能

!

(24)

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クラス定義ここまで 


!

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”

!

!

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

(25)

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

!

(26)

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)

!

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

(27)

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ソース表示

!

(28)

!

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
 28 Ruby基礎演習 社会人技術者研修 2014年度テキスト

(29)

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”
 �������#(↑#{}記述での文字列内式展開)

!

コマンドから実行

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

!

!

(30)

11.次のステップへ

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

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

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

!

正規表現

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

!

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

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

!

各種ライブラリの活用

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

!

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

参照

関連したドキュメント

システム構成 3.1 Ruby

本発表では,省リソース環境にも適応可能でコンパクトな Ruby 処理系を作成す るシステム “atomic-Ruby”

近年,組込み機器の複雑化と大規模化に伴い,システム開発のコストが増加している.しかも,開発

開発環境のソフトウェア構成を表 2.4 に示す.開発言語として Ruby を選択し,生産性の 高さに定評のある Web アプリケーションフレームワーク Ruby on

Oracle Database 12c for the Developer 言語 ドライバー C OCI C++ OCCI Java JDBC .NET ODP.NET Node.js node-oracledb Python cx_Oracle PHP OCI8 R ROracle

要となる Ruby 処理系について,すでにリリースさ れ利用できる処理系について紹介している.Ruby インタプリタは

ていた.この Ruby のメリットを組込みソフトの開 発に適用したものが軽量 Ruby である. ソフトウェア mruby

3 月には JIS(プログラム言語 Ruby JIS X 3017)とし て制定され,その英語版を直ちに ISO/IEC に提案 し,2012 年 4 月に