ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2011年9月2日金曜日

link_to タグでアクション指定

<% @shops.each do |shop| %>
  <tr>
    <td><font size="1"><%= shop.name %></font></td>
    <td><font size="1"><%= shop.address %></font></td>
     <td><%= link_to("確認",  :action => "show", :id => shop) %>
  </tr>
<% end %>

2011年7月13日水曜日

WindowsでRuby on Railsをインスト

■■■■Rails 3.0.9バージョンのインスト■■■■
>gem update --system
>gem install rails sqlite3

■■■■SQLITEのドライバインスト■■■■■
 http://www.sqlite.org/sqlitedll-3_7_3.zip
よりsqliteのドライバをインストしパスの通っている・Rubyのbin等にコピーしてください


■■■■Rails3のアプリの作成■■■■■

>rails new demo

create
create  README
create  Rakefile
create  config.ru
create  .gitignore
create  Gemfile
create  app
create  app/controllers/application_controller.rb
create  app/helpers/application_helper.rb
create  app/mailers
create  app/models
create  app/views/layouts/application.html.erb
create  config
create  config/routes.rb
create  config/application.rb
create  config/environment.rb
create  config/environments
create  config/environments/development.rb
create  config/environments/production.rb
create  config/environments/test.rb
create  config/initializers
create  config/initializers/backtrace_silencers.rb
create  config/initializers/inflections.rb
create  config/initializers/mime_types.rb
create  config/initializers/secret_token.rb
create  config/initializers/session_store.rb
create  config/locales
create  config/locales/en.yml
create  config/boot.rb
create  config/database.yml
create  db
create  db/seeds.rb
create  doc
create  doc/README_FOR_APP
create  lib
create  lib/tasks
create  lib/tasks/.gitkeep
create  log
create  log/server.log
create  log/production.log
create  log/development.log
create  log/test.log
create  public
create  public/404.html
create  public/422.html
create  public/500.html
create  public/favicon.ico
create  public/index.html
create  public/robots.txt
create  public/images
create  public/images/rails.png
create  public/stylesheets
create  public/stylesheets/.gitkeep
create  public/javascripts
create  public/javascripts/application.js
create  public/javascripts/controls.js
create  public/javascripts/dragdrop.js
create  public/javascripts/effects.js
create  public/javascripts/prototype.js
create  public/javascripts/rails.js
create  script
create  script/rails
create  test
create  test/fixtures
create  test/functional
create  test/integration
create  test/performance/browsing_test.rb
create  test/test_helper.rb
create  test/unit
create  tmp
create  tmp/sessions
create  tmp/sockets
create  tmp/cache
create  tmp/pids
create  vendor/plugins
create  vendor/plugins/.gitkeep

が作成されます。


■■■■Railsのwebサーバの起動■■■■■
>rails server
で起動、このときセキュリティの警告がでますが解除してください。

次に「http://localhost:3000/」にアクセスしてみてください、
WEBrickサーバが立ち上がり「welcome aboard」と表示されるはずです。


■■■■say/indexを表示■■■■■
>rails generate controller say index
上記のコマンドは「say」がコントローラ名で、
「index」がアクションになります。


下記がはきだされるはずです。
create  app/controllers/say_controller.rb
 route  get "say/index"
invoke  erb
create    app/views/say
create    app/views/say/index.html.erb
invoke  test_unit
create    test/functional/say_controller_test.rb
invoke  helper
create    app/helpers/say_helper.rb
invoke    test_unit
create      test/unit/helpers/say_helper_test.rb


それでは「http://localhost:3000/say/index」にアクセスしてみましょう。
「Say#index
Find me in app/views/say/index.html.erb」と表示されているはずです。

コントローラの中身は
class SayController < ApplicationController
  def index
  end
end
となっているはずです。http://localhost:3000/say/indexのindexがメソッドになります。

■■■■say/helloを作成しを表示■■■■■
class SayController < ApplicationController
  def index
  end
  def hello
  end
end
を追加、demo/config/routes.brに
get "say/hello"を追加し、
また、demo\app\viwe\say\hello.html.erbを作成し、<h1>hello</h1>
「http://localhost:3000/say/hello」を表示するとhelloと表示されるはずです。

2011年5月29日日曜日

eclipseでRuby環境を作成

