2011-05-12 50 views
8

JavascriptのC/C++マクロに似たマクロを定義する方法はありますか?JavaScriptのマクロ定義

私は、デバッグ文のためにこれを使用する:

#ifdef TEST__ 
#define MYDEBUG(##x) debug(__FILE__,x) 
#else 
#define debug 
#endif 
よう 何か

必ずしも似ていないが、私はその機能をacheieveたいです。私はそれができる方法はありますか?

ありがとうございました

+0

ここでマクロに似た何かを使用するのは、関数に格納して呼び出してインラインプログラミングロジックを使用するだけと違うでしょうか? –

+1

は、実行時ではなくコンパイル時に評価されるため、異なる点があります。 – stivlo

+0

マクロは自動的に__FILE__、__FUNCTION__(コンパイラで許可されている場合)と__LINE__を自動的にピックアップします。これは、すべての関数呼び出しでこの情報を混乱させないように、コードをよりきれいにします。 – Kiran

答えて

13
var de = false; // true when debugging 
function bug(msg){ ... display msg ... } 

使用法:

de&&bug("hello world") 

"デ" は偽(実動モード)で、オーバーヘッドは最小です。まだ興味がある人のために

+1

これは非常に賢いです。プログラマチックなソリューションの問題は、デバッグ関数が引数が重い場合、関数が空であっても、計算の代償を払い、引数を関数本体に渡す必要があるということです。このトリックは、生産コードで実際のデバッグ機能が呼び出されないという問題を回避します。 – bearvarine

1

JavaScriptでこれを行う方法はありません。

var isDebugging = false; 

次に、変数をtrueにするかどうかをチェックするだけです。明らかに、これにより、ファイルサイズに伴う不必要なオーバーヘッドが発生し、パフォーマンスの低下はごくわずかです。しかし、あなた自身のフォーマットを指定することと、アップロードする前にデバッグコードを取り除くためのツールを使ってコードを実行すること以外は、

リリースビルドの場合

var foo = function() { 
    <!-- document.write("blah"); --> 
}; 

ような何か、あなたは包括的、タグ内のすべてを削除します。そして、デバッグビルドの場合は、タグを削除するだけで、コードを残すことができます。このようなものはAntビルドスクリプトなどで実行できます。

0

Javascriptにはコンパイラがないため、マクロがありません。 console.logを使用して、展開時にこれらのステートメントを削除するための正規表現を書くことができます。

0

@saphtが言ったようにコンパイル時間がないことは間違いありませんが、必要に応じてファイルを前処理することができます。通常、私は多くのJavascriptファイルをまとめてビルド情報を追加するためにantスクリプトを使用します。私はあなたが面白いかもしれJavascriptのプリプロセッサがある参照のGoogle検索から

http://www.bramstein.com/projects/preprocess/

0

https://github.com/dcodeIO/Preprocessor.js

純粋なJavaScriptでのJavaScriptのソースファイルプリプロセッサ、例えばさまざまなバージョンのライブラリをビルドします。

例:ビルダー

// #ifdef FULL 
console.log("Including extension"); 
// #include "path/to/extension.js" 
// #else 
console.log("Not including extension"); 
// #endif 

// #if 1==2 
console.log("1==2"); 
// #elif 2==2 
console.log("2==2"); 
// #endif 
0

からhttps://github.com/electricimp/Builder、あなたが好きことができます。

@macro MYDEBUG(x) 
    debug(@{__FILE__}, @{x}); 
@end 

... 

@{MYDEBUG(100500)} 

また、直接のGitHubから含まためにサポートしています。

関連する問題