oliverdavies.uk/content/node.2be6f96b-eecb-4205-9ca9-b364196535ab.yml

146 lines
5.1 KiB
YAML

uuid:
- value: 2be6f96b-eecb-4205-9ca9-b364196535ab
langcode:
- value: en
type:
- target_id: daily_email
target_type: node_type
target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7
revision_timestamp:
- value: '2025-05-11T09:00:22+00:00'
revision_uid:
- target_type: user
target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849
revision_log: { }
status:
- value: true
uid:
- target_type: user
target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849
title:
- value: 'Is zero unlimited?'
created:
- value: '2024-01-18T00:00:00+00:00'
changed:
- value: '2025-05-11T09:00:22+00:00'
promote:
- value: false
sticky:
- value: false
default_langcode:
- value: true
revision_translation_affected:
- value: true
path:
- alias: /daily/2024/01/18/is-zero-unlimited
langcode: en
body:
- value: |
<p>Something I've seen in code is the unclear use of zero when adding limits, such as loading items from a database.</p>
<p>In some instances, setting zero will return all items - essentially, an 'unlimited' value in disguise - rather than returning no results, which is what I'd expect.</p>
<p>I imagine the code looks something like this:</p>
<pre><code class="language-php">if ($limit &gt; 0) {
$query-&gt;range(0, $limit);
}
</code></pre>
<p>If <code>$limit</code> is greater than one, add it to the query.</p>
<p>For me, using <code>0</code> as the unlimited value doesn't seem like the best option.</p>
<p>I'd prefer to use a <code>null</code> value as the default and only add the limit if it's set - i.e. an integer or not null.</p>
<p>It means the value could be either an integer or null, but I think the intent of the code is more explicit.</p>
<p>This would make the code look like this:</p>
<pre><code class="language-php">if (is_int($limit)) {
$query-&gt;range(0, $limit);
}
</code></pre>
<p>Whilst this is clearer, it doesn't cover all use cases.</p>
<p>Presumably, the limit should only be a positive integer.</p>
<p>It wouldn't make sense to set a negative number as the limit or, as the unlimited value is <code>null</code>, setting it to zero.</p>
<p>This is the end code I'd likely write:</p>
<pre><code class="language-php">if (is_int($limit)) {
if ($limit &lt; 1) {
throw new InvalidArgumentException('A limit must be a positive integer.');
}
$query-&gt;range(0, $limit);
}
</code></pre>
<p>If the limit is not an integer, nothing happens.</p>
<p>It throws an Exception if the value is invalid - i.e. less than one.</p>
<p>The limit is applied if the limit is greater than or equal to one.</p>
<p>While it's more complex as there are more checks to perform and different types in use, I think this is clearer and easier for someone reading or implementing the code to understand what it does and use it correctly.</p>
format: full_html
processed: |
<p>Something I've seen in code is the unclear use of zero when adding limits, such as loading items from a database.</p>
<p>In some instances, setting zero will return all items - essentially, an 'unlimited' value in disguise - rather than returning no results, which is what I'd expect.</p>
<p>I imagine the code looks something like this:</p>
<pre><code class="language-php">if ($limit &gt; 0) {
$query-&gt;range(0, $limit);
}
</code></pre>
<p>If <code>$limit</code> is greater than one, add it to the query.</p>
<p>For me, using <code>0</code> as the unlimited value doesn't seem like the best option.</p>
<p>I'd prefer to use a <code>null</code> value as the default and only add the limit if it's set - i.e. an integer or not null.</p>
<p>It means the value could be either an integer or null, but I think the intent of the code is more explicit.</p>
<p>This would make the code look like this:</p>
<pre><code class="language-php">if (is_int($limit)) {
$query-&gt;range(0, $limit);
}
</code></pre>
<p>Whilst this is clearer, it doesn't cover all use cases.</p>
<p>Presumably, the limit should only be a positive integer.</p>
<p>It wouldn't make sense to set a negative number as the limit or, as the unlimited value is <code>null</code>, setting it to zero.</p>
<p>This is the end code I'd likely write:</p>
<pre><code class="language-php">if (is_int($limit)) {
if ($limit &lt; 1) {
throw new InvalidArgumentException('A limit must be a positive integer.');
}
$query-&gt;range(0, $limit);
}
</code></pre>
<p>If the limit is not an integer, nothing happens.</p>
<p>It throws an Exception if the value is invalid - i.e. less than one.</p>
<p>The limit is applied if the limit is greater than or equal to one.</p>
<p>While it's more complex as there are more checks to perform and different types in use, I think this is clearer and easier for someone reading or implementing the code to understand what it does and use it correctly.</p>
summary: null
field_daily_email_cta: { }