色々とeclipseとRubyの開発環境構築のサイトはありますが、
情報がまちまちだったり
ダウンロードサイトが変わっていたりと、、、、
一応 私が2011年05月に開発環境を構築した手順を掲載いたします。

①http://mergedoc.sourceforge.jp/より
Full All in One (JRE あり)の Ultimateをダウンロードします。
すでに日本語化もしてあります。

②ダウンロードしたeclipse.exeをクリックしインストします

③ 次にeclipseのメニューより「ウインドウ」→「設定」→「一般」→「機能」→「クラシック更新」→
「適用」 →「Ok」

④ 次にeclipseのメニューより「ヘルプ」→「ソフトウエアの更新」→「検索とインストール」
→「追加」→「http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle」と入力し
後は指示にしたがってインストールします。
これで完了です。
おつかれさまでした。


2011年5月27日金曜日

スタックとキュー とは?と多重配列



arr = [],[]
p arr[0][0] = 12
p arr[0][1] = 11
p arr[0][2] = 11
p arr[0][3] = 13

p arr[1][0] = 02
p arr[1][1] = 01
p arr[1][2] = 01
p arr[1][3] = 03
p arr
p arr << [1,2]
p arr 


###結果####
12
11
11
13
2
1
1
3
[[12, 11, 11, 13], [2, 1, 1, 3]]
[[12, 11, 11, 13], [2, 1, 1, 3], [1, 2]]
[[12, 11, 11, 13], [2, 1, 1, 3], [1, 2]]

#####用語#####
スタックポインターとは?
データの位置を格納しているポインター

プッシュとは?
データをスタック領域に格納する作業

キューとは?
行列です

エンキューとは?
 配列に追加

デキューとは?
配列から削除

2011年5月23日月曜日

Ruby言語 でじゃんけん

pc = ["グー","チョキ","パー"]
pcnum = rand(3)
puts "PCは#{pc[pcnum]}"
puts "私は#{pc[name]}"
puts "シャンケンの判定は"
ans = ((name - pcnum)+3)%3//
if(ans == 0)
puts "アイコ"
elsif(ans == 2)
puts "勝ち"
elsif(ans == 1)
puts "負け"
end

Ruby言語 ループ

p "■■■hello1■■■"
def hello1(num,i=0)
(i..num-1).each do |i|
puts "Hello world"
end
end
hello1(3)

p "■■■hello2■■■"
def hello2(num)
array = ["Hello world"]*num
array.each do |item|
p item
end
end
hello2(3)

p "■■■hello3■■■"
def hello3(num)
num.times do
puts "Hello World"
end
end
hello3(3)

p "■■■hello4■■■"

def hello4 (num,str,i=0)
while i < num puts str i +=1 end end hello4(3,"Hello") p "■■■hello5■■■" def hello5(num) 1.upto(num) do puts "Hello World" end end hello5(3) p "■■■file■■■" File.open("hello.txt","r") do |txt| puts txt.read end p "■■■file2■■■" File.open("hello.txt","r") do |txt| txt.each_line do |line| puts line end end


2011年5月17日火曜日

Ruby 変数と定数とスコープ

puts "###############試験対策ソース###############"

puts "###############変数と定数とスコープ1###############"
x = 1
def ans
x = 4 #xを初期設定していない場合、xを呼び出す場合NameErrorが返されます。
puts x #=>4 xのスコープはメソッド内だけです。
end
ans
puts x #=>1


puts "###############変数と定数とスコープ2###############"

def ans2
x = 100 if false #この場合xへの代入は実行されないが、宣言はされます。
puts x #=>nil
end

ans2

puts "###############変数と定数とスコープ3###############"

def ans3
x = 0 #ブロックの外で初期設定
(0 ... 11).each do |i|
puts x += i #ブロック内でも有効です
end
end

ans3

puts "###############変数と定数とスコープ4###############"
def ans4
o = 0 #初期化を行っていない変数に代入を行うとNameErrarが吐き出されます。
for i in 1..10
o += i
end
puts o
end

ans4
★★★★★★実行結果★★★★★★
###############試験対策メ[ス###############
###############変数と定数とスコープ1###############
4
1
###############変数と定数とスコープ2###############
nil
###############変数と定数とスコープ3###############
0
1
3
6
10
15
21
28
36
45
55
###############変数と定数とスコープ4###############
55

2011年5月16日月曜日

Ruby技術者認定試験対策 その①

