ECMAScript 6標準は、新しいアロー関数表記を含む多くの新機能をJavaScript言語に追加しました。
あなたの仕事は、基本的なES6からES5へのトランスパイラーを作成することです。ES6の矢印関数のみを入力として、ES5互換の対応物を出力します。
それはコードゴルフです!バイトで最短のプログラムが勝ちますように!
基礎
アロー関数は次のようになります。
(a, b, c) => { return a + b - c }
そして、同等のES5関数式は次のようになります。
function(a, b, c) { return a + b - c }
一般に、関数の本文(中括弧内のすべて)をそのままコピーできます。
暗黙の戻りステートメント
中括弧の付いたボディの代わりに、単一の式を使用できます。次に、この式の結果が返されます。
(a, b, c) => a + b - c
function(a, b, c) { return a + b - c }
もう一つの例:
(a, b, c) => (a + 1, b - 2 * c / 3)
function(a, b, c) { return (a + 1, b - 2 * c / 3) }
繰り返しになりますが、式をそのままコピーすることもできますreturn。ただし、セミコロンの自動挿入を避けるために、式とキーワードの間に改行を出力しないように注意してください。
1つの引数
引数を1つ指定する場合、括弧はオプションです。
foo => { return foo + 'bar' }
function(foo) { return foo + 'bar' }
空白
最後に、括弧、変数、コンマ、中括弧、および矢印*の前後の任意の数の空白文字(スペース、タブ、改行)を考慮する必要があります。
( o , O
, _ )=>{
return "Please don't write code like this."
}
出力の空白を保持するかどうかはあなた次第です。「em」を保持するか、「em」を削除するか、独自に追加します-有効なコードであることを確認してください!
*矢印が改行の直後に来るのは技術的には違法ですが、この事実があなたに役立つとは思えません。:)
出力を検証する簡単な方法:
var foo = <your output>; foo()ブラウザコンソールに入力します。それが文句を言わなければ、あなたはおそらく正しい軌道に乗っています。
ウィザードのその他のルール:
- 入力は、構文的に有効なES6矢印関数です。
- 関数の本体はES5互換であると仮定(および参照しない
this、super、arguments、など)。これは、関数に別の矢印関数が含まれることは決してないことを意味します(ただし、「=>」が本体内で発生しないとは限りません)。 - 変数名は、基本的なラテン文字で構成され、ます
$と_。 - 上記にリストされていないES6機能(デフォルトのパラメーター、レストオペレーター、構造化解除など)をトランスパイルする必要はありません。
- 後のスペース
returnの文が続く場合は、オプションである(、[または{。 - テストケースを厳密に一致させる必要はありません。バイト数を減らすのに役立つ場合は、コードを必要なだけ変更できます。本当に、構文的に有効で機能的に同等のES5関数式を生成する限り、あなたは黄金です!
a =>\na、function(a){ return\na }実際undefinedにaはの値が何であっても返されます。これを処理する必要がありますか?
=>か?