<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Churadesign &#187; ruby</title>
	<atom:link href="http://www.churadesign.com/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.churadesign.com</link>
	<description>system &#38; web design</description>
	<lastBuildDate>Sun, 24 May 2009 13:38:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>あなたのコードに使うべき21のRubyトリック</title>
		<link>http://www.churadesign.com/2008/06/03/%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ab%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d21%e3%81%aeruby%e3%83%88%e3%83%aa%e3%83%83%e3%82%af/</link>
		<comments>http://www.churadesign.com/2008/06/03/%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ab%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d21%e3%81%aeruby%e3%83%88%e3%83%aa%e3%83%83%e3%82%af/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 23:17:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Article (記事)]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.churadesign.com/2008/06/03/%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ab%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d21%e3%81%aeruby%e3%83%88%e3%83%aa%e3%83%83%e3%82%af/</guid>
		<description><![CDATA[rubyinside.comに 21 Ruby Tricks You Should Be Using In Your Own Codeという記事が掲載されていました。 よりRubyコードをシンプルに読みやすくするために覚えておいて損はないですね。 勉強になりましたので抄訳しました。 1 &#8211; 正規表現にマッチした文字を抜き出す簡単な方法 文字列から正規表現にマッチした文字を抜き出す場合、通常はmatchもソッドを使いますが、次のようなショートカット方法もあります。 email = "Fred Bloggs &#60;fred@bloggs.com&#62;"email.match(/&#60;(.*?)&#62;/)[1] # =&#62; “fred@bloggs.com”email[/&#60;(.*?)&#62;/, 1] # =&#62; “fred@bloggs.com”email.match(/(x)/)[1] # =&#62; NoMethodError [:(]email[/(x)/, 1] # =&#62; nilemail[/([bcd]).*?([fgh])/, 2] # &#8230; <a href="http://www.churadesign.com/2008/06/03/%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ab%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d21%e3%81%aeruby%e3%83%88%e3%83%aa%e3%83%83%e3%82%af/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>rubyinside.comに <a href="http://www.rubyinside.com/21-ruby-tricks-902.html">21 Ruby Tricks You Should Be Using In Your Own Code</a>という記事が掲載されていました。</p>
<p>よりRubyコードをシンプルに読みやすくするために覚えておいて損はないですね。</p>
<p>勉強になりましたので抄訳しました。</p>
<h2>1 &#8211; 正規表現にマッチした文字を抜き出す簡単な方法</h2>
<p>文字列から正規表現にマッチした文字を抜き出す場合、通常はmatchもソッドを使いますが、次のようなショートカット方法もあります。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">email</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Fred Bloggs &lt;fred@bloggs.com&gt;</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="ident" style="color: #000044;">email</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">match</span><span class="punct" style="color: #444477; font-weight: bold;">(/</span><span class="regex" style="color: #BB6666; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFEEFF; background-position: initial initial;">&lt;(.*?)&gt;</span><span class="punct" style="color: #444477; font-weight: bold;">/)[</span><span class="number" style="color: #FF9999;">1</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>            <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “fred@bloggs.com”</span><span class="ident" style="color: #000044;">email</span><span class="punct" style="color: #444477; font-weight: bold;">[/</span><span class="regex" style="color: #BB6666; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFEEFF; background-position: initial initial;">&lt;(.*?)&gt;</span><span class="punct" style="color: #444477; font-weight: bold;">/,</span> <span class="number" style="color: #FF9999;">1</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                  <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “fred@bloggs.com”</span><span class="ident" style="color: #000044;">email</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">match</span><span class="punct" style="color: #444477; font-weight: bold;">(/</span><span class="regex" style="color: #BB6666; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFEEFF; background-position: initial initial;">(x)</span><span class="punct" style="color: #444477; font-weight: bold;">/)[</span><span class="number" style="color: #FF9999;">1</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                <span class="comment" style="color: #000055; font-style: italic;"># =&gt; NoMethodError [:(]</span><span class="ident" style="color: #000044;">email</span><span class="punct" style="color: #444477; font-weight: bold;">[/</span><span class="regex" style="color: #BB6666; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFEEFF; background-position: initial initial;">(x)</span><span class="punct" style="color: #444477; font-weight: bold;">/,</span> <span class="number" style="color: #FF9999;">1</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                      <span class="comment" style="color: #000055; font-style: italic;"># =&gt; nil</span><span class="ident" style="color: #000044;">email</span><span class="punct" style="color: #444477; font-weight: bold;">[/</span><span class="regex" style="color: #BB6666; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFEEFF; background-position: initial initial;">([bcd]).*?([fgh])</span><span class="punct" style="color: #444477; font-weight: bold;">/,</span> <span class="number" style="color: #FF9999;">2</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>        <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “g”</span></span>
</pre>
<p></p>
<h2>2 &#8211; Array#joinのショートカット</h2>
<p>配列に数値を渡し、要素を複製するArray#*メソッドはよく知られていますが、Array#*に文字を渡すことで、文字列を結合させる方法はあまり知られていないようです。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">this is a test</span><span class="punct" style="color: #444477; font-weight: bold;">}</span> <span class="punct" style="color: #444477; font-weight: bold;">*</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">, </span><span class="punct" style="color: #444477; font-weight: bold;">"</span>                 <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “this, is, a, test”</span><span class="ident" style="color: #000044;">h</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="symbol" style="color: #009999;">:name</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Fred</span><span class="punct" style="color: #444477; font-weight: bold;">“,</span> <span class="symbol" style="color: #009999;">:age</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="number" style="color: #FF9999;">77</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="ident" style="color: #000044;">h</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">map</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">i</span><span class="punct" style="color: #444477; font-weight: bold;">|</span> <span class="ident" style="color: #000044;">i</span> <span class="punct" style="color: #444477; font-weight: bold;">*</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">=</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span> <span class="punct" style="color: #444477; font-weight: bold;">*</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;"><span class="escape" style="color: #227777;">\n</span></span><span class="punct" style="color: #444477; font-weight: bold;">"</span>              <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “age=77\nname=Fred”</span></span>
</pre>
<p></p>
<h2>3- 小数の簡単なフォーマット方法</h2>
<p>価格の表示に小数点のフォーマットをそろえるにはsprintfの代わりに次の方法を使うことができます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">oney</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="number" style="color: #FF9999;">9.5</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">%.2f</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="ident" style="color: #000044;">money</span>                       <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “9.50″</span></span>
</pre>
<p></p>
<h2>4 &#8211; テキストを囲む簡単な方法</h2>
<p>#3のフォーマットテクニックと同様に文字列を他の文字列の中に差し込むことができます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">[%s]</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">same old drag</span><span class="punct" style="color: #444477; font-weight: bold;">"</span>             <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “[same old drag]”</span></span>
</pre>
<p>配列をつかうこともできます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">p hello p</span><span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">&lt;%s&gt;%s&lt;/%s&gt;</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="ident" style="color: #000044;">x</span>                    <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “&lt;p&gt;hello&lt;/p&gt;"</span></span>
</pre>
<p></p>
<h2>5 &#8211; ファイルツリーを削除</h2>
<p>簡単にShellを使ってはいけません。Rubyは使いやすい<a href="http://www.noobkit.com/show/ruby/ruby/standard-library/fileutils.html">ファイルユーティリティライブラリ</a>を持っています。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">require</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">fileutils</span><span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="constant" style="color: #0077FF;">FileUtils</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">rm_r</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">somedir</span><span class="punct" style="color: #444477; font-weight: bold;">'</span></span>
</pre>
<p>このメソッドを使う時は十分ご注意を！</p>
<h2>6 &#8211; Enum要素を爆破</h2>
<p>*はArrayやHashのようなEnum要素を*爆破*することができます。なんの事をいっているかは次の例をみてください。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">a</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">a b</span><span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="ident" style="color: #000044;">b</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">c d</span><span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="ident" style="color: #000044;">a</span> <span class="punct" style="color: #444477; font-weight: bold;">+</span> <span class="ident" style="color: #000044;">b</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                              <span class="comment" style="color: #000055; font-style: italic;"># =&gt; [[”a”, “b”, “c”, “d”]]</span><span class="punct" style="color: #444477; font-weight: bold;">[*</span><span class="ident" style="color: #000044;">a</span> <span class="punct" style="color: #444477; font-weight: bold;">+</span> <span class="ident" style="color: #000044;">b</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                             <span class="comment" style="color: #000055; font-style: italic;"># =&gt; [”a”, “b”, “c”, “d”]</span></span>
</pre>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">a</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="symbol" style="color: #009999;">:name</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Fred</span><span class="punct" style="color: #444477; font-weight: bold;">“,</span> <span class="symbol" style="color: #009999;">:age</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="number" style="color: #FF9999;">93</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="ident" style="color: #000044;">a</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                                  <span class="comment" style="color: #000055; font-style: italic;"># =&gt; [{:name =&gt; “Fred”, :age =&gt;93}]</span><span class="punct" style="color: #444477; font-weight: bold;">[*</span><span class="ident" style="color: #000044;">a</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                                 <span class="comment" style="color: #000055; font-style: italic;"># =&gt; [[:name, “Fred”], [:age, 93]]</span></span>
</pre>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">a</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">a b c d e f g h</span><span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="ident" style="color: #000044;">b</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="number" style="color: #FF9999;">0</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="number" style="color: #FF9999;">5</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="number" style="color: #FF9999;">6</span><span class="punct" style="color: #444477; font-weight: bold;">]</span><span class="ident" style="color: #000044;">a</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">values_at</span><span class="punct" style="color: #444477; font-weight: bold;">(*</span><span class="ident" style="color: #000044;">b</span><span class="punct" style="color: #444477; font-weight: bold;">).</span><span class="ident" style="color: #000044;">inspect</span>              <span class="comment" style="color: #000055; font-style: italic;"># =&gt; [”a”, “f”, “g”]</span></span>
</pre>
<p></p>
<h2>7 &#8211; ローカル値の定義をやめる</h2>
<p>空のHashやArray でローカル値の定義する代わりに、次のように定義と同時に使うことができます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">z</span> <span class="punct" style="color: #444477; font-weight: bold;">||=</span> <span class="punct" style="color: #444477; font-weight: bold;">[])</span> <span class="punct" style="color: #444477; font-weight: bold;">&lt;&lt;</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">test</span><span class="punct" style="color: #444477; font-weight: bold;">'</span></span>
</pre>
<p></p>
<h2>8 &#8211; ハッシュキーに文字やシンボルじゃないものをつかう</h2>
<p>シンボルや文字列以外のものをハッシュキーに使っているのをみることはほとんどありませんが、つかうことができ、時に使いやすいでしょう（次の例はあまりよい例ではないですが）。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">does</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="ident" style="color: #000044;">is</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="constant" style="color: #0077FF;">true</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Yes</span><span class="punct" style="color: #444477; font-weight: bold;">',</span> <span class="constant" style="color: #0077FF;">false</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">No</span><span class="punct" style="color: #444477; font-weight: bold;">'</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="ident" style="color: #000044;">does</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="number" style="color: #FF9999;">10</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">50</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                       <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “No”</span><span class="ident" style="color: #000044;">is</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="number" style="color: #FF9999;">10</span> <span class="punct" style="color: #444477; font-weight: bold;">&gt;</span> <span class="number" style="color: #FF9999;">5</span><span class="punct" style="color: #444477; font-weight: bold;">]</span>                           <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “Yes”</span></span>
</pre>
<p></p>
<h2>9 &#8211; &#8216;and&#8217; と&#8217;or&#8217;を使って一行に処理をまとめる</h2>
<p>より自信のあるRuby開発者がコードを短くして、ifやunlessなど短い複数行を省くためのトリックです。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">queue</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">[]</span><span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">hello x world</span><span class="punct" style="color: #444477; font-weight: bold;">}.</span><span class="ident" style="color: #000044;">each</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">do</span> <span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">word</span><span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">queue</span> <span class="punct" style="color: #444477; font-weight: bold;">&lt;&lt;</span> <span class="ident" style="color: #000044;">word</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">and</span> <span class="ident" style="color: #000044;">puts</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Added to queue</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">unless</span> <span class="ident" style="color: #000044;">word</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">length</span> <span class="punct" style="color: #444477; font-weight: bold;">&lt; </span> <span class="number" style="color: #FF9999;">2</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span><span class="ident" style="color: #000044;">puts</span> <span class="ident" style="color: #000044;">queue</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">inspect</span><span class="comment" style="color: #000055; font-style: italic;"># Output:</span><span class="comment" style="color: #000055; font-style: italic;">#   Added to queue</span><span class="comment" style="color: #000055; font-style: italic;">#   Added to queue</span><span class="comment" style="color: #000055; font-style: italic;">#   [”hello”, “world”]</span></span>
</pre>
<p></p>
<h2>10 &#8211; requireされた時ではなく直接実行されていた場合に何かを行う</h2>
<p>このパターンは上級Ruby開発者にはよく使われています。ライブラリとしてや、コマンドラインからディレクトリの下から呼ばれているのではなく、直接rubyコードが呼ばれている場合のみ処理を行います。</p>
<pre style="background-color: #F1F1F3; color: rgb(17, 17, 34); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">if</span> <span class="constant" style="color: #0077FF;">__FILE__</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="global" style="color: #77FFBB;">$0</span>
  <span class="comment" style="color: #000055; font-style: italic;"># Do something.. run tests, call a method, etc. We're direct.</span>
<span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<h2>11 &#8211; 複数データの簡単割り当て</h2>
<p>複数データの割当はRuby開発者が早期に学ぶことですが、簡単な割にほとんど使われていないのには驚きです。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">a</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">b</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">c</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">d</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="number" style="color: #FF9999;">1</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="number" style="color: #FF9999;">2</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="number" style="color: #FF9999;">3</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="number" style="color: #FF9999;">4</span></span>
</pre>
<p>要素数の指定がないメソッドの引数として配列を*でバンドルするのは特に役立ちます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">my_method</span><span class="punct" style="color: #444477; font-weight: bold;">(*</span><span class="ident" style="color: #000044;">args</span><span class="punct" style="color: #444477; font-weight: bold;">)</span><span class="ident" style="color: #000044;">a</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">b</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">c</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">d</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="ident" style="color: #000044;">args</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p>つぎのような賢い使い方も</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">initialize</span><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">args</span><span class="punct" style="color: #444477; font-weight: bold;">)</span><span class="ident" style="color: #000044;">args</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">keys</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">each</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">name</span><span class="punct" style="color: #444477; font-weight: bold;">|</span> <span class="ident" style="color: #000044;">instance_variable_set</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">@</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">+</span> <span class="ident" style="color: #000044;">name</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">to_s</span><span class="punct" style="color: #444477; font-weight: bold;">,</span> <span class="ident" style="color: #000044;">args</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="ident" style="color: #000044;">name</span><span class="punct" style="color: #444477; font-weight: bold;">]</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p></p>
<h2>12 &#8211; 数値の比較に複数の比較ではなくrangeインスタンスを使う</h2>
<p>もう<span style="font-style: italic;">i</span><span style="font-style: italic;">f x &gt; 1000 &amp;&amp; x &lt; 2000</span> を使わないで次のコードをつかいましょう。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">year</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="number" style="color: #FF9999;">1972</span><span class="ident" style="color: #000044;">puts</span>  <span class="keyword" style="color: #AA0000; font-weight: bold;">case</span> <span class="ident" style="color: #000044;">year</span><span class="keyword" style="color: #AA0000; font-weight: bold;">when</span> <span class="number" style="color: #FF9999;">1970</span><span class="punct" style="color: #444477; font-weight: bold;">..</span><span class="number" style="color: #FF9999;">1979</span><span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Seventies</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="keyword" style="color: #AA0000; font-weight: bold;">when</span> <span class="number" style="color: #FF9999;">1980</span><span class="punct" style="color: #444477; font-weight: bold;">..</span><span class="number" style="color: #FF9999;">1989</span><span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Eighties</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="keyword" style="color: #AA0000; font-weight: bold;">when</span> <span class="number" style="color: #FF9999;">1990</span><span class="punct" style="color: #444477; font-weight: bold;">..</span><span class="number" style="color: #FF9999;">1999</span><span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">Nineties</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p></p>
<h2>13 &#8211; 配列をつかって重複したコードをカット</h2>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="punct" style="color: #444477; font-weight: bold;">%w{</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">rubygems daemons eventmachine</span><span class="punct" style="color: #444477; font-weight: bold;">}.</span><span class="ident" style="color: #000044;">each</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">x</span><span class="punct" style="color: #444477; font-weight: bold;">|</span> <span class="ident" style="color: #000044;">require</span> <span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span></span>
</pre>
<p></p>
<h2>14 &#8211; 比較演算子</h2>
<p>比較演算子もまた、Ruby開発者が早期に学ぶトリックですが、ほとんどみることがありません。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">puts</span> <span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">10</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">x is ten</span><span class="punct" style="color: #444477; font-weight: bold;">"</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">x is not ten</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="comment" style="color: #000055; font-style: italic;"># Or.. an assignment based on the results of a ternary operation:</span><span class="constant" style="color: #0077FF;">LOG</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">sev_threshold</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="constant" style="color: #0077FF;">ENVIRONMENT</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="symbol" style="color: #009999;">:development</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="constant" style="color: #0077FF;">Logger</span><span class="punct" style="color: #444477; font-weight: bold;">::</span><span class="constant" style="color: #0077FF;">DEBUG</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="constant" style="color: #0077FF;">Logger</span><span class="punct" style="color: #444477; font-weight: bold;">::</span><span class="constant" style="color: #0077FF;">INFO</span></span>
</pre>
<p></p>
<h2>15 &#8211; ネストされた比較演算子</h2>
<p>トラブルを引き起こすでしょうが、比較演算子はネストすることができます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">qty</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="number" style="color: #FF9999;">1</span><span class="ident" style="color: #000044;">qty</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">0</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">none</span><span class="punct" style="color: #444477; font-weight: bold;">'</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="ident" style="color: #000044;">qty</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">1</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">one</span><span class="punct" style="color: #444477; font-weight: bold;">'</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">many</span><span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="comment" style="color: #000055; font-style: italic;"># Just to illustrate, in case of confusion:</span><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">qty</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">0</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">none</span><span class="punct" style="color: #444477; font-weight: bold;">'</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">qty</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">1</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">one</span><span class="punct" style="color: #444477; font-weight: bold;">'</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="punct" style="color: #444477; font-weight: bold;">'</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">many</span><span class="punct" style="color: #444477; font-weight: bold;">'))</span></span>
</pre>
<p></p>
<h2>16 &#8211; Rubyの論理式を簡素に</h2>
<p>よくつぎのようなメソッドパターンをみますが、</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">is_odd</span><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">x</span><span class="punct" style="color: #444477; font-weight: bold;">)</span><span class="comment" style="color: #000055; font-style: italic;"># Wayyyy too long..</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  if</span> <span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="number" style="color: #FF9999;">2</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">0</span><span class="keyword" style="color: #AA0000; font-weight: bold;">    return</span> <span class="constant" style="color: #0077FF;">false</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  else</span><span class="keyword" style="color: #AA0000; font-weight: bold;">    return</span> <span class="constant" style="color: #0077FF;">true</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  end</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p>おそらく次のように比較演算子を使って、よい短くできるのでは？</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">is_odd</span><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">x</span><span class="punct" style="color: #444477; font-weight: bold;">)</span><span class="comment" style="color: #000055; font-style: italic;"># Don't EVER put false and true in a ternary operator!!</span><span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="number" style="color: #FF9999;">2</span> <span class="punct" style="color: #444477; font-weight: bold;">==</span> <span class="number" style="color: #FF9999;">0</span> <span class="punct" style="color: #444477; font-weight: bold;">?</span> <span class="constant" style="color: #0077FF;">false</span> <span class="punct" style="color: #444477; font-weight: bold;">:</span> <span class="constant" style="color: #0077FF;">true</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p>確かに。このパターンはよく見ますが、もう一歩すすめてください。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">is_odd</span><span class="punct" style="color: #444477; font-weight: bold;">(</span><span class="ident" style="color: #000044;">x</span><span class="punct" style="color: #444477; font-weight: bold;">)</span><span class="comment" style="color: #000055; font-style: italic;"># Use the logical results provided to you by Ruby already..</span><span class="ident" style="color: #000044;">x</span> <span class="punct" style="color: #444477; font-weight: bold;">%</span> <span class="number" style="color: #FF9999;">2</span> <span class="punct" style="color: #444477; font-weight: bold;">!=</span> <span class="number" style="color: #FF9999;">0</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p></p>
<h2>17　-　例外のバックトレースのすべてをみる</h2>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">do_division_by_zero</span><span class="punct" style="color: #444477; font-weight: bold;">;</span> <span class="number" style="color: #FF9999;">5</span> <span class="punct" style="color: #444477; font-weight: bold;">/</span> <span class="number" style="color: #FF9999;">0</span><span class="punct" style="color: #444477; font-weight: bold;">;</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">end</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  begin</span><span class="ident" style="color: #000044;">    do_division_by_zero</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  rescue</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="ident" style="color: #000044;">exception</span><span class="ident" style="color: #000044;">    puts</span> <span class="ident" style="color: #000044;">exception</span><span class="punct" style="color: #444477; font-weight: bold;">.</span><span class="ident" style="color: #000044;">backtrace</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p></p>
<h2>18 &#8211; 配列とシングルオブジェクト両方で繰り返し処理</h2>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="comment" style="color: #000055; font-style: italic;"># [*items] はシングルオブジェクトを配列に置き換えます。</span><span class="punct" style="color: #444477; font-weight: bold;">[*</span><span class="ident" style="color: #000044;">items</span><span class="punct" style="color: #444477; font-weight: bold;">].</span><span class="ident" style="color: #000044;">each</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">do</span> <span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="ident" style="color: #000044;">item</span><span class="punct" style="color: #444477; font-weight: bold;">|</span><span class="comment" style="color: #000055; font-style: italic;"># …</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<p></p>
<h2>19 &#8211; Rescueブロックはbeginでくくる必要はない</h2>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">x</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  begin</span><span class="comment" style="color: #000055; font-style: italic;">    # …</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  rescue</span><span class="comment" style="color: #000055; font-style: italic;">    # …</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  end</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span></span>
</pre>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span class="keyword" style="color: #AA0000; font-weight: bold;">def </span><span class="method" style="color: #007777;">x</span><span class="comment" style="color: #000055; font-style: italic;">  # …</span><span class="keyword" style="color: #AA0000; font-weight: bold;">  rescue</span><span class="comment" style="color: #000055; font-style: italic;">    # …</span><span class="keyword" style="color: #AA0000; font-weight: bold;">end</span>
</pre>
<p></p>
<h2>20 &#8211; ブロックコメント</h2>
<p>これは古いRuby学校のコードでよくみますが、あまりつかわれていないようです。ポンドマークのついた巨大な行よりも見やすいのでは？</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">puts</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">x</span><span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="comment" style="color: #000055; font-style: italic;">=beginthis is a block commentYou can put anything you like here!puts “y”=end</span><span class="ident" style="color: #000044;">puts</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">z</span><span class="punct" style="color: #444477; font-weight: bold;">"</span></span>
</pre>
<p></p>
<h2>21 &#8211; rescueの救出</h2>
<p>一行でrescueを使う事で例外が発生した場合に値を返すことができます。</p>
<pre style="background-color: #F1F1F3; color: #111122; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 97%; overflow-x: auto; overflow-y: hidden; margin-top: 12px;">
<span style="color: #333333; font-family: 'Lucida Grande'; font-size: 13px; line-height: 21px;"><span class="ident" style="color: #000044;">h</span> <span class="punct" style="color: #444477; font-weight: bold;">=</span> <span class="punct" style="color: #444477; font-weight: bold;">{</span> <span class="symbol" style="color: #009999;">:age</span> <span class="punct" style="color: #444477; font-weight: bold;">=&gt;</span> <span class="number" style="color: #FF9999;">10</span> <span class="punct" style="color: #444477; font-weight: bold;">}</span><span class="ident" style="color: #000044;">h</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="symbol" style="color: #009999;">:name</span><span class="punct" style="color: #444477; font-weight: bold;">].</span><span class="ident" style="color: #000044;">downcase</span>                         <span class="comment" style="color: #000055; font-style: italic;"># ERROR</span><span class="ident" style="color: #000044;">h</span><span class="punct" style="color: #444477; font-weight: bold;">[</span><span class="symbol" style="color: #009999;">:name</span><span class="punct" style="color: #444477; font-weight: bold;">].</span><span class="ident" style="color: #000044;">downcase</span> <span class="keyword" style="color: #AA0000; font-weight: bold;">rescue</span> <span class="punct" style="color: #444477; font-weight: bold;">"</span><span class="string" style="color: #994444; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #FFFFEE; background-position: initial initial;">No name</span><span class="punct" style="color: #444477; font-weight: bold;">"</span>        <span class="comment" style="color: #000055; font-style: italic;"># =&gt; “No name”</span></span>
</pre>
<p><a href="http://www.rubyinside.com/21-ruby-tricks-902.html">原文</a>のコメント欄にも他のTipsや意見等が投稿されていました。</p>
<h2>おまけ1 &#8211; 6と11を組み合わせるとこんな風にかけます。特にArray#splitと一緒に使うと特に便利です。</h2>
<p style="font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 10px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;"><span style="color: #333333; font-family: 'Lucida Grande'; font-weight: bold;">&gt; a, b, *c = 1, 2, 3, 4, 5, 6<br />
a =&gt; 1<br />
b =&gt; 2<br />
c =&gt; [3, 4, 5, 6]</span></p>
<h2>おまけ2 &#8211; 最初から12個のフォボナッチ数を求める</h2>
<p style="font-weight: normal; line-height: 1.5em; text-transform: none; margin-top: 10px; margin-right: 5px; margin-bottom: 10px; margin-left: 0px;"><span style="color: #333333; font-family: 'Lucida Grande'; font-weight: bold;"><span style="line-height: 17px;">10.times { (fib ||= [1, 1]) &lt;&lt; fib[-1] + fib[-2] }</span><br /></span></p>
<p>他にもRubyコードのTipsがあれば知りたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.churadesign.com/2008/06/03/%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ab%e4%bd%bf%e3%81%86%e3%81%b9%e3%81%8d21%e3%81%aeruby%e3%83%88%e3%83%aa%e3%83%83%e3%82%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

