あと味

たくさん情報を食べて、たくさん発信すると、あとになって味わい深い。

Arrayのconcatメソッドが何気に便利だった

え、今さら?感満載ですけど。

配列を結合するメソッドという頭でいましたが、要素を追加して、ついでに要素追加反映後の配列コピーを返すメソッドと考えると結構便利な気がします。

Arrayオブジェクトのメソッドは、sortとかreverseとかmapとかfilterとかのように、配列を返すメソッドが多く、メソッドチェーンでつなげて配列を処理していくのが結構快適だったんですけど、pushは配列を返してくれないので、pushした後の配列に何か処理を施す際には、メソッドチェーンで処理をつなげていくことはできません。

concatはその代わりに使えます。

サンプルコード

メソッドチェーンの例ではないけど、multiply_str関数のreturnの箇所では、pushを使うと1文余計に必要ですが、concatを使うとreturnの箇所が1文で書けます。

あと、配列をconcatで追加したい場合は、[1,2,3].concat([ [4,5,6] ])みたいな感じで、配列の配列を引数に代入すれば実行できます。

こういう用途で使うのも便利ですね。*1 *2

追記

なんか悔しいので、gaucheで書き直してみた。末尾再帰最適化のおかげで、10万回(google関数の引数に100000を代入)とかでも答え出してくるし素敵。

追記2

@valvallow さんに、よりGaucheらしい書き方教えてもらいました。(ところどころスペース消えちゃってるので注意)

make-list関数を使えば、multiply_strを自作する必要ないですね。

make-list関数のJavaScript実装。

for文速すぎワロタ。

そして、いつの間にかSchemeの記事になってる...

*1:速度は全く考慮してないし、再帰なので引数numで使える数はブラウザ依存で数に制約があります。

*2:速度的な話はid:os0xさんの[http://d.hatena.ne.jp/os0x/20090424/1240541690:title:bookmark]という記事で言及されています。