1
0
Fork 0
cl-sites/guile.html_node/Why-Use-Keywords_003f.html
2024-12-17 12:49:28 +01:00

121 lines
4.8 KiB
HTML

<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>Why Use Keywords? (Guile Reference Manual)</title>
<meta name="description" content="Why Use Keywords? (Guile Reference Manual)">
<meta name="keywords" content="Why Use Keywords? (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Keywords.html" rel="up" title="Keywords">
<link href="Coding-With-Keywords.html" rel="next" title="Coding With Keywords">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsubsection-level-extent" id="Why-Use-Keywords_003f">
<div class="nav-panel">
<p>
Next: <a href="Coding-With-Keywords.html" accesskey="n" rel="next">Coding With Keywords</a>, Up: <a href="Keywords.html" accesskey="u" rel="up">Keywords</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsubsection" id="Why-Use-Keywords_003f-1"><span>6.6.7.1 Why Use Keywords?<a class="copiable-link" href="#Why-Use-Keywords_003f-1"> &para;</a></span></h4>
<p>Keywords are useful in contexts where a program or procedure wants to be
able to accept a large number of optional arguments without making its
interface unmanageable.
</p>
<p>To illustrate this, consider a hypothetical <code class="code">make-window</code>
procedure, which creates a new window on the screen for drawing into
using some graphical toolkit. There are many parameters that the caller
might like to specify, but which could also be sensibly defaulted, for
example:
</p>
<ul class="itemize mark-bullet">
<li>color depth &ndash; Default: the color depth for the screen
</li><li>background color &ndash; Default: white
</li><li>width &ndash; Default: 600
</li><li>height &ndash; Default: 400
</li></ul>
<p>If <code class="code">make-window</code> did not use keywords, the caller would have to
pass in a value for each possible argument, remembering the correct
argument order and using a special value to indicate the default value
for that argument:
</p>
<div class="example lisp">
<pre class="lisp-preformatted">(make-window 'default ;; Color depth
'default ;; Background color
800 ;; Width
100 ;; Height
...) ;; More make-window arguments
</pre></div>
<p>With keywords, on the other hand, defaulted arguments are omitted, and
non-default arguments are clearly tagged by the appropriate keyword. As
a result, the invocation becomes much clearer:
</p>
<div class="example lisp">
<pre class="lisp-preformatted">(make-window #:width 800 #:height 100)
</pre></div>
<p>On the other hand, for a simpler procedure with few arguments, the use
of keywords would be a hindrance rather than a help. The primitive
procedure <code class="code">cons</code>, for example, would not be improved if it had to
be invoked as
</p>
<div class="example lisp">
<pre class="lisp-preformatted">(cons #:car x #:cdr y)
</pre></div>
<p>So the decision whether to use keywords or not is purely pragmatic: use
them if they will clarify the procedure invocation at point of call.
</p>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Coding-With-Keywords.html">Coding With Keywords</a>, Up: <a href="Keywords.html">Keywords</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>