回答編集履歴
2
補足追記
test
CHANGED
@@ -32,6 +32,8 @@
|
|
32
32
|
`def menu(shop,proce)`の`shop`と`proce`は、メソッド`menu`の引数(仮引数)です。
|
33
33
|
私が書いたのは、return の引数のことです(`return total_price`と書いた時の`total_price`のこと)。
|
34
34
|
他にも、コマンドプロンプトなどで`ruby aaaa.rb`というコマンドを実行したとすると`aaaa.rb`がコマンド`ruby`の引数です。
|
35
|
+
最初の回答に書いたことと同じようなことになりますが、
|
36
|
+
「引数」という言葉は、文章の中で使われた時にどういう意味を持つのかは、書かれた場所次第です。
|
35
37
|
|
36
38
|
> なぜreturnの話をしているのにメソッドが出てくるのでしょうか?
|
37
39
|
は、
|
1
コメントへの回答を追記
test
CHANGED
@@ -13,3 +13,76 @@
|
|
13
13
|
フレームワークを使ったプログラムの中でこれらが使われた時に、どういう効果を持つのかは、書かれた場所次第です。
|
14
14
|
基本の理解が出来ている状態で、フレームワークの各種クラスやメソッドを学べば、すぐに想像が付くはずです。
|
15
15
|
|
16
|
+
# 追記
|
17
|
+
コメントへの返信が長くなったので、回答に追記します。
|
18
|
+
|
19
|
+
> 独学でprogateHTML とRuby を一通りやり終え、かつプログラミングスクール(Ruby)を卒業しましたが、
|
20
|
+
なんと!
|
21
|
+
しかし、メソッドの戻り値が理解できていないということは、まだ「入門途中」の状態かと思います。
|
22
|
+
|
23
|
+
> > ・putsとは、引数を文字列化して標準出力に出力するメソッド(Kernelモジュールのputsの場合)
|
24
|
+
> これは理解しています。returnや戻り値が理解できません。
|
25
|
+
ということですが、「戻り値とputsの違いについて」という風に全く関係の無い2つの違いを問うているので、両方とも理解できていないのかと思いました。
|
26
|
+
理解できていないのは、メソッドとメソッドの返り値についてですね。
|
27
|
+
|
28
|
+
> ・returnとは、引数の値を返り値としてメソッドを終了させる言語構文
|
29
|
+
> 引数の値を返り値というのがよくわからず、なぜ引数が出てくるのかが理解できません。
|
30
|
+
> 引数ってカッコの中に入れる値のことですよね? 以下でいうと(shop, proce) が引数
|
31
|
+
|
32
|
+
`def menu(shop,proce)`の`shop`と`proce`は、メソッド`menu`の引数(仮引数)です。
|
33
|
+
私が書いたのは、return の引数のことです(`return total_price`と書いた時の`total_price`のこと)。
|
34
|
+
他にも、コマンドプロンプトなどで`ruby aaaa.rb`というコマンドを実行したとすると`aaaa.rb`がコマンド`ruby`の引数です。
|
35
|
+
|
36
|
+
> なぜreturnの話をしているのにメソッドが出てくるのでしょうか?
|
37
|
+
は、
|
38
|
+
> returnとは、引数の値を返り値としてメソッドを終了させる言語構文
|
39
|
+
と書いた通りですが、`return`はメソッドの中に書くからです(例外ありだが今は気にしない方が良い)。
|
40
|
+
というか、「メソッドとその返り値」がしっかり理解できていれば、「`return`は返り値を指定する方法の1つ」と理解できるはずで、「メソッドとその返り値」がしっかり理解できていない状態で、`return`の意味を理解するのは無理です。
|
41
|
+
|
42
|
+
> それならreturn に書かれている以降の処理を削除すればいいだけじゃんと思いました。
|
43
|
+
```Ruby
|
44
|
+
def foo(x)
|
45
|
+
return x*2
|
46
|
+
puts x
|
47
|
+
end
|
48
|
+
```
|
49
|
+
なら、`puts x` は無意味なので、削除するのが正しいです。
|
50
|
+
```Ruby
|
51
|
+
def foo(x)
|
52
|
+
if x>0
|
53
|
+
return x*2
|
54
|
+
end
|
55
|
+
puts "引数が正でない"
|
56
|
+
-1 #正でない場合はこれが返り値
|
57
|
+
end
|
58
|
+
```
|
59
|
+
のような時は、`return`以降を削除できません。
|
60
|
+
|
61
|
+
# メソッド・関数とその返り値
|
62
|
+
数学の関数は分かりますよね。「メソッドの返り値」は「数学の関数値」と思うと良いかもしれません。
|
63
|
+
数学の関数で、`f(x) = x*2+1`だとすると、`f(10)` は 21 ですが、この21が関数の値です。
|
64
|
+
中学高校レベルの数学でも、`g(x) = 0 (x<0の時); x (x>=0の時)`のような場合分けの定義も出てきます。これをRubyで書くと、
|
65
|
+
```Ruby
|
66
|
+
def g(x)
|
67
|
+
if x<0
|
68
|
+
return 0
|
69
|
+
else
|
70
|
+
return x
|
71
|
+
end
|
72
|
+
end
|
73
|
+
```
|
74
|
+
このケースだとRubyでは`return`を書かなくてもいいですが、書くか書かないかはこの場での本質ではないので書いてます。
|
75
|
+
|
76
|
+
数学から離れて、別の例を出すと、`IO.write("ABC.txt","ABCDEFG")`というメソッド呼び出しを行うと、
|
77
|
+
・返り値:書き込んだバイト数の7
|
78
|
+
・副作用:カレントディレクトリの`ABC.txt`という名前のファイルに`ABCDEFG`という文字列を書き込みます
|
79
|
+
ということになります。
|
80
|
+
`puts IO.write("ABC.txt","ABCDEFG")`だと`7`が標準出力に表示されます。(アクセス権その他の理由でファイルに書けなかった場合を除く)
|
81
|
+
|
82
|
+
「副作用」というのは、返り値以外でのメソッドの外への何らかの影響のことです。
|
83
|
+
ファイルやストレージ関係の処理、ネットワーク通信、画面表示、グローバル変数・クラス変数・インスタンス変数の更新など。
|
84
|
+
`IO.write`のように副作用を主目的として使うメソッドは多いです。質問にある`puts`もそうですね。`require`もメソッドですが、そうです。
|
85
|
+
|
86
|
+
「~~~~について理解できないので教えて下さい」という情報ゼロ型の質問じゃなくて、今回のように「~~~を~~~~という風に理解してるが、合ってますか?」という形での質問は良いと思います。コメントで分からない点をさらに明確にするのも良い感じで進んでいます。
|
87
|
+
が、リアルタイムでなく、表情も分からないこう言う場でのやりとりで学ぶのには限界はありますね。まあ、もう少し先まで行けそうな気がしています。
|
88
|
+
|