blob: 17b9c0954a9622c9b143fb1733aa1c2a5e73bdda [file] [log] [blame]
<!doctype html>
<!-- Generated by FreeMarker/Docgen from DocBook -->
<html lang="en" class="page-type-section">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>Basics - FreeMarker Manual</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="format-detection" content="telephone=no">
<meta property="og:site_name" content="FreeMarker Manual">
<meta property="og:title" content="Basics">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="http://example.com/dgui_datamodel_basics.html">
<link rel="canonical" href="http://example.com/dgui_datamodel_basics.html">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1594338517553">
</head>
<body itemscope itemtype="https://schema.org/Code">
<meta itemprop="url" content="http://example.com/">
<meta itemprop="name" content="FreeMarker Manual">
<!--[if lte IE 9]>
<div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
<![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://example.com" role="banner"> <img itemprop="image" src="logo.png" alt="My Logo">
</a></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">FreeMarker Manual</a><div class="navigation-header"></div></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author&#39;s Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel.html"><span itemprop="name">Values, Types</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="ref.html">Reference</a></li><li><a href="app_faq.html">FAQ</a></li><li><a href="preface.html#test_target">Bőregér</a></li></ul></div></div></div> <div class="main-content site-width">
<div class="content-wrapper no-toc">
<div id="table-of-contents-wrapper" class="col-left">
</div>
<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.html"><span>Next</span></a></div><div class="title-wrapper">
<h1 class="content-header header-section1" id="dgui_datamodel_basics" itemprop="headline">Basics</h1>
</div></div><div class="page-menu">
<div class="page-menu-title">Page Contents</div>
<ul><li><a class="page-menu-link" href="#topic.value" data-menu-target="topic.value">What is a value?</a></li><li><a class="page-menu-link" href="#autoid_13" data-menu-target="autoid_13">What is type?</a></li><li><a class="page-menu-link" href="#autoid_14" data-menu-target="autoid_14">The data-model is a hash</a></li></ul> </div> <div class="callout note">
<strong class="callout-label">Note:</strong>
<p>It is assumed that you have already read the <a href="dgui_quickstart.html">Getting Started</a> chapter.</p>
</div>
<p>Understanding the concept of values and types is crucial for the
understanding of data-models. However, the concept of values and types
is not confined to data-models, as you will see.</p>
<h2 class="content-header header-section2" id="topic.value">What is a value?</h2>
<p><span class="marked-for-programmers">Real programmers can safely skip
this section.</span></p>
<p>Examples of <em>values</em> as you know the term
from the everyday math are 16, 0.5, and so on, i.e. numbers. In the
case of computer languages the value term has a wider meaning, as a
value needn&#39;t be a number. For example, take this data-model:</p>
<div class="code-wrapper"><pre class="code-block code-data-model"><a name="example.stdDataModel"></a>(root)
|
+- user = &quot;Big Joe&quot;
|
+- today = Jul 6, 2007
|
+- todayHoliday = false
|
+- lotteryNumbers
| |
| +- (1st) = 20
| |
| +- (2st) = 14
| |
| +- (3rd) = 42
| |
| +- (4th) = 8
| |
| +- (5th) = 15
|
+- cargo
|
+- name = &quot;coal&quot;
|
+- weight = 40</pre></div>
<p>We say that the <em>value</em> of the the
<code class="inline-code">user</code> variable is &quot;Big Joe&quot; (a string), the
<em>value</em> of <code class="inline-code">today</code> is Jul 6,
2007 (a date), the <em>value</em> of
<code class="inline-code">todayHoliday</code> is false (a boolean, ie. a yes/no
thing). The <em>value</em> of
<code class="inline-code">lotteryNumbers</code> is the sequence that contains 20,
14, 42, 8, 15. Surely <code class="inline-code">lotteryNumbers</code> is multiple
values in the sense that it <em>contains</em> multiple
values (for example, the 2nd item in it is a the
<em>value</em> 14), but still,
<code class="inline-code">lotteryNumbers</code> itself is a single value. It&#39;s
like a box that contains many other items; the whole box can be seen
as a single item. Last not least we also have the
<em>value</em> of <code class="inline-code">cargo</code>, which is a
hash (a box-like thing again).So, a value is something that can be
stored in a variable (e.g., in <code class="inline-code">user</code> or
<code class="inline-code">cargo</code> or <code class="inline-code">cargo.name</code>). But a
value need not be stored in a variable to be called a value, for
example we have the value 100 here:</p>
<div class="code-wrapper"><pre class="code-block code-template">&lt;#if cargo.weight &lt; <strong>100</strong>&gt;Light cargo&lt;/#if&gt;</pre></div>
<p>Or the temporaly result of a calculations are also called
values, like 20 and 120 when this template is executed (it will
print 120):</p>
<div class="code-wrapper"><pre class="code-block code-template">${cargo.weight / 2 + 100}</pre></div>
<p>Explanation for this last: As the result of dividing the two
values, 40 (the weight of the cargo) and 2, a new value 20 is
created. Then 100 is addted to it, so the value 120 is created. Then
120 is printed
(<code class="inline-code">${<em class="code-color">...</em>}</code>), and the
template execution goes on and all these values gone.</p>
<p>Certainly now you feel what the value term means.</p>
<h2 class="content-header header-section2" id="autoid_13">What is type?</h2>
<p>Values have an important aspect, their type. For example the
type of the value of the <code class="inline-code">user</code> variable is string,
and the type of the value of the <code class="inline-code">lotteryNumbers</code>
variable is sequence. The type of a value is important because it
determines to a large extent how and where you can use the value.
Like <code class="inline-code">${user / 2}</code> is an error, but
<code class="inline-code">${cargo.weight / 2}</code> works and prints 20, since
division only does make sense for a number, but not for a string.
Or, using dot like in <code class="inline-code">cargo.name</code> does make sense
only if <code class="inline-code">cargo</code> is a hash. Or, you can list with
<code class="inline-code">&lt;#list <em class="code-color">...</em>&gt;</code>
sequences only. Or, the condition of <code class="inline-code">&lt;#if
...&gt;</code> must be a boolean. And so on.</p>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p>A little terminology... Saying &quot;a boolean&quot; or &quot;a boolean
value&quot; or &quot;a value of type boolean&quot; are all the same.</p>
</div>
<p><a name="topic.multitype"></a>A value can have multiple types at the same time,
although it&#39;s rarely utilized. For example in the data-model below
<code class="inline-code">mouse</code> is both a string and a hash:</p>
<div class="code-wrapper"><pre class="code-block code-data-model">(root)
|
+- mouse = &quot;Yerri&quot;
|
+- age = 12
|
+- color = &quot;brown&quot;</pre></div>
<p>If you merge this template with the above data-model:</p>
<div class="code-wrapper"><pre class="code-block code-template">${mouse} &lt;#-- uses mouse as a string --&gt;
${mouse.age} &lt;#-- uses mouse as a hash --&gt;
${mouse.color} &lt;#-- uses mouse as a hash --&gt;</pre></div>
<p>the output will be:</p>
<div class="code-wrapper"><pre class="code-block code-output">Yerri
12
brown</pre></div>
<h2 class="content-header header-section2" id="autoid_14">The data-model is a hash</h2>
<p>Looking at the various data-model examples you may already
realized: the thing marked as &quot;(root)&quot; is just a value of type hash.
When you write something like <code class="inline-code">user</code>, that means
that you want the &quot;user&quot; variable stored in the root hash. Like if
you were writing <code class="inline-code">root.user</code>, except that there is
no variable called &quot;root&quot; so that wouldn&#39;t work.</p>
<p>Some may get confused by the fact that our example data-model,
that is, the root hash, contains further hashes and sequences
(<code class="inline-code">lotteryNumbers</code> and <code class="inline-code">cargo</code>).
There is nothing special in that. A hash contains other variables,
and those variables have a value, which can be a string, a number,
etc., and of course it can be a hash or sequence as well. Because,
as it was explained earlier, a sequence or a hash is just a value,
like a string or a number is.</p>
<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.html"><span>Next</span></a></div></div></div></div> </div>
</div>
<div class="site-footer"><div class="site-width"><div class="footer-bottom"> <p class="last-generated">
Last generated:
<time itemprop="dateModified" datetime="2020-07-09T23:48:37Z" title="Thursday, July 9, 2020 11:48:37 PM GMT">2020-07-09 23:48:37 GMT</time> </p>
<p class="copyright">
© <span itemprop="copyrightYear">1999</span>–2020
<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a> </p>
</div></div></div></body>
</html>