編集可能
2014年1月26日

「なんでreturnするとき一時変数使うの?」まとめ

5

発端となったtweet

mzp @mzp

たまにこういうコード見るんだけど、何由来のスタイルなんだ。 String ret = ""; if(...) { ret = f(); } else { ret = g(); } return ret;

2014-01-25 18:50:33

Pascalだよ派

Miura Hideki @miura1729

@mzp Pascalでプログラミングを入門するとこういう癖がつくような気がします。

2014-01-25 19:27:54

MISRA-Cだよ派

おしいれのぼうけん @osiire

@mzp これはね、脱出個所が一か所になって、Complexity関連のメトリクスの値が高くならない、高度な技なのですよ。

2014-01-25 19:59:18
Kyohei FUSHIDA @kyoheif

MISRA-C教らしい。僕もこの宗教だった。 RT @mzp: たまにこういうコード見るんだけど、何由来のスタイルなんだ。 String ret = ""; if(...) { ret = f(); } else { ret = g(); } return ret;

2014-01-25 19:43:17
NaOHaq(苛性ソーダ) @NaOHaq

@notogawa @mzp returnは1関数1回のみ、breakはループ文1つにつき最大1回まで、という必須制約があります

2014-01-25 18:56:39

そういうコーディング規則多いよ派

shumarox @shumaro

@mzp 昔、ブロックの途中で終わるのを禁止するコーディング規約をよく見かけました。終了処理を通らないのを避けるという理由で。finallyが無かった頃の。

2014-01-25 19:56:03
神速 @sinsoku_listy

@mzp 「関数にreturnが複数あると読みにくいため、1つにするべき」みたいなコーディング規約から発生している気がする。

2014-01-25 19:08:47

そういう言語もあるよ派

空飛ぶモフモフにゃんこ教団 @seagull_kamome

@mzp なんでもかんでも一旦変数に入れたがるのは良くみますね。 多分ホスト時代のreturnできるのは変数だけ(その変数が呼び出し元との間で共有メモリになる)みたいなの由来じゃないですかね

2014-01-25 18:54:23
HARUYAMA Seigo @haruyama

@mzp MATLAB はそういう感じですね.

2014-01-25 18:55:15

その他

Charlotte Elizabeth @kozawa

@mzp メソッドの脱出点を一カ所にしろ教はよく聞いたことがあるので由来は知らないですけどその辺の影響かなぁとかなんとか

2014-01-25 19:22:30
こいんとす @cointoss1973

@mzp ???「関数では、関数の最後に唯一の出口がなくてはならない。」

2014-01-25 19:10:48
ELD-R-ESH-2 @eldesh

@mzp リターンが無い警告の回避では?

2014-01-25 19:00:00

コメント

夢乃 @iamdreamers 2014年1月26日
「サブルーチンの入り口は一つ出口は一つ」をBASIC使ってた頃から守ってる。まとめにある例くらい小さいならいいんだけど、ある程度以上大きくなると、どこでreturnしていて後処理が足りているかどうかとか、判りにくいので。
0
Tsuyoshi CHO @tsuyoshi_cho 2014年1月26日
iamdreamers 分割しずらい大きめの処理とかで複数リターンは混乱しますやね...
0
ひろ@猫もふ欠乏症 @hiro_h 2014年1月26日
多少大きいデータでも扱えるように、一時変数を使わないように書き直したことはあるな。
0
Masami HIRATA @msmhrt 2014年1月27日
JSLint で if return else return なコードをチェックすると "Unnecessary 'else' after disruption." というエラーになりますね。 → http://jslinterrors.com/unnecessary-else-after-disruption/
0
麻生 真 @shin_asou 2014年1月27日
限定的なケースですがVisual Studioでデバッグするとき便利という主張を聞いたことがあります。
0
後藤寿庵 @juangotoh 2014年1月28日
あ、retとかresultとかの「見てわかる変数名」に返り値入れる事の是非じゃなくて、 if の中でreturnしちゃえばいいじゃんって話か。
0
しんめいかい/M.Kato @shinmk 2014年1月28日
昔、日立関係とかで、PAD図を書いてプログラミングしてた人もこうなる。出口を一つに決めておくと、後で機能追加したときの見落としが少なくなる。
0