# CoffeeScriptのfunction式において明示的なreturn文を記述するべきであるか否か

- [CoffeeScriptの関数は明示的にreturnするべき](http://kadoppe.com/archives/2013/12/coffeescript-function-return.html)
- [「CoffeeScriptの関数は明示的にreturnしてはいけない理由」を探す暇あったら他にやるべきことあるのでは?](http://mizchi.hatenablog.com/entry/2013/12/16/184306)

という両者相反する内容の記事がございました。両論もっともな内容であり、また実行速度だけではなく思想も絡んでしまう非常に煩わしい問題であります。

はじめに筆者の立場を明確にしておきます。筆者は日本国内で働くウェブアプリケーション開発者です。主にウェブアプリケーションフレームワークとしてRuby on Railsを使用しており、それによりCoffeeScriptも日常的に使用し、そして記述しております。

筆者にとってのJavaScriptという言語は、プログラミングというものを深く学ばんと思わせる契機となった言語であり、深い愛着ととともにわずかながらも執着のようなものを抱いております。そのためJavaScriptを直接書かないために生まれたとも言える言語であるCoffeeScriptに対しては、いささか好ましかざる念を抱いております。よってこの記事は不平等な視点によって書かれているという点をあらかじめ認識していただきたく思います。

さて、多くの人は既にご存知のことかと思われますが、CoffeeScriptという言語はRubyやPythonといった言語に強い影響を受けた言語であります。このことは言語の記述による見た目からの類推だけではなく、[CoffeeScriptの配布ページ](http://coffeescript.org/)に出現する「Ruby Style」や「from Python」といった記載から容易に推察できるのではないでしょうか。前述した両記事の主題となっている`function`式内部で最後に評価され得る値を該当`function`式を実行した際に返す値とするCoffeScriptの仕様も、Rubyのメソッド定義が持つ同様の仕様から影響を受けたのです。

Rubyはメソッド定義に関するこの仕様は言語としての仕様としてあらかじめ用意されているものであるために、使用者はそこまで強い意識をする必要はありません。ですがCoffeeScriptは違います。CoffeeScriptはJavaScriptに変換されることを前提とした言語となってあるため、この仕様はあくまで最後に評価されるのではないかとCoffeeScriptの言語処理系によって判断される値が返されることとなります。このことは通常の使用で問題となることは少ないのですが、稀にではありますが問題となって身に振りかかることとなります。明示的な`return`文の記述を行うべきであるという内容の一つ目の記事もそうした稀な現象の一つになります。

稀な事象を気にかける必要は薄いとはいえ、複数人でのアプリケーション開発に際しては不測の事態となり、開発速度の遅延を招きかねないのではないでしょうか。よって自身一人による制御が困難である場合には明示的な値の返却が行われるように`return`文を用いるようにしたほうが**無難**です。

蛇足ではありますが`Array`オブジェクトのインスタンスの持つ組み込みメソッドである`push`は`coffee`コマンドが通常使用するJavaScript言語処理系であるv8では確かに充分な速度での動作がなされます。ですが、IE 6からIE 8のような古いウェブブラウザーではそこまでの速度は期待できません。安易な回避が可能であるのならば、同様の記述を繰り返すこととなり、まことに恐縮ではありますが、避けておいたほうが**無難**です。

多くの人が使用しているのではないかと思われるjQueryも仕様として[`function`式が`undefined`と返却されることを前提とした記述](https://github.com/jquery/jquery/blob/2.0.3/src/event.js#L573)があります。自身が記述することとなる部分だけではなく、JavaScriptライブラリー (やフレームワーク) のことを全て考えるとなると煩わしさは膨大なものとなります。JavaScriptとRubyが違う言語であると正しく認識した上でCoffeeScriptを使用することが肝要なのではないでしょうか。

筆者自身の個人的な意見を最後に記載しますと、やはりCoffeeScriptを初めとするJavaScriptへと変換されることを前提とした言語を使うのではなく、始めからJavaScriptをそのままに書くことのほうが最良であると強く信じております。

しかしながらJavaScriptというこの言語は、非常に癖の強い言語であり、複数人によって一つのソースコードを記述する場合には、明確なコーディング規約をアプリケーション開発を開始する以前から定めておかなければ、早晩崩壊を迎えることとなります。一方のCoffeeScriptは言語仕様から、そうしたJavaScriptの癖と呼べるようなものを極端に排除しており、また自由な記述ができる余地も減じさせられております。その結果として複数人によるアプリケーション開発に際しても、ある程度の統一性が生まれます。途中参入者も手間が少なく参加できるというのはCoffeeScriptの大きな強みであると言えるのではないでしょうか。

とはいえ、筆者がCoffeeScriptを好きな言語であると言える日が来ることは間違いなくありませんが。