puts "##############Ruby真偽#################2
puts "■■■■■■■■真偽ソース■■■■■■■■■"
puts "########  0  #######"
num = 0
if num
    puts "0 は true"
else
    puts "0 は false"
end

puts "########  ''  #######"


str = ''
if str
    puts "空文字列はtrue"
else
    puts "空文字列はfalse"
end

puts "########  nil  #######"

ni = nil

if ni
    puts "nilはtrue"
else
    puts "nilはfalse"
end

puts "########  false  #######"

fal = false

if fal
    puts "falseはtrue"
else
    puts "flaseはfalse"
end

puts "########  true  #######"

tr = true

if tr
    puts "trueはtrue"
else
    puts "trueはfalse"
end

puts "########  null  #######"

nulls = "null"

if nulls
    puts "nullはtrue"
else
    puts "nullはfalse"
end

puts "★★★★★★★ 結果 ★★★★★★★"
########  0  #######
0 は true
########  ''  #######
空文字列はtrue
########  nil  #######
nilはfalse
########  false  #######
flaseはfalse
########  true  #######
trueはtrue
########  null  #######
nullはtrue

///////  まとめ  ////////
Rubyではnilとfalse以外はtrueになります。

2011年5月11日水曜日

Ruby言語 ファイル

puts "################出入力###################"
puts "引数に1 2 3を渡す"
expression = ARGV.join(' + ')   #joinで文字列の結合
total = ARGV.inject(0){|subtotal, arg|   #inject(0)はsubtotalの初期値で、argに要素を渡します。
    p subtotal
    p arg
    subtotal + arg.to_i
}

puts expression   #=>1 + 2 + 3
puts total    #=>6


puts "################ファイル###################"

i = 0
File.open("opentext.txt"){|text|  #openでファイルを開きます
    puts "読み込み開始します"
    contents = text.read
    print contents + "\n"
    puts "読み込み終了します"
}


puts "################ファイル###################"

File.open("opentext.txt",'a'){|text|
    puts "書き込み開始します"
    text.puts Time.now
    puts "書き込み終了します"
}

puts "################ファイル###################"

File.open("opentext2.txt",File::WRONLY|File::CREAT){|text|
    puts "書き込み開始します"
    text.puts Time.now
    puts "書き込み終了します"
}


puts "################ファイル###################"
File.open("opentext2.txt"){|text|
    puts "読み込み開始します"
    text.each_line do |line|   #一行ずつ読み込み ブロックに行の内容を渡す。
        p text.lineno    #現在の行番号
        if(line == "\n")
            puts "\\nです"
        end
        p line#.chomp    #現在の行を表示chompは改行を削除します
    end
    puts "読み込み終了します"
}


puts "################ファイル###################"
File.open("opentext2.txt",'r+b'){|text|
    print "#{text.pos}"    #ファイルポインタの現在の位置を整数で返します
    print text.gets
    print "#{text.pos}"
    puts bytes = text.read(3)
    print "#{text.pos}:\n"
    text.pos -= 3
    print "#{text.pos}:\n"
    text.write bytes
    print "#{text.pos}"
    text.pos = 0
    print text.gets    #1行取得
    print "#{text.pos}:"
    text.seek(-3,File::SEEK_END)#最後の行へ移動し3バイト戻る
    print "#{text.pos}"
    puts text.getc     #1バイト読み込み
    print "#{text.pos}"
    p text.getc
    print "#{text.pos}"
    #readcharは読み取るバイトが存在しないとき例外を発生することを除き同じ動き
    puts text.readchar #読み取り行がない場合例外
}


puts "################ファイル###################"

p $stdin
p $stdout
p $stderr
$stderr.printf("%X\n",0xcafe)


puts "################ファイル###################"
File.open("opentext2.txt",'w'){|text|
    p text
    $stdout = text    #標準出力先をコマンドラインから指定ファイルに変更
    p $stdout
    puts "Welcome to Glubbdubdrib"
    p text
    p STDOUT
    $stdout = STDOUT  #標準出力をもとにもどす
    p $stdout
}

puts "################ファイルIO###################"

require 'stringio'#stringioの読み込み、StringIOを使うため
buffer = String.new#StringIOで使うStringオブジェクト bufferとはデータの蓄積先

