Updates to types and truthiness

This commit is contained in:
Adam Hollett
2015-10-15 17:01:53 -04:00
parent d63213d463
commit f2a1925033
2 changed files with 62 additions and 107 deletions
+4 -26
View File
@@ -6,7 +6,7 @@ In programming, we describe “truthy” and “falsy” as anything that return
## What is truthy? ## What is truthy?
All values in Liquid are truthy, with the exception of <tt>nil</tt> and <tt>false</tt>. All values in Liquid are truthy, with the exception of `nil` and `false`.
In the example below, the text “Tobi” is not a boolean, but it is truthy in a conditional: In the example below, the text “Tobi” is not a boolean, but it is truthy in a conditional:
@@ -17,7 +17,7 @@ This will always be true.
{% endif %} {% endif %}
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
[Strings](/themes/liquid-documentation/basics/types/#strings), even when empty, are truthy. The example below will result in empty HTML tags if <code>settings.fp_heading</code> is empty: [Strings](/themes/liquid-documentation/basics/types/#strings), even when empty, are truthy. The example below will result in empty HTML tags if `settings.fp_heading` is empty:
<p class="input">Input</p> <p class="input">Input</p>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
@@ -44,7 +44,7 @@ To avoid this, you can check to see if the string is <code>blank</code>, as foll
<hr/> <hr/>
An [EmptyDrop](/themes/liquid-documentation/basics/types/#empty-drop) is also truthy. In the example below, if <code>settings.page</code> is an empty string or set to a hidden or deleted object, you will end up with an EmptyDrop. The result is an undesirable empty &lt;div&gt;: An [EmptyDrop](/themes/liquid-documentation/basics/types/#empty-drop) is also truthy. In the example below, if `settings.page` is an empty string or set to a hidden or deleted object, you will end up with an EmptyDrop. The result is an undesirable empty &lt;div&gt;:
<p class="input">Input</p> <p class="input">Input</p>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
@@ -62,7 +62,7 @@ An [EmptyDrop](/themes/liquid-documentation/basics/types/#empty-drop) is also tr
## What is falsy? ## What is falsy?
The only values that are falsy in Liquid are <tt>nil</tt> and <tt>false</tt>. The only values that are falsy in Liquid are `nil` and `false`.
[nil](/themes/liquid-documentation/basics/types/#nil) is returned when a Liquid object doesn't have anything to return. For example, if a collection doesn't have a collection image, collection.image will be set to <tt>nil</tt>. Since that is “falsy”, you can do this: [nil](/themes/liquid-documentation/basics/types/#nil) is returned when a Liquid object doesn't have anything to return. For example, if a collection doesn't have a collection image, collection.image will be set to <tt>nil</tt>. Since that is “falsy”, you can do this:
@@ -93,25 +93,3 @@ The table below summarizes what is truthy or falsy in Liquid.
| collection with no products | &times; | | | collection with no products | &times; | |
| page | &times; | | | page | &times; | |
| EmptyDrop | &times; | | | EmptyDrop | &times; | |
+49 -72
View File
@@ -2,152 +2,129 @@
title: Types title: Types
--- ---
Liquid objects can return one of six types: String, Number, Boolean, Nil, Array, or EmptyDrop. Liquid variables can be initialized by using the <a href="/themes/liquid-documentation/tags/variable-tags/#assign">assign</a> or <a href="/themes/liquid-documentation/tags/variable-tags/#capture">capture</a> tags. Liquid objects can return one of six types:
- [string](#string)
- [number](#number)
- boolean
- nil
- array
- EmptyDrop
Liquid variables can be initialized by using the [assign](/tags/#assign) or [capture](/tags/#capture) tags.
### Strings ### String
Strings are declared by wrapping the variable's value in single or double quotes. Strings are declared by wrapping a variable's value in single or double quotes.
<div> {% highlight liquid %}
{% raw %} {% raw %}
{% assign my_string = "Hello World!" %} {% assign my_string = "Hello World!" %}
{% endraw %} {% endraw %}
</div> {% endhighlight %}
### Number
### Numbers
Numbers include floats and integers. Numbers include floats and integers.
<div> {% highlight liquid %}
{% raw %} {% raw %}
{% assign my_num = 25 %} {% assign my_int = 25 %}
{% assign my_float = 39.756 %}
{% endraw %} {% endraw %}
</div> {% endhighlight %}
### Booleans ### Booleans
Booleans are either true or false. No quotations are necessary when declaring a boolean. Booleans are either `true` or `false`. No quotations are necessary when declaring a boolean.
<div> {% highlight liquid %}
{% raw %} {% raw %}
{% assign foo = true %} {% assign foo = true %}
{% assign bar = false %} {% assign bar = false %}
{% endraw %} {% endraw %}
</div> {% endhighlight %}
### Nil ### Nil
Nil is an empty value that is returned when Liquid code has no results. It is **not** a string with the characters "nil". Nil is a special empty value that is returned when Liquid code has no results. It is **not** a string with the characters "nil".
Nil is treated as false in the conditions of &#123;% if %&#125; blocks and other Liquid tags that check for the truthfulness of a statement. The example below shows a situation where a fulfillment does not yet have a tracking number entered. The if statement would not render the included text within it. Nil is treated as false in the conditions of `if` blocks and other Liquid tags that check the truthfulness of a statement.
In the following example, if the user does not exist (that is, `user` returns `nil`), Liquid will not print the greeting:
{% highlight liquid %}
{% raw %} {% raw %}
{% if fulfillment.tracking_numbers %} {% if user %}
We have a tracking number! Hello {{ user.name }}!
{% endif %} {% endif %}
{% endraw %} {% endraw %}
{% endhighlight %}
Any tags or outputs that return nil will not show anything on the screen. Tags or outputs that return `nil` will not print anything to the page.
<p class="input">Input</p> <p class="input">Input</p>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
Tracking number: {{ fulfillment.tracking_numbers }} The current user is {{ user.name }}
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
<p class="output">Output</p> <p class="output">Output</p>
<div>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
Tracking number: The current user is
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
</div>
### Arrays ### Arrays
Arrays hold a list of variables of all types. Arrays hold lists of variables of any type.
#### Accessing all items in an array #### Accessing items in arrays
To access items in an array, you can loop through each item in the array using a <a href="/themes/liquid-documentation/tags/#for">for</a> tag or a <a href="/themes/liquid-documentation/tags/#tablerow">tablerow</a> tag. To access items in an array, you can loop through each item in the array using a [for](/tags/#for) or [tablerow](/tags/#tablerow) tag.
<p class="input">Input</p> <p class="input">Input</p>
<div>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
<!-- if product.tags = "sale", "summer", "spring", "wholesale" --> <!-- if site.users = "Tobi", "Lina", "Tetsuro", "Adam" -->
{% for tag in product.tags %} {% for user in site.users %}
{{ tag }} {{ user }}
{% endfor %} {% endfor %}
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
</div>
<p class="output">Output</p> <p class="output">Output</p>
<div>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
sale summer spring wholesale Tobi Lina Tetsuro Adam
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
</div>
#### Accessing a specific item in an array #### Accessing a specific item in an array
You can use square brackets ( [ ] ) notation to access a specific item in an array. Array indexing starts at zero. You can use square bracket `[ ]` notation to access a specific item in an array. Array indexing starts at zero.
<p class="input">Input</p> <p class="input">Input</p>
<div>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
<!-- if product.tags = "sale", "summer", "spring", "wholesale" --> <!-- if site.users = "Tobi", "Lina", "Tetsuro", "Adam" -->
{{ product.tags[0] }} {{ site.users[0] }}
{{ product.tags[1] }} {{ site.users[1] }}
{{ product.tags[2] }} {{ site.users[3] }}
{{ product.tags[3] }}
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
</div>
<p class="output">Output</p> <p class="output">Output</p>
<div>
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
sale Tobi
summer Lina
spring Adam
wholesale
{% endraw %}{% endhighlight %} {% endraw %}{% endhighlight %}
</div>
#### Initializing an array #### Initializing an array
It is not possible to initialize an array in Liquid. For example, in Javascript you could do something like this: It is not possible to initialize an array using only Liquid.
<div>
{% highlight html %}{% raw %}
<script>
var cars = ["Saab", "Volvo", "BMW"];
</script>
{% endraw %}{% endhighlight %}
</div>
In Liquid, you must instead use the <code>split</code> filter to break a single string into an array of substrings. See <a href="/themes/liquid-documentation/filters/string-filters/#split">here</a> for examples.
You can, howver, use the [split](/filters/#split) filter to break a single string into an array of substrings.
## EmptyDrop ## EmptyDrop
An EmptyDrop object is returned whenever you try to access a non-existent object (for example, a collection, page or blog that was deleted or hidden) by [handle](/themes/liquid-documentation/basics/handle). In the example below, <code>page_1</code>, <code>page_2</code> and <code>page_3</code> are all EmptyDrop objects. An EmptyDrop object is returned whenever you try to access a non-existent object (for example, a collection, page or blog that was deleted or hidden) by [handle](/basics/#Handles). In the example below, `page_1`, `page_2` and `page_3` are all EmptyDrop objects.
{% highlight html %}{% raw %} {% highlight html %}{% raw %}
{% assign variable = "hello" %} {% assign variable = "hello" %}