[Date Prev][Date Next][Thread Prev][Thread Next] [Search] [Date Index] [Thread Index]

Re: [MacPerl] The Powers of Annoy



> 
> This is a very BAD approach to programing style.  Entirely wrong-headed and
> deeply in need of attitude adjustment.  Rather than attempt to make your code
> more compact and "trickier", strive instead for structure, elegance, and
> readability.  perlstyle.pod is an excellent starting point, although I don't
> agree with TomC in all the particulars.  If you code the way he suggests, I
> can guarantee the no one will ever complain.  Conversely, post more code like
> your current example, and rather than complain, I'll just start sending you
> copies of my optometry bills. I'm sure that inducing that amount of eyestrain
> violates several workplace safety protocols as well! ;-)
> 
> Below, I haven't made any actual changes to your syntax.  You need to
> carefully consider your reasoning for changing things like the list seperator.
> It doesn't look to me like you're doing anything that *demands* it.  You're
> going through some unecessary gyrations with assigning values to scalars,
> which might make sense in the context of a larger program, but here just serve
> to fill up space.  Is it really more compact to assign "length($f)" to $fl,
> rather than just using "length($f)" where you need to?  Conversely, if you're
> going to use them, try giving your variables MEANINGFUL names!  Remember, life
> is not an obsfucated Perl contest! I would suggest both -w and "use strict" as
> excellent habits.  Declaring one's variables up front is just a good idea in
> general.  In particular, if you plan on keeping your code, rather than just
> tossing it away, the "strict" pragma will save you a ton of maintanance
> headaches down the road.
> 
> #!perl
> 
> $f = "54321";
> $fl= length($f);
> $e = 2**$fl-1;
> $" = ", ";
> @o = ($f, "", "");
> 
> print "\n\nThe Towers of Annoy\n\nInitial state: @o\n";
> 
> $y=0;
> $n=0;
> 
> until ($n >= $e) {
> chop(@o[$y]);  # Scalar value @o[$y] better written as $o[$y].
> $u = $y;
> $y=(($y+1)%3);
> $o[$y]
> .= "1";
> $n++;
> print "Move #$n: @o\n";
> unless ($n >= $e) {
> $p = @o[$u];
> $s = length($p);
> $g = substr($p,$s-1,1);
> $v = (3-($y+$u));
> $r = @o[$v];
> $t = length($r);
> $h = substr($r,$t-1,1);
> if ($h eq "") {
> chop(@o[$u]);
> @o[$v] .= $g
> }
> elsif (($g eq "") || ($h lt $g)) {
> chop(@o[$v]);
> @o[$u] .= $h
> }
> else
> {
> chop(@o[$u]);
> @o[$v] .= $g
> }
> $n++;
> print "Move #$n: @o\n";
> }
> }
> 
> __END__
> 
> The above is much more plesant on the eye, and the white-space effects the
> efficiency of the code not one whit at all.  It's still fairly opaque, unless
> you happen to have written it.  Please note my comment on Line 15 fo the code.
> You do this in several places, and -w would tell you about it if you used it.
> 
> Apply programmer hubris, and adopt the belief that all your code is destined
> for immortality.  Believe that others ADORE reading your code, and LOVE
> maintaining it, and then write code as if that were the literal truth.

Brian,

thanks for your adjustments and splitting up my code mess. As I don't like
bills (neither optometricians¹ nor Gates), I prefer to adjust a little. I'm
only glad this is a *virtual* meeting place, and "corporal punishment" is
only a word (or two words, but I'd rather count words than hits, i. e. if
it's not on my webpage).

Seriously: thanks for the time you took for your explanations!

Michael


# ===== Want to unsubscribe from this list?
# ===== Send mail with body "unsubscribe" to macperl-request@macperl.org