sio = StringIO.new(buffer)#StringIOに渡す
p $stdout
$stderr = $stdout = sio#出力先を変更
puts "untuh"
warn "outed"
$stdout = STDOUT
puts buffer
puts sio
$stderr = STDOUT

Ruby 単語説明

名前の検索とは?
 オブジェクトにメッセージが渡された時の振る舞い、狭いスコープ範囲から広い範囲へと探していく。

*特異メソッドとは


*メソッドのオーバーロード? Rubyはオーバーロードはありません


*メタプログラミングとは?


*特異クラスとは?


*ダックタイピングとは? オブジェクトが同じように振舞うなら区別する必要はないと考える意味

Ruby言語 オブジェクトとクラス

puts "##########アクセス########1"      

class Yapoo

    def public_method; end
   
    private
    def internal_use
        puts "成功"
     end
   
    public
    def public_api
        return internal_use
    end
end
    yapoo = Yapoo.new
    yapoo.public_api
    #yapoo.internal_use
   
   
puts "##########特異メソッド 特異クラス########"
     
message = "Hello"
def message.build_greeting(target)  #特異メソッド オブジェクト専用のメソッド
    #return "#{self}, #{target}."

end

p message.build_greeting("world")
p message2 = "Hello"
#p message2.build_greeting("world")  #エラーが出ます。メソッドはありません「undefined method....」と


puts "##########クラスメソッドとメタクラス########"

class Duration1
    def initialize(since,till)
        puts "kita"
        puts since
        puts till
        @since = since
        @till = till
    end
    #attr_accessor :since, :till
    class << self  #特異クラスを定義Duration1
        p self #デバック
        def week_from(from)#クラスメソッド
            puts "kita2"
            return self.new(from, from+7*24*60*60)#一週間の秒数
        end
    end
end

#Duration1.new(Time.now,Time.now)
p  Duration1.week_from(Time.now)




Ruby言語 クラス定義

puts "##########クラスメソッドの定義########1"      

class Duration
    def display; puts self end    #インスタンスメソッド
end

duration = Duration.new    #インスタンスの生成
duration.display      #=>#<Duration:0x2855850>

puts "##########クラスメソッドの定義########2"

class Duration1
    def Duration1.print(x); p x end    #クラスメソッド
end

Duration1.print 2     #=>2


puts "##########クラスメソッドの定義########3"

class Duration3
    p self
   
    def self.print(x); #selfはクラス自身を指す
    p x
    p self
    end    #クラスメソッド
    def self.test(x ); p x += x end    #クラスメソッド
end

Duration3.print 2   #=>1
Duration3.test 2   #=>1
Duration3.test 2   #=>1

puts "リファクタリングとはプログラムの機能を変更しない修正の事"


puts "##########インスタンス化########4"

class Duration4
    def initialize(since,till)  #javaで言うコンストラクター的なもの
        @since = since
        @until = till
    end
    attr_accessor :since, :until    #指定したインスタンス変数に、seter/getterメソッドを組み込む
end

duration4 = Duration4.new(Time.now, Time.now + 3600)
p duration4.until
p duration4.since
p duration4.since = Time.now + 4600

puts "##########インスタンス化########5"

class Duration5
    def initialize (since,till)
        @since = since
       @till = till
 end

 def since=(value); @since = value end


 def till=(value);@till = value end

 def since
     return @since
 end

 def till
     return @till
 end

end


duration5 = Duration5.new(Time.now,Time.now + 3600)
p duration5.since
p duration5.till
p duration5.since = Time.now + 3600
p duration5.since


puts "##########クラス定義の追加########6"

class String
    def caesar; tr 'a-zA-Z', 'n-za-mN-ZA-M' end
end

puts "Learning Ruby".caesar

puts "##########クラス定義の追加########7"


class Fixnum
    alias original_addition + #元の定義を別のメソッドで退避、(別名で定義)
    def +(rhs) #再定義
        original_addition(rhs).succ #succは次の整数を返す
    end
end

p 1+ 1 #=>3
p 5 + 2  #=>8


puts "##########クラス定義の追加########8"

class Duration8
    def initialize (since,till)
        @since = since
       @till = till
 end
attr_accessor :since, :till  #アクセサメソッド
    def display(target=$>)
        super #Objyectクラスのdisplayをよびだす オーバーライドする
        target.write "(#{self.since}-#{self.till})" #displayの引数に渡す
    end
end


