雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2006-06-09

[]関数の定義方法 関数の定義方法 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 関数の定義方法 - 雲雀は高く空を舞い 関数の定義方法 - 雲雀は高く空を舞い のブックマークコメント

ここで関数とは、入力に対して出力を返すもの…大まかすぎる気がする。これでは、システムの様なものになってしまう。まぁいいや。

関数の定義はdef 関数名(仮引数,...) 〜 end で行なう。ここで、仮引数関数への入力となる変数

関数定義の例

[復習] 関数の実行方法

関数の実行は

ruby function.rb

関数irbライブラリとして読み込んで使うには

irb -r function.rb
関数定義の例
# x の3乗を返す関数 cube
def cube(x)
    x**3
end

# 2数の和を返す関数 sum
def sum(x,y) # 複数の仮引数はコンマで区切る
    x + y
end

# 0 を返す関数 zero
def zero     # 仮引数がないときは省略可
    0
end

これをファイルtest.rb に保存して実行したのが以下。このとき、ファイルの改行方法をWindows式(CR+LF)かUnix式(LF)にすること。Mac式(CR)ではシンタックスエラーとなる。

$ irb -r test.rb
irb(main):001:0> sum(43,243)
=> 286
irb(main):002:0> zero
=> 0
irb(main):003:0> cube(432)
=> 80621568
irb(main):004:0> sum(34,345) + cube(34)
=> 39683
irb(main):005:0> sum(43,zero)
=> 43
irb(main):006:0> cube(sum(4,3))
=> 343
irb(main):007:0> exit

また、cube(4), sum(4,3)cube 4, sum 4,3のように( )を省略する事もできる

デフォルト引数

引数デフォルト値を設定する事で入力を省略する事が出来る。デフォルト値の設定はdef function(x, y=0) ... endのように、「仮引数=デフォルト値」とする。また、このとき、引数は、デフォルト値のない引数デフォルト値のある引数の順に記述する必要がある。

# 3数までの数値の和 sum
def sum(x, y=0, z=0)
    x + y + z
end

# xのn乗根(省略すれば平方根)を返す関数 root
def root(x, n=2)
    x ** (1.0 / n)
end

実行結果

$ irb -r test.rb
irb(main):001:0> sum(1,2)
=> 3
irb(main):002:0> sum(1,2,3)
=> 6
irb(main):003:0> sum(1)
=> 1
irb(main):004:0> root(3)
=> 1.73205080756888
irb(main):005:0> root(4,4)
=> 1.4142135623731
irb(main):006:0> exit

変数の有効範囲(スコープ)

ローカル変数は、それが定義された範囲内(def ~ enddo ~ endなど)でしか有効ではない。

x = 1          # (1) 変数 x の定義
               # (2)
def f(x)       # (3) 仮引数 x の定義(?)
    y = 2      # (4) 変数 y の定義
    y * x + y  # (5)
end            # (6)
               # (7)
def g(n)       # (8) 仮引数 n の定義(?)
    n + 1      # (9)
end            # (A)
               # (B)

このような関数があった時にそれぞれ

(1)で定義されたx は、 (1)(2)(7)(B)で有効

(3)で定義されたx は、 (4)(5)で有効

(4)で定義されたx は、 (5)で有効

(8)で定義されたx は、 (9)で有効

ロック内で定義された変数(ローカル変数)は、そのブロックをぬけると有効範囲を外れ、破棄される。一方、(1)のようにどのブロックにも属さない範囲(トップレベル)で定義されたローカル変数プログラム終了まで残る。

ホームワーク

  1. 半径 r の円の面積を返す関数を定義せよ。
  2. 円錐の体積を返す関数を定義せよ。
  3. 立方体の体積を返す関数を定義せよ。
  4. 原点から点 (x, y, z) までの距離を返す関数を定義せよ。
  5. a^bb^a の値を表示する関数を定義せよ。


cat::ruby

,

テクノラティプロフィール