teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

質問に答えれてなかった部分を修正

2019/10/22 09:49

投稿

kuraudo
kuraudo

スコア137

answer CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  としていますが、これは **dice関数の返り値のみに対して** putsを適用しています。
14
14
  なのでたしかに"もう1回"の方でputsを使っていてそっちにもputsを適用しているように感じますが実はそっちには影響していません。
15
+ なので "もう1回" の方にputsをつけないと表示されません。そして返り値を2つ連続で書こうとするとエラーになります。
16
+ (1つ目が文字列型の "もう1回", 2つ目が[1, 2, 3, 4, 5, 6].sample の値)
15
17
 
16
18
  そして、なぜ puts を diceの前に記述しているかと言うとreturnで返ってくる値(それこそ返り値)を表示したいからにあります。
17
19
 
@@ -40,4 +42,16 @@
40
42
  ```
41
43
 
42
44
  こんな感じで関数は文字列なり数字なりの値だけ返す関数の場合は使うときにputsを使って扱いまずが
43
- 関数内でputsを使っている場合(hi_puts関数)では不必要になります。
45
+ 関数内でputsを使っている場合(hi_puts関数)では不必要になります。
46
+
47
+ またdiceを使う前にputsを使いたくない場合、あんまり綺麗なコードではないですが
48
+
49
+ ```ruby
50
+ def dice_in_puts
51
+ result = [1, 2, 3, 4, 5, 6].sample
52
+ return puts result unless result == 1
53
+ puts "もう1回"
54
+ puts [1, 2, 3, 4, 5, 6].sample
55
+ end
56
+ ```
57
+ こんな感じで書くことができます。(なので結果としてあとからputsを書いた方がエコって感じですね。)

2

強調したい点をボールド体に

2019/10/22 09:49

投稿

kuraudo
kuraudo

スコア137

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  puts dice
11
11
  ```
12
12
 
13
- としていますが、これはdiceの返り値に対してputsを適用しています。
13
+ としていますが、これは **dice関数の返り値のみに対して** putsを適用しています。
14
14
  なのでたしかに"もう1回"の方でputsを使っていてそっちにもputsを適用しているように感じますが実はそっちには影響していません。
15
15
 
16
16
  そして、なぜ puts を diceの前に記述しているかと言うとreturnで返ってくる値(それこそ返り値)を表示したいからにあります。

1

説明不足な点を追記

2019/10/22 09:40

投稿

kuraudo
kuraudo

スコア137

answer CHANGED
@@ -11,4 +11,33 @@
11
11
  ```
12
12
 
13
13
  としていますが、これはdiceの返り値に対してputsを適用しています。
14
- なのでたしかに"もう1回"の方でputsを使っていてそっちにもputsを適用しているように感じますが実はそっちには影響していません。
14
+ なのでたしかに"もう1回"の方でputsを使っていてそっちにもputsを適用しているように感じますが実はそっちには影響していません。
15
+
16
+ そして、なぜ puts を diceの前に記述しているかと言うとreturnで返ってくる値(それこそ返り値)を表示したいからにあります。
17
+
18
+ ```ruby
19
+ irb(main):001:0>
20
+ irb(main):002:0> def hi
21
+ irb(main):003:1> "hoge"
22
+ irb(main):004:1> end
23
+ => :hi
24
+ irb(main):005:0>
25
+ irb(main):006:0> hi
26
+ => "hoge"
27
+ irb(main):007:0> puts hi
28
+ hoge
29
+ => nil
30
+ irb(main):008:0>
31
+ irb(main):009:0> def hi_puts
32
+ irb(main):010:1> puts "hoge"
33
+ irb(main):011:1> end
34
+ => :hi_puts
35
+ irb(main):012:0>
36
+ irb(main):013:0> hi_puts
37
+ hoge
38
+ => nil
39
+ irb(main):014:0>
40
+ ```
41
+
42
+ こんな感じで関数は文字列なり数字なりの値だけ返す関数の場合は使うときにputsを使って扱いまずが
43
+ 関数内でputsを使っている場合(hi_puts関数)では不必要になります。