duration8 = Duration8.new(Time.now,Time.now + 3600)
duration8.display

puts "#########インスタンス変数########"

class Duration9
    def initialize (since,till)
        @since = since
       @till = till
 end
    def print_since;p @since end
end

duration9 = Duration9.new(Time.now-7,Time.now)
duration10 = Duration9.new(Time.now+7,Time.now + 14)
duration9.print_since
duration10.print_since


puts "#########クラス変数########"

class Foo
    @@class_variable = "foo"
    def ttt
        p @@class_variable
    end
end

class Bar < Foo
    p @@class_variable
    @@class_variable = "bar"
    def print
        p @@class_variable
    end
end

#foo = Foo.new
#foo.ttt
#bar = Bar.new
#bar.print

2011年4月28日木曜日

Ruby 文字列②

puts "##########6 文字列=バイト列#########"

str =  "あいう"

p str.length   #=> 6

p str[0], str[1], str[2]

p $KCODE # = "SJIS"   #グローバル変数に文字コード指定

regexp = /(.)/s   #オプションでSJISの正規表現 カンマは1文字として認識
str = "\202\240"
regexp =~str
    p $1
   
regexp = /(.)/n   #オプションでNONEの正規表現 カンマは1バイトとして認識
regexp =~str
    p $1


str = "あいうえお"
str.scan(/./s) do |c|    #文字コードSJIS指定で任意の一文字ずつスキャンする
    puts c                 #=>あ い  う え お
end


puts "##########6 メッソド#########"
$ffff
def describe(name)
    puts "This is a #{name}."  #=>This is a Google.
    name = name.dup                         #オブジェクトのコピーの参照値
   
    name[3] = ?p
    $ffff = name                            #オブジェクトの参照
    puts "This is a #{name}."  #=>This is a Goople.
end
CATTLE = "Google"

describe(CATTLE)                        #メソッドに引数渡し
p CATTLE                                        #=>Google
p $ffff

puts "##########6 スコープ ローカル変数#########"

def next_of(origin)        #メッソド定義
    value = origin + 1
    p value
end

def prev_of(origin)        #メッソド定義
    value = origin - 1
    p value
end

next_of(2)   #メソッドの呼び出し
next_of(2)
prev_of(2)

#p value      #value変数は呼び出せない NameError

#p undefined_variable #value変数は呼び出せない NameError


puts "##########6 スコープ クラス#########"
class Duration
    attribute_names = %w[ days hours minutes seconds]#文字列要素を配列
    p attribute_names
    attribute_names.each do |name|
        attr_accessor name
    end
end

#p attribute_names   #=>NameError

puts "##########インクリメント演算子#########"

0.upto(9){|i| puts i}

p ""
$i = 1
str ="Glubbubdrib"
str.each_byte do |byte|
    printf "%x\n" ,byte
    p $i+=1
end

puts "##########多重代入 #########"

a,b = 1,2,3,4,5
p a
p b
p ""
a,b,c = 1,2
p a
p b
p c

puts "#########6 多重代入 配列展開 #########"

a, *b = 1,2,3,4,5
p a,b
p b.length

p ""

array = [1,2,3]
a,b,c = *array
p a,b,c

puts "#######6 論理演算し #####"

if a == 1 and b == 3
        puts "ok"
    else
        puts "NG"
end


if a == 1 || b == 3
        puts "ok"
    else
        puts "NG"
end


p ""

def method_with_side_effect
    puts "副作用が発生しました"
    return 1
end

#メッソドはよばれない
p true || method_with_side_effect
#メソッドがよばれる
p false || method_with_side_effect

#メッソドはよばれない
p true && method_with_side_effect
#メソッドがよばれる
p false && method_with_side_effect


puts "########初期化イディオム############"

def generate_default_value
    p 'default value genarated'
    return 'default value'
end

def som_method(param = nil)   #paramの仮引数がnil・false・無なら
    param ||= generate_default_value  #param = param || generate_default_valueなら
    #.....paramを使って何するか?
end
p "nil"
som_method(nil)
p "false"
som_method(false)
p "true"
som_method(true)
p "0"
som_method(0)
p ""
som_method()

puts "########範囲演算子############"

for i in 0...10
    puts i
end

puts "########三項・条件演算子############"
a = nil
p a,b,c   #=>nil,2,3

var = a ? b : c  #aが真tureの時bに、偽falseならcになります
p var

