同じことは同じように書く「同じことは同じように書く」ことがどうして大事かを説明します。先日、DevLOVE運営チーム主催のリーダブルコードイベントが開催されました。イベントの前半はリーダブルコードの訳者である角さんによるリーダブルコードの紹介で、後半は参加者が「リーダブルコードとはどういうコードか」をディスカッションしました。ディスカッションでは実際に参加者が書いたコードを読みながら「ここはリーダブルだね」「ここはこうした方がもっとリーダブルじゃないか」といったことを考えました。その中で使ったコードを見ながら「同じことは同じように書く」ことがどうして大事かを説明します。ここで使うコードはdproject21/yaruo_tdd_triangleのtriangle.rbです*1。endendディスカッションのときは以下のreturnに注目しました。!is_isoscales_triangle?endこのコードはRubyのコードなので最後に評価した式がメソッドの返り値になります。そのため、この場合はreturnを書いても書かなくても動作は変わりません。どのような観点でreturnに注目したかというと、他のメソッドではreturnを使っていないのにこのメソッドでは使っているという観点です。コード全体を見れば、特にreturnを使うかどうかを使い分けていないだけという雰囲気を感じますが、通常はここで「何か意図があるのではないか」と考えます。それではどのように考えるかを説明します。推測まず、書かなくてもよいreturnを明示的に書いているということは、returnを強調しているのではないかと考えます。「このメソッドだけは返り値が重要」で、他のメソッドでは「Rubyなので必ず値を返すけど、その値は重要ではない」という意図があるのではないかと考えます。それでは、returnがない他のメソッドも見てみましょう。endメソッド名に?がついていることに注目します。RubyではSchemeなどと同じように、真偽値を返すメソッドの名前の最後を?にする習慣があります。これを考慮すると、このメソッドは「真偽値を返す」ということが重要だと考えられます。明示的なreturnがないため、「returnは返り値が重要であるということを示す意図がある」という考えと両立しません。よって、明示的なreturnは「返り値が重要」ということを示すためのものではなく、使っても使わなくてもどちらでもよいからたまたまついていただけなのだろうと考えます。このように、周囲のコードとあわせて読めばreturnの意図を推測できますが読む人が大変です。すべてにreturnを書く、一切returnを書かない、一定のルールでreturnを使う*2、など全体として統一された使い方になっていれば読む人が読みやすくなります。できるだけ読みやすいコードにしたいですね。まとめリーダブルコードのイベントのときに使ったコードを例にして、同じことが同じように書かれていない場合は読む人が大変という事を説明しました。自分がコードを書くときは同じことをするときは同じように書いて、どういう意図でこのコードを書いたかが読めばすぐにわかるコードを書きましょう。ここではreturnを例にしましたが、他のコードや技術的な文書でも同じことが言えます。通常の文章では、同じことを何度か言う場合は同じ言い回しを避けます。これは読む人が飽きて読みづらくなることを避けるためです。プログラミングや技術的な文書では「同じことは同じように書く」ことで、読む人がすぐに「同じこと」であると認識できるようにします。これにより、読む人が書いた人の意図を理解しやすくなります。このコードはディスカッションの練習用に選んだもので、小さいスクリプトだったのが選んだ理由の1つ。他の理由はイベントでは紹介したので省略。他にディスカッションに使ったコードについても省略。基本はreturnを使わないで、特別なケースを処理するとき(ガード節とか)だけ使うとか。4.0とGFDLのデュアルライセンスで自由に利用できます。クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。クリアコードは「クリアコードをいい感じにする人」を1名募集しています。クリアコードはフリーソフトウェア開発で培った技術力を提供しています。Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。