@@ -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?(&:published?)</ code > is more readable than < code > articles.count(&:published?) > 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 "> ></ span > < span class ="mi "> 0</ span >
6607+ < span class ="n "> array</ span > < span class ="p "> .</ span > < span class ="nf "> length</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span >
6608+ < span class ="n "> array</ span > < span class ="p "> .</ span > < span class ="nf "> size</ span > < span class ="o "> ></ 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 "> &</ 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 "> &</ 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 "> &</ 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 "> &</ 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 "> &</ 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 "> &</ 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’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 "> # => 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 "> # => 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 "> # => 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 "> # => 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