関数で構成される操作の疑似DSLを作成することは完全に合理的です。
ただし、関数の機能についての説明に基づいて、次のdealWith...
ように関数をより一般化することをお勧めします。
function foo() {
tagInsert('h1', 'Text to append to h1 tag');
tagInsert('h2', 'Text to append to h2 tag');
tagInsert('h3', 'Text to append to h3 tag');
}
関数の本質が抽出され(指定されたタイプのすべてのタグにテキストを追加)、関数の変数がパラメーター化された(タグのタイプと追加するテキスト)ので、同じように簡単に何かを行うことができますお気に入り:
var tags = {
'h1': {
'en': 'Hello',
'es': 'Hola',
'sr@latin': 'Zdravo'
},
'h2': {
'en': 'Goodbye',
'es': 'Adios',
'sr@latin': 'Do vidjenja'
},
'h3': {
'en': 'Green',
'es'; 'Verde',
'sr@latin': 'Zelena'
}
};
function foo(locale) {
for(var tag in tags) {
tagInsert(tag, tags[tag][locale]);
}
}
関数の構成可能性は、実行する操作について関数が実際に呼び出されるまで延期されると大幅に改善されます。その後、まったく同じ関数を使用して、固定されたテキストセットをタグに追加するだけでなく、実行することもできます。したがって、ユーザーが使用することを好む言語は何でも。
もちろん、この柔軟性はばかげた長さにすることができ、何もできませんが、関数を集合演算子と考えるのは良いことです。関数への入力は何ですか(変数として明示的に宣言するか、グローバル)および新しい出力セットを生成するために実行される操作は何ですか?
あなたが扱っている特定のケースに対して一般的な方法で関数を書くのにそれほど余分な労力を要しない場合は、そのように書いてください。同様のアクションを行う必要があるときはいつでも、その関数を再利用できます。さまざまな入力。
覚えて...
私のtagInsert
定義を額面通りに受け取らないでください。あなたが実際に何をしようとしているのかについてはほとんど何も知りません。おそらく、その一般化は実際には意味がありません。重要なのは、開発者としてのあなたは、あなたが何を達成しようとしているのかについてより良い考えを持っているべきだということです。
Larry Wallのプログラマーの美徳に従う場合は、実行する必要のある余分な作業の量を最小限に抑えるように努める必要があります。そうすれば、関数は複雑さに対して適切な程度の構成可能性に到達します。
関数を呼び出す関数は、関数の要点です。関数を何度も書き直す必要はありません。実行するアクションの大規模な必須宣言を一連の関数に分割するだけでは、関数のポイントではありません。命令型コードの反復パターンとは何ですか?また、どのようにして可能な限り怠惰になることができますか?