var = if a then b else c end   #aが真tureの時bに、偽falseならcになります
p var

puts "########制御式############"

color = "ff"
thouht = if color == "green" then
p    "danger"
else
p    "undefined"
end

p thouht

p ""

puts "########奇数偶数############"

0.upto(21){|i|
    t = i % 2
    if t == 0 then
        puts "#{i} は奇数です。余りは #{t}"
    else
        puts "#{i} は偶数です。余りは #{t}"
    end
}

puts "########6~12歳小学生############"

0.upto(133333333333399999){|i|
   
    if i  < 6  then
        puts "#{i}才は幼児です"
    elsif i < 13
        puts "#{i}才は小学生です"
    elsif i < 16
        puts "#{i}才は中学生です"
    elsif i < 19
        puts "#{i}才は高校生です"
    elsif i > 19
        puts "#{i}才は大人です"
    end
}

2011年4月27日水曜日

Ruby 文字列 正規表現

正規表現とは?
文字列はい対してパターン照合を行うミニ言語。

■| パイプメタキャラクターはいずれかの

■メタキャラクタの説明
*^は文字列の先頭や改行文字の直後にマッチ
/^abc/........abcdofでマッチ

*$は終わりが
/^abc$/........abcdofでマッチしない

*[abc]..............abcではaかbかcの一文字にマッチ

*[a-z]..............abcでは小文字のアルファベトにマッチ

*\w.....................[a-zA-Z_0-9]

*\s.....................空白文字列



*\S.....................空白文字列以外の任意の一文字

*\d........................は[0-9] 数字にマッチ

*\D........................は[0-9] 数字以外の任意の一文字にマッチ

*\z.......................文字列の末尾にマッチする

*\Z................\zは改行文字に感知するが\Zはしない

*\G................は前回マッチした直後に位置にマッチ、しかし、最初のマッチが実行される前に\Aにマッチする

**.......................直前のパターンの0回以上の繰り返し

*+.................直前のパターンの1回以上の繰り返し

*{m}...............繰り返し回数

*{m,n}.......................m回からn回の繰り返しのマッチ

*{m,}..........................m回以上の繰り返しにマッチ

*{m,}?..............m回以上のできるだけ短い繰り返し

*?..............直前のパターンの0回か1回の繰り返し、\d{3}-?\{4}で郵便番号などで使う

*\1や\2...................前にキャプチャした部分と同じ文字列にマッチ


