最終更新:2009-08-12 (水) 00:31:05 (2966d)  

Ruby/文法 はてなブックマークを見る
Top / Ruby / 文法

導入

標準入出力

  • gets - 標準入力
  • puts - 標準出力 最後に改行がつく。
  • print
print("hoge\n")
print "hoge\n"
print("Hello", " ", "Ryby!", "\n")#文字の連結

文法

  • x...yというのは配囲を表すオブジェクト

コメント

コメントは#

  #コメントですわよ

複数行の場合

#複数行コメント(組み込みドキュメント)
=begin
the everything between a line beginning with `=begin' and
that with `=end' will be skipped by the interpreter.
=end

予約語

演算子

  • ===右辺が左辺に含まれれば真、含まれなければ偽

組み込み変数

  • $なんちゃら

組み込み定数?

変数と定数?

  • ローカル変数

ローカル変数のスコープは、宣言した位置からその変数が宣言されたブロック、メソッド定義、またはクラス/モジュール定義の終りまで

 hoge ||= 1 # hoge が偽か未定義ならば1を代入。初期化時のイディオムの一種。
  • インスタンス変数 @で始まる。未初期化時はnil。
     @hoge
  • クラス変数 @@で始まる。未初期化時はnil。
     @@hoge
  • グローバル変数 $で始まる。未初期化時はnil。
     $hoge
  • 擬似変数(特殊な変数)
    self           # 現在のメソッドの実行主体
    nil            # 
    true / false   # nilとfalseは偽を表す。
    __FILE__       # 現在のソースファイル名
    __LINE__       # 現在のソースファイル中の行番号
  • 定数 定数は大文字で始める
    HOGE

組み込み関数?

イテレータ

  • eachとかcollect
  • ブロック
    • ハッシュの場合

      キーと値のペアについてブロックを適用する。

  • 配列の場合

    配列の各要素に対してブロックを適用する。

  • 文字列の場合

    改行文字(\n)を区切りとして、各部分に対してブロックを適用する。

制御文

  • if文
    if[then]
     ...
    elsif
     ...
    end

thenをつける必要があるのは一行に記述するとき

if a == 1 then puts "a is one" end 
  • while文
     while 式
         .... 
     end
  • for文
    #0~9 (.3つ)
    for i in 0...10 do
      puts i
    end
    
    array = ['A', 'B', 'C']
    for i in array do
      puts i
    end
    puts array.length 
    
    #0~10 (.2つ)
    for i in 0..10 do
      puts i
    end
  • each文
    array.each do |i|
      puts i
    end
    
    10.times do |i|
      puts i
    end
    
    hogeObject.each do |i|
      puts i
    end
hogeObject.each do |i|
 なんか処理 i
end

for i in hogeObject do
 なんか処理 i
end

はほぼ同じ。

  • case文
    case time.hour
    when 6...9
      puts "おはよう"
    when 9...17
      puts "こんにちは"
    when 17...24
      puts "こんばんは"
    when 0...6
      puts "おやすみ"
    end
  • yield

関数定義

#パラメタなし
def 関数名
  ...
end

#パラメタあり
def 関数名(var1,var2=1) #2番目の引数にデフォルト値を指定
  ...
end

#可変長引数
#最後の仮引数の直前に * がある場合には残りの実引数はみな配列としてこの引数に格納される
def foo(x, *xs)
  puts "#{x} : #{xs.inspect}"   # Object#inspect は p のような詳細な内部表示
end
foo(1)        #=> 1 : []
foo(1, 2)     #=> 1 : [2]
foo(1, 2, 3)  #=> 1 : [2, 3]

 

クラス定義

class クラス名 < 親クラス
  定数名 = '値'
  def initalize(x,y)     #コンストラクタ
    @x = x               #インスタンス変数
    @y = y
  end
  attr_accessor :x       #アクセッサ
  attr_accessor :y
  def クラス名.メソッド名   #クラスメソッド
    return ret
  end
end

インスタンス = クラス名.new

クラス定数 = クラス名::定数名

モジュール

module モジュール名
    #クラス定義とか
end

インスタンス = モジュール名::クラス名.new