Utility Functions 原文

noConflict _.noConflict() 原文

競合以前の”_”変数に対するコントロールを提供します。 Underscore オブジェクトへの参照が返されます。

```javascript var underscore = _.noConflict(); <pre class=""> ###identity `_.identity(value)` [原文](http://underscorejs.org/#identity)

引数として渡された値と同じ値を返します。数学的に表現すると f(x) = x となります。 この関数は役に立たないように見えますが、Underscore全体でデフォルトのイテレータとして使用しています。

```javascript var moe = {name : ‘moe’}; moe === _.identity(moe); => true </code></pre>

times _.times(n, iterator, [context]) 原文

渡された iterator 関数を n 回呼び出します。それぞれの iterator 呼び出しは、引数(context)の index と共に呼び出されます。

注:この例ではChaining構文を使用しています。

```javascript _(3).times(function(n){ genie.grantWishNumber(n); }); <pre class=""> ###random `_.random(min, max)` [原文](http://underscorejs.org/#random)

min 以上 max 以下の範囲でランダムな整数値を返します。引数を1つだけ渡した場合は、0 から渡された値までの数値を返します。

```javascript _.random(0, 100); => 42 </code></pre>

mixin _.mixin(object) 原文

Underscoreはあなた独自のutility関数を含める形で拡張することを許しています。{name: function} ハッシュを満たすように定義することで、独自の関数をOOP(オブジェクト指向プログラミング)ラッパーのように、Underscoreオブジェクトへ追加できます。

```javascript _.mixin({ capitalize : function(string) { return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase(); } }); _(“fabio”).capitalize(); => “Fabio” <pre class=""> ###uniqueId `_.uniqueId([prefix])` [原文](http://underscorejs.org/#uniqueId)

クライアント側のモデルまたはDOM要素のいずれかが必要な、グローバルなユニークIDを生成します。引数に prefix を渡した場合、IDが後ろに付きます。

```javascript .uniqueId(‘contact’); => ‘contact_104’ </code></pre>

escape _.escape(string) 原文

HTMLに挿入するため、次の文字列をエスケープします。 &<>"'/

```javascript _.escape(‘Curly, Larry & Moe’); => “Curly, Larry & Moe” <pre class=""> ###unescape `_.unescape(string)` [原文](http://underscorejs.org/#unescape)

escape と反対で、上と対をなす文字列をエスケープされていない文字に置き換えます。 &amp;amp;&amp;lt;&amp;gt;&amp;quot;&amp;#x27;&amp;#x2F;

```javascript _.escape(‘Curly, Larry &amp; Moe’); => "Curly, Larry & Moe" </code></pre>

result _.result(object, property) 原文

プロパティの値が関数の場合は、それを実行し、そうでなければプロパティ値を返します。

```javascript var object = {cheese: ‘crumpets’, stuff: function(){ return ‘nonsense’; }}; _.result(object, ‘cheese’); => “crumpets” _.result(object, ‘stuff’); => “nonsense” <pre class=""> ###template `_.template(templateString, [data], [settings])` [原文](http://underscorejs.org/#template)

レンダリング用に評価するためJavaScriptテンプレートをコンパイルして関数化を行います。 JSONデータソースから複雑なHTMLの断片をレンダリングするために便利です。 template関数では &lt;%= … %&gt; と、任意のJavaScriptコードを実行することができる &lt;% … %&gt; とで変数を補間することができます。 変数の補間と同時にHTMLエンコードを行う場合には &lt;%- … %&gt; を利用してください。 template関数を評価する際はテンプレート側の変数に合致するプロパティを持つ data オブジェクトを渡してください。 1度しか利用しないテンプレートを書く場合に、 data オブジェクトを第二引数として渡すことで、 template を返す代わりにレンダリングをすぐに実行できます。 settings 引数は _.templateSettings でオーバーライドされたハッシュを含んでいる必要があります。

```javascript var compiled = _.template("hello: <%= name %>"); compiled({name : ‘moe’}); => "hello: moe"

var list = "<% _.each(people, function(name) { %> <li><%= name %></li> <% }); %>"; _.template(list, {people : [‘moe’, ‘curly’, ‘larry’]}); => "<li>moe</li><li>curly</li><li>larry</li>"

var template = _.template("<b><%- value %></b>"); template({value : ‘<script>’}); => "<b>&lt;script&gt;</b>" </code></pre>

Javascriptコード内から print を使用することもできます。これは時に <%= ... %> を使用するより便利です。

```javascript var compiled = _.template(“<% print(‘Hello ‘ + epithet); %>”); compiled({epithet: “stooge”}); => “Hello stooge.” <pre class=""> ERBスタイルのデリミタが好みではない場合、UnderscoreのtemplateSettingsにて、コードの置き換えを異なるシンボルを使って行うよう変更することができます。 interpolateは、一致したものを補完する正規表現式を定義してください(デフォルトは`<%= %>`用)。 escapeは、HTMLエスケープした後の値を挿入する正規表現式を定義してください(デフォルトは`<%- %>`用)。 evaluateは、結果文字列に挿入することなく評価される正規表現式を定義してください(デフォルトは`<% %>`用)。 上の3つについて、それぞれ定義、省略することができます。 この例では、[Mustache.js](http://github.com/janl/mustache.js#readme)スタイルのテンプレートを真似ています。

```javascript _.templateSettings = { interpolate : /{{(.+?)}}/g };

var template = _.template("Hello !"); template({name : "Mustache"}); => "Hello Mustache!" </code></pre>

デフォルトでは、 template の場所の値は、 with ステートメントによってローカルスコープの中のデータから探します。 ただし、variable を設定することで、単一の変数名を指定することができます。これにより、テンプレートがレンダリングするスピードを大幅に改善することができます。

```javascript _.template(“Using ‘with’: <%= data.answer %>”, {answer: ‘no’}, {variable: ‘data’}); => “Using ‘with’: no” <pre class=""> 再現が難しいエラーをデバッグするときに、テンプレートをプリコンパイルすると、大きな助けとなるります。これは、プリコンパイルされたテンプレートが、クライアントでテンプレートがコンパイルされる際のエラーについて、行番号とスタックトレースを提供できるためです。 **source** プロパティは、コンパイルされたテンプレート上において、簡単にプリコンパイルする関数を利用するためのものです。

```html <script> JST.project = <%= _.template(jstText).source %>; </script> </code></pre>