Skip to content

Commit 39d29c6

Browse files
author
ci-build
committed
[skip ci] Update site
1 parent ffbbf5c commit 39d29c6

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

index.html

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,7 @@ <h1>Ruby Style Guide</h1>
932932
<li><a href="#reverse-each"><code>reverse_each</code></a></li>
933933
<li><a href="#object-yield-self-vs-object-then"><code>Object#yield_self</code> vs <code>Object#then</code></a></li>
934934
<li><a href="#slicing-with-ranges">Slicing with Ranges</a></li>
935+
<li><a href="#collection-querying">Collection querying</a></li>
935936
</ul>
936937
</li>
937938
<li><a href="#numbers">Numbers</a>
@@ -6591,6 +6592,67 @@ <h3 id="slicing-with-ranges"><a class="anchor" href="#slicing-with-ranges"></a><
65916592
</div>
65926593
</div>
65936594
</div>
6595+
<div class="sect2">
6596+
<h3 id="collection-querying"><a class="anchor" href="#collection-querying"></a><a class="link" href="#collection-querying">Collection querying</a></h3>
6597+
<div class="paragraph">
6598+
<p>When possible, use <a href="https://docs.ruby-lang.org/en/master/Enumerable.html#module-Enumerable-label-Methods+for+Querying">predicate methods from <code>Enumerable</code></a> rather than expressions with <code>#count</code>, <code>#length</code> or <code>#size</code>.</p>
6599+
</div>
6600+
<div class="paragraph">
6601+
<p>Querying methods express the intention more clearly and are more performant in some cases. For example, <code>articles.any?(&amp;:published?)</code> is more readable than <code>articles.count(&amp;:published?) &gt; 0</code> and also more performant because <code>#any?</code> stops execution as soon as the first published article is found, while <code>#count</code> traverses the whole collection.</p>
6602+
</div>
6603+
<div class="listingblock">
6604+
<div class="content">
6605+
<pre class="rouge highlight"><code data-lang="ruby"><span class="c1"># bad</span>
6606+
<span class="n">array</span><span class="p">.</span><span class="nf">count</span> <span class="o">&gt;</span> <span class="mi">0</span>
6607+
<span class="n">array</span><span class="p">.</span><span class="nf">length</span> <span class="o">&gt;</span> <span class="mi">0</span>
6608+
<span class="n">array</span><span class="p">.</span><span class="nf">size</span> <span class="o">&gt;</span> <span class="mi">0</span>
6609+
6610+
<span class="n">array</span><span class="p">.</span><span class="nf">count</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">).</span><span class="nf">positive?</span>
6611+
6612+
<span class="n">array</span><span class="p">.</span><span class="nf">count</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
6613+
6614+
<span class="n">array</span><span class="p">.</span><span class="nf">count</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
6615+
6616+
<span class="c1"># good</span>
6617+
<span class="n">array</span><span class="p">.</span><span class="nf">any?</span>
6618+
6619+
<span class="n">array</span><span class="p">.</span><span class="nf">any?</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">)</span>
6620+
6621+
<span class="n">array</span><span class="p">.</span><span class="nf">none?</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">)</span>
6622+
6623+
<span class="n">array</span><span class="p">.</span><span class="nf">one?</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:something</span><span class="p">)</span></code></pre>
6624+
</div>
6625+
</div>
6626+
<div class="admonitionblock note">
6627+
<table>
6628+
<tr>
6629+
<td class="icon">
6630+
<div class="title">Note</div>
6631+
</td>
6632+
<td class="content">
6633+
<div class="paragraph">
6634+
<p>Predicate methods without arguments can&#8217;t replace <code>count</code> expressions when collection includes falsey values:</p>
6635+
</div>
6636+
<div class="listingblock">
6637+
<div class="content">
6638+
<pre class="rouge highlight"><code data-lang="ruby"><span class="p">[</span><span class="kp">nil</span><span class="p">,</span> <span class="kp">false</span><span class="p">].</span><span class="nf">any?</span>
6639+
<span class="c1"># =&gt; false</span>
6640+
6641+
<span class="p">[</span><span class="kp">nil</span><span class="p">,</span> <span class="kp">false</span><span class="p">].</span><span class="nf">none?</span>
6642+
<span class="c1"># =&gt; true</span>
6643+
6644+
<span class="p">[</span><span class="kp">nil</span><span class="p">].</span><span class="nf">one?</span>
6645+
<span class="c1"># =&gt; false</span>
6646+
6647+
<span class="p">[</span><span class="kp">false</span><span class="p">].</span><span class="nf">one?</span>
6648+
<span class="c1"># =&gt; false</span></code></pre>
6649+
</div>
6650+
</div>
6651+
</td>
6652+
</tr>
6653+
</table>
6654+
</div>
6655+
</div>
65946656
</div>
65956657
</div>
65966658
<div class="sect1">
@@ -8474,7 +8536,7 @@ <h2 id="spread-the-word"><a class="anchor" href="#spread-the-word"></a><a class=
84748536
</div>
84758537
<div id="footer">
84768538
<div id="footer-text">
8477-
Last updated 2025-06-14 21:23:21 UTC
8539+
Last updated 2025-06-19 13:52:08 UTC
84788540
</div>
84798541
</div>
84808542
</body>

0 commit comments

Comments
 (0)