Fizzbuzz (JapaScript編)
JavaScriptの勉強を始めてみたので、とりあえずfizzbuzz書いてみました。
for(i=1;i<=100;i++)print(i%15?i%5?i%3?i:'fizz':'buzz':'fizzbuzz');
で、久しぶりにfizzbuzzで調べてみたらforループの中にprint()を埋め込むと少し短くなることを発見(まぁほとんど変わんないけどw)。
for(i=0;i++<100;print(i%15?i%5?i%3?i:'fizz':'buzz':'fizzbuzz'));
ちなみに、実行はSpiderMonkeyというMozillaが作っているjavascriptのc実装でできます。macだったら
$ sudo port install spidermonkey
でインストール。インストールするとjsコマンドでjavascriptのインタラクティブシェルが起動できます。print(),help(),quit()が用意されてるよう。まぁあとは
#!/opt/local/bin/js
みたいにshebangで使えたり
$ js fizzbuzz.js
みたいに実行できます。
2010/7/09 (追記)
neocomplcacheについては7/09現在のgithubの最新版で以下の設定がデフォルトで追加されたので.vimrcに設定する必要はなくなりました。また、vimshellについても7/09現在dictionaryブランチの最新版で修正されて無事に動くようになりました。デフォルトのjsだとカーソル移動ができなかったりと不便なことが多いのでとても便利です。
それと、neocomplcacheだったら以下のように設定すれば<script>タグ内でjavascriptの補完ができます(ちなみにcssも)。まぁ条件見れば分かるとおり完璧じゃないですが。。
let g:neocomplcache_filetype_include_lists = {} call neocomplcache#set_variable_pattern('g:neocomplcache_filetype_include_lists', 'html, xhtml', [ \ {'filetype' : 'javascript', 'start' : '<script type="text/javascript">', 'end' : '</script>'}, \ {'filetype' : 'css', 'start' : '<style type="text/css">', 'end' : '</style>'}, \])
さらに、以下のように設定すればvimshellの中からiexe jsした時にjavascriptの補完が効きます。
let g:neocomplcache_same_filetype_lists = {} call neocomplcache#set_variable_pattern('g:neocomplcache_same_filetype_lists', 'int-js', 'javascript')
ただvimshellとjsは相性が悪い(?)のかよく分かりませんが、いまいち動作が悪いです。なんか改行すると無駄に入力がリピートされるようです。
js> function sum(x,y){ return x+y; } }
と入力すると以下のようになります。
js> function sum(x,y){ return x+y; return x+y; } return x+y; return x+y; } } return x+y; return x+y; } return x+y; return x+y; } } js> sum function sum(x, y) { function sum(x, y) { return x + y; function sum(x, y) { return x + y; return x + y; } function sum(x, y) { return x + y; return x + y; } return x + y; return x + y; } }
そもそも、
js> function sum
と入力すると
js> function sum sum typein:50: SyntaxError: missing ( before formal parameters: typein:50: sum typein:50: ^ js>
となってしまいますね。うーん分かりません。。