On 06 Feb 2012 at 09:48, Adam Richardson <simples...@gmail.com> wrote: 

> On Mon, Feb 6, 2012 at 4:25 AM, Adam Richardson <simples...@gmail.com>wrote:
>
>> On Mon, Feb 6, 2012 at 4:07 AM, Tim Streater <t...@clothears.org.uk> wrote:

>> I disagree that the nested function is a straw-man. I (just as the other
>> authors I'd linked to describing the "arrow" pattern of code) have seen
>> plenty of examples of similar code.

I guess what I meant was, that I'd never have written it that way in the first 
place, so as an example it felt contrived. Amateurs or people with no training 
(in particular physicists at CERN 40 years ago) should be kept well clear of 
the goto. I'd probably write your function like this:

function val_nested ($name = null, $value = null, $is_mutable = false)
     {

     static $values   = array();
     static $mutables = array();

     if  ($name===null)  return $values;

     if  ($value===null)  return isset($values[$name]) ? $values[$name] : null;

     if  (isset($values[$name]))
          {

          if (!$val_is_mutable = in_array($name, $mutables))    // Set existing 
value
               {
               $msg = 'The value "' . $name . '" is immutable and has already 
been set to ' . $values[$name] . '.';
               throw new Exception ($msg);
               }

          return $values[$name] = $value;

          }

     if ($is_mutable)  $mutables[] = $name;                     // Set new value
     $values[$name] = $value;

     return $value;

     }


I always add blank lines for clarity. Remove those and the above is 30% shorter 
than yours - as far as I could tell, none of the else clauses was required.

My approach is:

1) deal with the trivial and error cases first

2) deal with the real work next

--
Cheers  --  Tim

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to