質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

3回答

1452閲覧

出力pメソッドの戻り値について詳しく知りたいです

tnaorihk

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/03/13 07:08

前提

pとputsの違いについて理解しようとしていました。
戻り値あり/なしという違いがあることにたどり着きました。
その時にpメソッドで戻り値があることはどういうことか?
ということを認識しようとしたときに、理解ができなかったことがあるので教えていただきたいです。

###質問内容
①右の認識は正しいですか?:戻り値とはメソッド内などで定義されているreturnで返されるものである。
②以下の表の戻り値が引数のオブジェクトという項目の意味が理解できませんでした。

|メソッド|出力後の表示|配列の表示|呼び出すメソッド|戻り値|対象者|
|----|----|----|----|----|
|puts|あり|要素ごとに改行|to_s|nil|一般ユーザ|
|print|なし|改行しない|to_s|nil|一般ユーザ|
|p|あり|改行しない|inspect|引数のオブジェクト|開発者|

例えば戻り値が引数のオブジェクトというのは以下で表すpの"testes"はoutputメソッドのpの引数である'testes'ですよという意味で正しいですか?

ruby

1def output 2 p 'testes' 3end 4 5output 6"testes"(出力結果) 7=> "testes"(戻り値) 8

③出力メソッドに戻り値があることのメリットや必要性を教えてください。
私の認識として上のコードの例からすると出力結果が出ているからそれだけで十分なのでは?
戻り値は何のためにあるんだ?と考えており必要性がわかりません。

そのほかに理解できていること

putsは出力させているだけ、pはreturnという名の戻り値が返されるという違いがある。
pは型情報や文字列かどうかの情報もわかるようにしてある。

以上の3点をどなたか教えていただけないでしょうか。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

昔はpnilを返していました。

デバッグ用途だと、値を返した方が便利です。という理由で引き数を返すように変更されました。

Ruby

1a << foo.bar

というコードで、aに追加されるfoo.barの値を表示したい場合、

Ruby

1pが引き数を返す場合: 2a << p(foo.bar) 3 4pがnilを返していた時代、愚直に書くと、 5p(tmp = foo.bar) 6a << tmp 7 8同:tapを使うと、 9a << foo.bar.tap{|x| p x}

投稿2021/03/13 09:29

編集2021/03/14 03:11
otn

総合スコア86295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/03/13 09:30

1,2の理解は正しいです。
otn

2021/03/13 10:29

pが引き数を返すようになったのは何時からか調べたら、ver1.9からでした。 ということは、 > 同:tapを使うと、 と書いたけど、その時代にはtapは標準装備ではない。
guest

0

松本さんの設計思想に「例外を作らない」というのが有るのではないか、と以前から感じています。整数や文字列も含め全てがobjectというのもそうですし。
(class Exceptionの意味ではなく、あの場合は、この場合はをなくすという意味)
で、
「methodは戻り値を持つ。最後に評価された式の結果が戻り値となる」 という文法があります。
だから p,puts,printにも戻り値をつけた
というのもあるのかな? もありますが、

もし戻り値を持たない場合、
def output str p str end
が困る。 
戻り値を持たない式が最後の場合の戻り値はどうするのか?
とか
methodの戻り値を評価するとき 例えば if output(str) 戻り値を持たない場合の扱いをどう記述するのか
とか

ので
副作用だけが必要で戻り値なんぞなくても良さそうなこれらにも戻り値を用意したのでは
と考えています。

投稿2021/03/13 23:33

winterboum

総合スコア23645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば戻り値が引数のオブジェクトというのは以下で表すpの"testes"はoutputメソッドのpの引数である'testes'ですよという意味で正しいですか?

はい。

私の認識として上のコードの例からすると出力結果が出ているからそれだけで十分なのでは?

戻り値は何のためにあるんだ?と考えており必要性がわかりません。

必要がなければ無視すればいいだけです(特に無視したからなにか起きるわけではありません)。

投稿2021/03/13 07:36

maisumakun

総合スコア146557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問