basyura's blog

あしたになったらほんきだす。

一つのメソッドに上から下にずらっと全部書いてしまう現象の考察

とある機能を実装するとする。例えば外から Excecute が呼ばれてその結果を返すような場合。多いのが Execute メソッドの中に全部書いてしまって、何 10 行を超えて何回スクロールするんだろうになっているパターン。その際はレビューで以下のようにアドバイスする。

Execute にはシナリオを書いて、中身は別に書くと良いです

と。僕の経験的にこの方が良かった、という深い根拠のないものではある。けど、間違った考えとも思わない。自然だろうと。private なメソッドではインスタンス変数を直接扱うのはやめて、public なめそっどから引数で渡したほうがいいとか細かいところもあるけど、そのへんはすっ飛ばしてまずは上記のようにいう。

そんな考えを持っているので、レビュー依頼されたものやコミット済みの資源をなにかの機会で見たときに、上記に反するものを見かけると気になってしまう。
もうちょっと分割したら綺麗になるのになぁと思いつつスルーしたり自分で直してしまったりするのだが、最近個人的に Ruby を書いていて気がついた。

一つのメソッドに全部書いてる。

と。書いてるんだけど、量として苦になるほどには達してない。
それは Ruby の記述のしやすさやライブラリのカッコよさから来ているのだと思う。

では、これと同じ事を C# や Java で書いたらどうなる?と考えると、やっぱり細かくメソッドに分割して見通しを良くしようとするだろうなと思う。
それは、単純に型や書き方の問題で記述量が増えると想像がつくからだろう。
他の要因としては、IDE と型はやっぱり強い味方なのでリファクタリングしやすい点があると考える。これは強みだと思うが、リファクタリングをせざるを得ない言語の方が問題じゃないの?とか考えるとぐるぐるしてしまう。

Ruby だとヘタに分割したり継承したりすると読みづらくなる気もする。短く書けるのであれば全部書いてしまえばいいとも思う。この辺は実務 or チームで使ったことがないので想像の範囲。

上に書いたようなアドバイスはあまり意味なくてそれは言語によるんだよ、になるんだろうか。

C#/Java からきた人は細かくリファクタリングしようとするが、Ruby から来た Ruby しかしたことない人が C#/Java を始めると一つのメソッドに全部書けばいいじゃんとかなっちゃうんだろうか。

ビルド時間に人生を奪われ過ぎてる上に、MS のライセンス高すぎだし効率全然上がらんわ、みんなどうやってんのすげーな?なので以降は関わりたくないとかぐーるぐる。
まじでビルド時間のせいでチームの雰囲気すげー悪くなってる。これは確か。VS2012 になってまだましになったけどどうにかしてください(これが言いたかっただけ)。