政略結婚じゃないよ。

コンピュータや音楽のことなど

全体表示

[ リスト | 詳細 ]

記事検索
検索

Here document、文字列の変数展開、配列を返す for ループなど
強力な機能が魅力の CoffeeScript だが node.js が標準では utf8 のみ
しか扱えないので ShiftJIS の漢字を含んだソースをコンパイルできない。

この問題を解決するためにはコンテキストによって
CoffeeScript 中の漢字 \uXXXX
html 中の漢字 &#xXXXX;
のようにエスケープしてやらなければならない。

自作のスクリプト(JavaScript) と秀丸マクロを組み合わせて
うまいこと処理する方法を模索中。

CoffeeScript の公式ページのコード例と同じ配色になるように
秀丸エディタ用に強調表示ファイルを作った。

---
241,(?<=(class|new)\s*)[a-zA-Z_$][a-zA-Z0-9_$]*
49,and|catch|class|do|else|extends|finally|for|if|in|is|isnt|new|of|on|or|own|return|switch|then|try|unless|until|when|while
113,false|no|off|on|this|true|undefined|yes
113,super|@[a-z_$][a-zA-Z0-9_$]*
25,(?<=^ *\{.+)\}(?= *=)
25,(?<=^ *\[[^\]]*)]\s*=
25,(?<=^ *)\{(?=.+\} *=)
25,(?<=^ *)\[(?=[^\]]*\]\s*=)
25,:(?=\s*(?:\([^)]*\))?\s*->)
217,[a-z_][a-z0-9_$:]*(?=\s*[=:]\s*(?:\([^)]*\))?\s*\->)
25,[-+*%~<>=!?]| /
153,\([^)]*\)(?=\s*\->)
/<ColorSet>
/[0][0]:0x01000008
/[0][1]:0x01000005
/[0][2]:0x00000000
/[1][0]:0x01000008
/[1][1]:0x01000005
/[1][2]:0x00000000
/[2][0]:0x01000008
/[2][1]:0x01000005
/[2][2]:0x00000001
/[3][0]:0x00919191
/[3][1]:0x01000005
/[3][2]:0x00000000
/[4][0]:0x000056FF
/[4][1]:0x01000005
/[4][2]:0x00000000
/[5][0]:0x00FF0000
/[5][1]:0x01000005
/[5][2]:0x00000001
/[6][0]:0x01000008
/[6][1]:0x01000005
/[6][2]:0x0000000A
/[7][0]:0x00AE35A5
/[7][1]:0x01000005
/[7][2]:0x00000000
/[8][0]:0x000000FF
/[8][1]:0x01000005
/[8][2]:0x00000001
/[9][0]:0x01000008
/[9][1]:0x01000005
/[9][2]:0x00000009
/[10][0]:0x01000005
/[10][1]:0x00008000
/[10][2]:0x00000000
/[11][0]:0x00800080
/[11][1]:0x01000005
/[11][2]:0x00000002
/[12][0]:0x00800000
/[12][1]:0x01000005
/[12][2]:0x00000002
/[13][0]:0x00808000
/[13][1]:0x01000005
/[13][2]:0x00000000
/[14][0]:0x00800080
/[14][1]:0x01000005
/[14][2]:0x00000000
/[15][0]:0x00000080
/[15][1]:0x01000005
/[15][2]:0x00000000
/[16][0]:0x00808000
/[16][1]:0x01000005
/[16][2]:0x00000000
/[17][0]:0x0100000E
/[17][1]:0x0100000D
/[17][2]:0x00000000
/[18][0]:0x00808080
/[18][1]:0x01000005
/[18][2]:0x00000000
/[19][0]:0x00808080
/[19][1]:0x01000005
/[19][2]:0x00000000
/[20][0]:0x003FA300
/[20][1]:0x01000005
/[20][2]:0x00000000
/[21][0]:0x00008080
/[21][1]:0x01000005
/[21][2]:0x00000002
/[22][0]:0x00AD7600
/[22][1]:0x01000005
/[22][2]:0x00000000
/[23][0]:0x009C4321
/[23][1]:0x01000005
/[23][2]:0x00000000
/[24][0]:0x01000008
/[24][1]:0x01000005
/[24][2]:0x00000001
/[25][0]:0x01000008
/[25][1]:0x01000005
/[25][2]:0x00000001
/[26][0]:0x00800080
/[26][1]:0x01000005
/[26][2]:0x00000000
/[27][0]:0x00000080
/[27][1]:0x01000005
/[27][2]:0x00000000
/[28][0]:0x00C0C0C0
/[28][1]:0x01000005
/[28][2]:0x00000000
/[29][0]:0x00808000
/[29][1]:0x01000005
/[29][2]:0x00000000
/[30][0]:0x01000008
/[30][1]:0x01000005
/[30][2]:0x00000000
/[31][0]:0x00E0E0E0
/[31][1]:0x01000005
/[31][2]:0x00000000
/[32][0]:0x000000FF
/[32][1]:0x01000005
/[32][2]:0x00000000
/[33][0]:0x00C0C0C0
/[33][1]:0x01000005
/[33][2]:0x00000000
/[34][0]:0x01000008
/[34][1]:0x0000FFFF
/[34][2]:0x00000001
/[35][0]:0x000000FF
/[35][1]:0x01000005
/[35][2]:0x00000000
/[36][0]:0x00000080
/[36][1]:0x01000005
/[36][2]:0x00000001
/[37][0]:0x00008000
/[37][1]:0x01000005
/[37][2]:0x00000001
/[38][0]:0x00008080
/[38][1]:0x01000005
/[38][2]:0x00000001
/[39][0]:0x00C0C0C0
/[39][1]:0x01000005
/[39][2]:0x00000001
/[40][0]:0x0000FF00
/[40][1]:0x01000005
/[40][2]:0x00000001
/[41][0]:0x00FF00FF
/[41][1]:0x01000005
/[41][2]:0x00000001
/[42][0]:0x00FFFFFF
/[42][1]:0x00808000
/[42][2]:0x00000000
/[43][0]:0x00FFFFFF
/[43][1]:0x00800080
/[43][2]:0x00000000
/[44][0]:0x00FF0000
/[44][1]:0x01000005
/[44][2]:0x00000000
/[45][0]:0x00FFFFFF
/[45][1]:0x00808080
/[45][2]:0x00000000
/[46][0]:0x00808080
/[46][1]:0x00E0E0E0
/[46][2]:0x00000000
/[47][0]:0x00808000
/[47][1]:0x01000005
/[47][2]:0x00000000
/[48][0]:0x01000005
/[48][1]:0x01000008
/[48][2]:0x00000000
/[49][0]:0x02000000
/[49][1]:0x02000000
/[49][2]:0x00000000
/[50][0]:0x00000000
/[50][1]:0x00000000
/[50][2]:0x00000000
/[51][0]:0x00FF0000
/[51][1]:0x01000005
/[51][2]:0x00000000
/<ColorSetEx>
/CurLineColorEx:0x00FFFF00
/RulerColorEx:0xFFFFFFFF
/RulerBackEx:0xFFFFFFFF
/<HilightMulti>
/0003,00000002,00,00,00000000,"###",00000000,"###"
/0014,00000002,00,00,00000000,"\"\"\"",00000000,"\"\"\""
/0003,00020002,00,00,00000000," #",00010001,"\\n"
/0014,00010002,00,00,00000000,"///",00000000,"///"
/0014,00000004,00,00,00010003,"\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'|/[^/\\\\]*(?:(?:\\\\.|/\\])[^/\\\\]*)*/[gmi]*",00000001,""
/0014,00000002,00,00,00000000,"`",00000000,"`"
/0003,00000003,00,00,00000000,"#",00000002,""
/0014,00000002,00,5C,00000000,"\"",00000000,"\""
---

CoffeeScript の for in when

CoffeeScript の for in when が強力だ。
(x * x for x in [1..4]) => [1,4,9,16]
(x * x for x in [1..4] when x % 2 == 0) => [4,16]
同じことを JavaScript で書くと長くなる上に関数呼び出しの回数も多い。
[1,2,3,4].map(function(x){ return x * x; }) => [1,4,9,16]
[1,2,3,4].filter(function(x){ return x % 2 == 0; })
            .map(function(x){ return x * x; }) => [4,16]

行コメントを ' から // に変更するのは忘れているとエラーになるので
すぐに発見できる。
たちが悪いのは VBA の文字列の連結 & が JavaScript だとビット演算子なので
文法上はエラーにならない場合が多い。
そして文字列が "0" になってしまい考えこむハメになる。

CoffeeScript 雑感

予想以上にコードがすっきり書ける。
パーレンもブレースもほとんど書かなくて
よくなることにびっくり。

困ったのは ShiftJIS だと漢字が化けてしまうこと。
node.js は標準で utf8 のみの対応なので対処する
方法があれば本格的に使っていきたい。


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事