top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_401

Ruby:◇メソッドをつくる ・・・ 【Ruby:17歩目】

 2008-10-29
第17歩
 ◇メソッドをつくる

  ・メソッドの定義方法
  [ 書き方 ]
  [ 実行 ]
  [ 変数 と スコープ ]
  [ 引数 ]
  [ return ]
  [ 戻り値 ]

長いので、追記に ▼

★ようやく、メソッドを確認し
 次回は、クラス だ。
★そこで、いよいよ例題作成にゆくぞ!


※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:162頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  [ 書き方 ]
    ・予約語 def を使用する
def メソッド名
処理
end

 ※メソッド名に使えるのは、英数字とアンダースコア

   ●! や ? をメソッド名につけると
    ! ・・・ これを付けて
         破壊的メソッド を示す
str = "abc"
str.upcase # 非破壊的メソッド
str.upcase! # 破壊的メソッド

    ? ・・・ 戻り値が
         true または false であること
a = []
p a.empty? #=> true
a << 1
p a.empty? #=> false
> 確認した
    ※これらは慣習で絶対ではないが、遵守すべき


  [ 実行 ]
    ・呼び出されると、実行する
def youkoso
puts "創るmetaboy へようこそ"
end

youkoso #=> "創るmetaboy へようこそ"
> 確認した


  [ 変数 と スコープ ]
    ・ローカル変数は、メソッドの
     中と外では違う。
var = 100 # ローカル変数
def bai_10
puts var * 10 # var変数を参照できない(エラー)
end

bai_10
> 確認した
※undefined method `var' for main:Object (NoMethodError)
 となる

 ちなみに、上記 bai_10 では問題ないが
 10bai とすると
 syntax error, unexpected tINTEGER のエラーになる
 (最初に数字が使えない?)

グローバル変数にするには、$ をつける
$var = 100 # グローバル変数
def bai_10
puts $var * 10 # var変数を参照
end

bai_10 #=> 1000
> 確認した


  [ 引数 ]
    ・引数を必要とするメソッドを定義すれば
     利用する時は省略できない
def bai_20(val)
puts val * 20 # var変数を参照
end

bai_20(200) #=> 4000
> 確認した
bai_20 # エラー
> 確認した
※in `bai_20': wrong number of arguments (0 for 1) (ArgumentError)
 となる

    ・もちろん、複数の引数を引き渡せる
def sum_all(val1,val2,val3)
puts val1 + val2 + val3
end

sum_all(1,2,3) #=> 6
> 確認した

    ・デフォルト値を用意すれば、引数を省略することも可
def sum_alls(val1=1,val2=2,val3=3)
puts val1 + val2 + val3
end

sum_alls #=> 6
> 確認した
※ちなみに
sum_alls(5) #=> 10(最初の引数にデフォルト)
sum_alls(5,0) #=> 8(0でも、もちろん引数有効)
sum_alls(5,5) #=> 13(最初の2つにデフォルト)
sum_alls(5,5,5) #=> 15(すべての引数有効)
sum_alls(0) #=> 5(最初の引数以外デフォルト)
> 確認した

  [ return ]
    ・return でメソッド終了し、呼び出し元に戻る
def ashita_tenki(val="晴れ")
puts "明日の天気は?" # 実行される
return
puts val + "!" # 実行されない
end

ashita_tenki("雨")
> 確認した
※引数チェックで戻ったりできる

def ashita_tenki(val)
puts "明日の天気は?" # 実行される
if val == 0
puts "天気を現す言葉にして!"
return
end
puts val + "!" # 実行
end

ashita_tenki("雨")
> 確認した

  [ 戻り値 ]
    ・return に値を与えると、それが戻る
def ashita_tenki(val)
puts "明日の天気は?" # 実行される
return val + "でございます。"
end

teinei = ashita_tenki("雨")
p teinei #=> "雨でございます。"
> 確認した

    ・return は省略も可能
     最後の評価値が戻ってくる
def ashita_tenki2(val)
puts "明日の天気は?" # 実行される
"どうなりますか?" # 戻らない
val + "でございます。" # 戻ってくる値
end

teinei2 = ashita_tenki2("雨")
p teinei2 #=> "雨でございます。"
> 確認した

    ・return で何も返さなければ・・・
def ashita_tenki3(val)
puts "明日の天気は?" # 実行される
return # 何も返さない
end

teinei3 = ashita_tenki3("雨")
p teinei3 # nil が返る
> 確認した

※phpの場合と比べると・・・
 ほぼ類推できることなかりだけどね
 他の言語でも同じだ
 書き方がこんがらがっちゃいそうだけど・・・

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/401-8e9b9db9
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。