日々の事柄に関する雑記帳。



記述マナー

変数全て小文字。_で単語を結ぶ。
メソッド全て小文字。_で単語を結ぶ。
クラス大文字ではじめる。
インデントスペース2文字

配列

[]で囲む。
配列の中身は、異なるデータ型のオブジェクトでも構わない。
my_array = [0, 1, 2, 3]
my_array << 4
puts my_array

配列の配列

stock_price = [
  [101, 115, 100, 110],
  [103, 120, 100, 113],
  [115, 121, 107, 118]
]

puts stock_price[=][0]

ハッシュ

{}で囲む。
キー => 値
my_hash = {"entry" => 500, "volume" => 1000, "exit" => 550}
puts my_hash["entry"]

キーとして、シンボルを用いることが多い。
my_hash = {:entry => 500, :volume => 1000, :exit => 550}
puts my_hash[:entry]
キーをオブジェクトとした場合、オブジェクトが集生成される。
キーをシンボルとした場合、シンボルは一意であり、常に一つしか存在しない。

ハッシュの配列

stock_price = [
  {:open => 101, :high => 115, :low => 100, :end => 110},
  {:open => 103, :high => 120, :low => 100, :end => 113},
  {:open => 115, :high => 121, :low => 107, :end => 118},
]

puts stock_price[0][:open]
puts stock_price[1][:high]
puts stock_price[2][:low]

条件分岐

if

a = 1

if a == 1
  puts "one"
elsif a == 2
  puts "two"
else
  puts "many"
end

case

def yes_no(answer)
  case answer
  when /[Yy]es/
    :yes
  when /[Nn]o/
    :no
  else
    nil
  end
end

繰り返し

while

p = 0

while p < 10
  puts p
  p += 1
end

イテレータ

times
{}内を指定回数実行する。
10.times{puts "hello"}

10.times do
  puts "bye bye"
end
each
指定されたオブジェクトに順番に参照する。
my_array = ["one", "two", "three"]
my_array.each {|val| puts val}

myarray.each do |val|
  puts val
end
map
Array#map(Arrayクラスのmapメソッド)
配列から新たな配列を生成する。
my_array = [1, 2, 3]
my_array.map {|n| n + 1}
my_array.map {|n| n > 2}

メソッド

def my_method (val)
  puts val
end

破壊的メソッド

メソッド名末尾に!が付く。
オブジェクトの中身を変更する。
a = [1, 2, 3]
puts a.reverse
puts a
puts a.reverse!
puts a

クラス

クラスがインスタンス化するとき、initializeメソッドが自動的に実行される。
インスタンス変数:@〜
アクセサメソッド:インスタンス変数を参照する。
attr_reader読み取り専用
attr_accessor読み書き可能
class Wallet
  attr_reader :money

  def initialize(money)
    @money = money || 10000
  end

  def put_in(money)
    @money += money
  end

  def take_out(money)
    @money -= money
  end
end

my_wallet = Wallet.new(1000)
puts my_wallet.money
puts my_wallet.put_in(100)
puts my_wallet.take_out(100)

ファイル

my_file = open("pattern1.txt", "w")
file.puts "pattern 1"
file.close

my_file = open("pattern1.txt", "r")
puts my_file.read
file.close

open("pattern2.txt" ,"w") do |my_file|
  file.puts "pattern 2"
end

open("pattern2.txt", "r") do |my_file|
  puts my_file.read
end

ライブラリ

必要なライブラリをrequireで指定する。

HTTP接続

require "open-uri"

my_page = open("http://www.panrolling.com", "r:EUC-JP")
puts my_page.read.encode("SJIS", :undef => :replace)

例外処理

begin
  my_file = open("nothing.txt")
rescue => my_error
  puts my_error.class
  puts my_error.message
  puts my_error backtrace
end

正規表現

=~で正規表現と比較する。
"abc" =~ /ab/
"abc" =~ /ac/
"abc" =~ /\^a.*c$/
"amazing magic" =~ /\^a.*c$/
正規表現中のメタ文字エスケープは不要。*r{正規表現}を記述する。

後方参照

正規表現中の()内に合致する箇所を変数$n ($!, $2, $3...$+)に記憶する。
(?:)内に合致する箇所は記憶しない。
"abc123efg" ~= /(\D|^)(\d{3})(\D|\s|$)/
puts $1
puts $2
puts $3
puts &+

"abc123efg" ~= /(?:\D|^)(\d{3})(?:\D|\s|$)/
puts $1
puts $2
puts $3
puts $+

式展開

文字列中の#{変数名}が変数に変換される。
式展開を利用する文字列はダブルクォーテーションで括る。
正規表現中でも利用できる。
a = 'bed'
b = 'breakfast'
puts "#{a}&#{b}"

可変長引数

class Speaker
  def say(*word)
    puts word
  end
end

speaker = Speaker.new
speaker.say("Good morning")
speaker.say("Hello", "Thank you", "bye bye")

wordが可変長引数。与えられた引数が配列として格納される。

タグ

管理人/副管理人のみ編集できます