Additions and clarifications to tutorial 1.

This commit is contained in:
ReneSac 2014-04-17 21:28:08 -03:00
commit e2fe9dd9ab

View file

@ -150,6 +150,19 @@ the syntax, watch their indentation:
**Note**: To comment out a large piece of code, it is often better to use a **Note**: To comment out a large piece of code, it is often better to use a
``when false:`` statement. ``when false:`` statement.
.. code-block:: nimrod
when false:
brokenCode()
Another option is to use the `discard`_ statement together with
*long string literals* to create block comments:
.. code-block:: nimrod
discard """ You can have any nimrod code text commented
out inside this with no indentation restrictions.
yes("May I ask a pointless question?") """
Numbers Numbers
------- -------
@ -575,27 +588,44 @@ Some terminology: in the example ``question`` is called a (formal) *parameter*,
Result variable Result variable
--------------- ---------------
A procedure that returns a value has an implicit ``result`` variable that A procedure that returns a value has an implicit ``result`` variable declared
represents the return value. A ``return`` statement with no expression is a that represents the return value. A ``return`` statement with no expression is a
shorthand for ``return result``. So all three code snippets are equivalent: shorthand for ``return result``. The ``result`` value is always returned
automatically at the end a procedure if there is no ``return`` statement at
the exit.
.. code-block:: nimrod .. code-block:: nimrod
return 42 proc sumTillNegative(x: varargs[int]): int =
for i in x:
.. code-block:: nimrod if i < 0:
result = 42
return return
result = result + i
.. code-block:: nimrod echo sumTillNegative() # echos 0
result = 42 echo sumTillNegative(3, 4, 5) # echos 12
return result echo sumTillNegative(3, 4 , -1 , 6) # echos 7
The ``result`` variable is already implicitly declared at the start of the
function and initialised with the type's default value, so declaring it again
with 'var return', for example, would shadow it with a normal variable of the
same name.
Parameters Parameters
---------- ----------
Parameters are constant in the procedure body. Their value cannot be changed Parameters are constant in the procedure body. By default, their value cannot be
because this allows the compiler to implement parameter passing in the most changed because this allows the compiler to implement parameter passing in the
efficient way. If the procedure needs to modify the argument for the most efficient way. If a mutable variable is needed inside the procedure, it has
to be declared with ``var`` in the procedure body. Shadowing the parameter name
is possible, and actually an idiom:
.. code-block:: nimrod
proc printSeq(s: seq, nprinted: int = -1) =
var nprinted = if nprinted == -1: s.len else: min(nprinted, s.len)
for i in 0 .. <nprinted:
echo s[i]
If the procedure needs to modify the argument for the
caller, a ``var`` parameter can be used: caller, a ``var`` parameter can be used:
.. code-block:: nimrod .. code-block:: nimrod
@ -634,6 +664,9 @@ been declared with the ``discardable`` pragma:
p(3, 4) # now valid p(3, 4) # now valid
The discard statement can also be used to create block comments as described
in the `Comments`_.
Named arguments Named arguments
--------------- ---------------