146 lines
5.1 KiB
YAML
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 > 0) {
|
|
$query->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->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 < 1) {
|
|
throw new InvalidArgumentException('A limit must be a positive integer.');
|
|
}
|
|
|
|
$query->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 > 0) {
|
|
$query->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->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 < 1) {
|
|
throw new InvalidArgumentException('A limit must be a positive integer.');
|
|
}
|
|
|
|
$query->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: { }
|