*(?#)...........................コメント

*i...................大文字小文字を区別しない/abc/iと記述すると大小どちらでもマッチ

*m.................複数行文字モード。「.」が改行文字にもマッチ

*x..............#kから改行までコメントとし無視する

■ソース
p "##########分解#############"
p "a,bb,ccc,            dddd"
p "a,bb,ccc, dddd".split(/,\s?/)
★結果
p "##########分解#############"
"a,bb,ccc,            dddd"
["a", "bb", "ccc", "dddd"]
puts "##########その他#############"
p "string".reverse
p "\n\rstring".strip
p "string".length

puts "##########イテレータ#############"
story.each_byte do |byte|
    p byte
end

p ""
story.each_line do |line|
    p line
end


puts "##########フォーマット#############"
p sprintf("%04d",3)
p sprintf("%08.4f", Math::PI*10)
p sprintf("hex=%X, oct=%o", 10,11)


puts "##########シンボル#############"
p symbol1 = :ruby
p symbol2 = :ruby
p symbol1 == symbol2
p symbol1.equal? symbol2

*シンボルは文字列より高速処理ができます。

2011年4月26日火曜日

Ruby例外エラーの仕組み

Ruby例外エラーの仕組み
エラーを発生させる仕組みから、「例外」というエラーが返される。
エラー例外に対応可能な仕組です。

■1ソース
p "############Ruby例外エラーの仕組み##############"

user_mapping = {"kayo" => nil}
p user_mapping.key? "kayo"
p user_mapping.key? "tetus"
p user_mapping.fetch("kayo")
p user_mapping.fetch("tetus")

■結果1
true
false
nil
******.rb:30:in `fetch': key not found (IndexError)
        ******.rb:30


■ソース2ハッシュの比較
p "############Rubyハッシュの比較##############"

hash1 = { "a" => 1, "b" => 2 }
hash2 = { "a" => 1, "b" => 2 }
p hash1 == hash2
p hash1 == {  "b" => 2,"a" => 1}
p hash1 == { "a" => 9, "b" => 2 }
p hash1 == { "z" => 1, "b" => 2 }
p hash1 == { "a" => 1, "b" => 2 ,"c" => 3}

■結果 ハッシュの比較の場合、キーと値が等しいとき同士です。順序は関係ありません。
true
true
false
false
false

****解説*****

すべてのハッシュはHashクラスのインスタンスです。sizeやkeyなどのメソッドいろいろとあります。

Ruby 数値比較





■ソース

p 1 == 1
p 1 == 1.0
p 1 != 1
p 1 < 1
p 1 <= 1
p 1 > 1
p 2 >= 1


★結果
true
true
false
false
true
false
true


■ソース宇宙演算子
p 1 <=> 2
p 1 <=> 1
p 3 <=> 2


★結果
-1
0
1
*説明 左辺が右辺より小さければ負の数、大きければ正の数、等しい場合はゼロとなります。

■宇宙演算子が使われているメソッド
p [8,3,5,2,1,3,4,9,1,].sort

★結果
[1, 1, 2, 3, 3, 4, 5, 8, 9]

■数学関数
p Math.acos(1)
p Math.log(3)
p Math.sqrt(3)

p Math::E
p Math::PI

include Math

p acos(1)
p log(3)
p sqrt(3)

p E
p PI


RUby言語 数値

*Rubyは多倍長整数をサポートをし、桁あふれを心配することはありません。
*メソッドのオーバードができます。メソッドのバリエーションが作れます。

■数値リテラル
整数・浮動小数点があります。
1や0.01など

■リテラルの先頭記号
0x は 16進数
0d は 10進数
0o は 8進数
0b は 2進数

■整数オブジェクト
整数オブジェクトはintegerではなくFixnumやBignumクラスのインスタンスになります。

*ソース
p num = 0b1111.class
p num = 0b1111111111111111.class

*結果
Fixnum
Bignum


■その他演算子
p "############Ruby数値演算子##############"
p 10 + 2   #加算
p 5.25 -7   #減算
p 2*2    #乗算
p 2**5   #べき乗


p "############除算##########"
p 7/2
p 7%2
p 7.0/2
p 7.0/0
#p 7/0 #ゼロ除算例外

p -a = -3.0  #符号操作
p +a = -3.0

■型と自動変換
Rubyはデータ型が自動変換されることはほとんどありません。

p 5 + "2".to_i など明示的に型変換しないかぎり、


p 2/0.5 などの時は整数が不動小数点に変換され計算されます。


p printf("%20f", 99999999999999999999999999 + 0.0) などの時は100000000000000004764729344.000000nilとなり整数の表現可能範囲をこえた場合は精度が失われます。

また、

p 3.to_f / 2
p 3.0.to_i / 2で明示的に型変換もできます。

Ruby ドキュメントをコマンドラインよりインストール

http://doc.ruby-lang.org/ja/1.8.7/library/_builtin.html
にRubyのドキュメントがあります。

また、コマンドラインから
gem install rdoc rdoc-data

rdoc-data --install

gem rdoc --all overwrite

gem install refe

で英語と日本語のドキュメントがインストールできます。

使用方法は英語ではコマンドラインより
ri Array

ri Array#each

 日本語では

refe Array

refe Array#each

で使用できます。

2011年4月25日月曜日

Ruby学習1 変数と配列の挙動

 変数とはデータの入れ物。

■ソース
test = "yahoo"             #文字列オブジェクト(参照値)
p container = [test,test] #出力 containerが参照しているのはtest
test[2] = 'p'                  #文字列オブジェクト(参照値)の配列の置き換え
p container                  #出力

■結果
["yahoo", "yahoo"]
["yapoo", "yapoo"]

■感想
phpやjavaをやってきたがRubyもいろいろとルールがあるものです。


■ソース

a = 1
p a
b = "str"
p b
c = [a,b,3.class(),"test"] #配列にはオブジェクトの参照値が入っている
p c
d = [a,c,[1,2,3,]]
p d

■結果
1
"str"
[1, "str", Fixnum, "test"]
[1, [1, "str", Fixnum, "test"], [1, 2, 3]]


■ソース
a = 1
p a
b = "str"
p b
c = [a,b,3.class(),"test"]
p c
d = [a,c,[1,2,3,]]
p d

p c[0]

p d[2]

p c[2    ]

p c[-3]

p c.length #配列の長さ

p c[0,4]  #Cの0から4のオブジェクトを参照

p c[0..3]
p c[0...3] #端末を含まない
p c[-3..-2] #負の記号を使った参照

■結果

1
"str"
[1, "str", Fixnum, "test"]
[1, [1, "str", Fixnum, "test"], [1, 2, 3]]
1
[1, 2, 3]
Fixnum
"str"
4
[1, "str", Fixnum, "test"]
[1, "str", Fixnum, "test"]
[1, "str", Fixnum]
["str", Fixnum]

■ソース
a = [1,2]  #配列に代入
p a
a[0] = 3
p a
a[4] = "4"
p a
a[0,3] = 'a','b','c'
p a
a[0,3] = 'a','b','c','d'
p a
a[1..2] = 1,2
p a
a[0,2] = "?"
p a
a[0..2] = "A"
p a
a[-1] ="z"
p a

a = ["1","2"]  #配列に代入
p a
a[0] = 3
p a
a = ["1","2"]  #配列に代入
p a
a[-1] = "3"

■結果
[1, 2]
[3, 2]
[3, 2, nil, nil, "4"]
["a", "b", "c", nil, "4"]
["a", "b", "c", "d", nil, "4"]
["a", 1, 2, "d", nil, "4"]
["?", 2, "d", nil, "4"]
["A", nil, "4"]
["A", nil, "z"]
["1", "2"]
[3, "2"]
["1", "2"]


■ソース
array  = ["a","b","c"]
p array.length
p array.size
p array *= 2
p array.include? "c"
p array.sort
p array.uniq #重複要素を削除した配列を生成

p array
p array.uniq! #元の配列自体の重複要素を削除し更新

p array

■ソース
array = ["a","b","c"]
array.each do |item|
    p item
end


array = ["a","b","c"]
array.each_with_index do |item,index|
    p [item,index]
    p array[index]
end



■結果
"a"
"b"
"c"
["a", 0]
"a"
["b", 1]
"b"
["c", 2]
"c"

■結果
3
3
["a", "b", "c", "a", "b", "c"]
true
["a", "a", "b", "b", "c", "c"]
["a", "b", "c"]
["a", "b", "c", "a", "b", "c"]
["a", "b", "c"]
["a", "b", "c"]


■ソース
acids = ["Adenin","Thymine","Guanine","Cytosine"]
signs = acids.map{|acid|acid[0,1]} #acid[0,1]の部分は文字列のインデックス範囲をあらわします

p signs

■結果
["A", "T", "G", "C"]

■ソース
acids = ["Adenin","Thymine","Guanine","Cytosine"]
signs = acids.map{|acid|acid.downcase}

p signs


acids = ["Adenin","Thymine","Guanine","Cytosine"]
signs = acids.map(&:downcase) #downcaseの省略記述

p signs       
■結果
["adenin", "thymine", "guanine", "cytosine"]
["adenin", "thymine", "guanine", "cytosine"]

■ソース 文字列を数値に直しソート
array = ["73","2","5","1999","53"]
p array
p array.sort #普通のソート
p array.sort{|x,y| x.to_i <=> y.to_i} #数値に変換して逆普通のソート

■結果
["73", "2", "5", "1999", "53"]
["1999", "2", "5", "53", "73"]
["2", "5", "53", "73", "1999"]

■ソース 連想配列
month_to_ordinal = {
    "Jan" => 1, "Fed" => 2, "Mar" => 3, "Arp" => 4, "May" => 5, "Jun" => 6, "Jul" => 7,
    "Aug" => 8, "Sep" => 9, "Oct" => 10, "Nov" => 11, "Dec" => 12,  
}

p    month_to_ordinal["Aug"]
p    month_to_ordinal["Jun"]   
p    month_to_ordinal["Oct"]

■結果
8
6
10

2011年3月19日土曜日

Ruby を全面的に採用した東京ガスの地震防災システム

「Ruby を全面的に採用した東京ガスの地震防災システム」
がはてなブックマークに掲載されていたのでチョット見てみました。

http://www.slideshare.net/ossaj/ruby-6029382

地震等で供給を停止する時間が
2400分
から
10分
Rubyに移行後なったそうです、、、、

今後Rubyが来るのかもしれません。