자바스크립트는 문자열 할당시 여러라인으로 나눌 수가 없다.


// 그래서 이런 뻘짓을 해야함

var s = '' +

'<!doctype html>' +

'<html>' +

'    <body>BODY</body>' +

'</html>';



예전부터 이걸 어떻게 하는 방법이 없을까 하고 생각했지만 뾰족한 방법을 찾지를 못했는데,

얼마전 node.js 모듈 중에 하나 찾게 되었다.


multiline이란 모듈

https://github.com/sindresorhus/multiline



핵심은,

콜백함수로 받은 함수를 toString()을 사용하여 문자열로 변환한 다음, 함수내용 중 주석으로 넣은 문자열을 정규식으로 추출해내는 것이다.


// 주석 내부의 문자열을 추출할 정규식

var reCommentContents = /\/\*!?(?:\@preserve)?[ \t]*(?:\r\n|\n)([\s\S]*?)(?:\r\n|\n)\s*\*\//;


// 콜백함수로 받은 함수의 내용 중 주석 내부의 문자열을 추출하여 반환

var multiline = function(fn)

{

    if (typeof fn !== 'function') {

        throw new TypeError('Expected a function.');

    }


    var match = reCommentContents.exec(fn.toString());


    if (!match) {

        throw new TypeError('Multiline comment missing.');

    }


    return match[1];

}


// 이렇게 쓴다

var s = multiline(function(){/*

<!doctype html>

<html>

    <body>BODY</body>

</html>

*/});




물론 당연히 퍼포먼스 면에선 손실이 생기겠으나,

그 발상의 신선함이 마음에 들어서 따로 남긴다.

(그리고 실행시의 퍼포먼스에 더불어 키보드 치는 손가락의 퍼포먼스도 나름 중요하다고 생각하므로...)









Posted by bloodguy
,