On 06/14/2018 01:13 PM, Trey Harris wrote:
Just a small stylistic thing to mention:

On Thu, Jun 14, 2018 at 1:59 AM Todd Chester <toddandma...@zoho.com <mailto:toddandma...@zoho.com>> wrote:

    p6
            if not $dir.IO.d.bool {}
            for  slice  "\n", $WebStr   ->  $Line { }

       and on and on and so forth.  I know a lot of them by heart now.

By |.bool|, I assume you meant |.Bool|, but in any case, it isn’t necessary since the context of a |not| forces it to be boolean.

Indeed!

Exists (directory):
   DIRPATH.IO.d.Bool;
       if not $WorkingDir.IO.d.Bool { mkdir $WorkingDir, 0o766; }



If you want the opposite—a boolean without the sense-negation, you can use |so|, but in the context of an |if|, it should rarely, if ever, be necessary.

In the same way that |so| is used to explicitly truthify, unary |+| is used to explicitly numify.

E.g., once you know that an |IntStr| <https://docs.perl6.org/type/IntStr> dual value gives a result reminiscent of Perl 5’s string numbers (except that without going to crazy lengths, you can easily supply exactly the number and string you want):

|my $x = IntStr.new(42, "The Answer"); my $y = IntStr.new(0, "Nothing"); for ($x, $y) -> $z { printf "\$z: '%s', so \$z: '%s', +\$z: '%s'\n", $z, so $z, +$z; say " Double it: ", $z * 2; say " or 'double' it: ", $z x 2; } |

gives results:

|$z: 'The Answer', so $z: 'True', +$z: '42' Double it: 84 or 'double' it: The AnswerThe Answer $z: 'Nothing', so $z: 'False', +$z: '0' Double it: 0 or 'double' it: NothingNothing |

In case you’re wondering, you’ll usually have no reason to explicitly construct a dual value like that; you generally get a NumStr or its counterparts like IntStr when reading input or expecting command-line arguments.

(Also note that the stringification equivalent to |so| and unary |+| is |~|, but it wasn’t necessary above since the |%s| template to |sprintf| forces stringification. Also note that using s/printf at all is not encouraged—but it was useful above, just to make things explicit.)


Thank you!  Wonderful exposition! I am going to write it down
for later use.

I use "if not" a lot because it is human readable for
me and assists in maintaining the code.

Reply via email to