Allowing comments after the line continuation backslash
Lawrence D'Oliveiro
ldo at geek-central.gen.new_zealand
Wed Nov 10 01:48:49 EST 2010
In message <878w12kt5x.fsf.mdw at metalzone.distorted.org.uk>, Mark Wooding
wrote:
> Lawrence D'Oliveiro <ldo at geek-central.gen.new_zealand> writes:
>
>> Maybe you should look at the code in context
>> <https://github.com/ldo/dvd_menu_animator>, then you can express some
>> more opinions on how to improve it.
>
> 1. class keyval: `are there official symbolic names for these
> anywhere?' The gtk.keysyms module contains `Return', `KP_Enter',
> `Left', `Up', `Right', and `Down'.
Thanks, that’s useful. I couldn’t find mention of such in the documentation
anywhere.
> Question: why are `returnkey' and `enterkey' defined in hex and the
> others in decimal?
Can’t remember now. Does it matter?
> 2. The MainWindow class only has the `Window' attribute described in
> its definition. Apparently there are other attributes as well (the
> ColorMumbleList family for one, also `LayerDisplay'). Similarly,
> the LoadedImage class has attributes `Contents' and `FileName', but
> I see attributes `RowStride', `ImageDrawSize' and `SrcDimensions'
> used immediately below.
These are really just namespaces, one for the GUI context and the other for
the image data.
> 3. In SelectSaveMenu, there's a curious `for' loop:
>
> for State in (gtk.STATE_NORMAL,) : # no need for
> gtk.STATE_INSENSITIVE
> ## blah
>
> Firstly, this is obviously equivalent to `state = gtk.STATE_NORMAL'
> followed by the loop body (YAGNI).
It’s a tuple of one element. It used to be a tuple of two, and there is the
possibility it might need to become that again (as intimated at in the
attached comment). That’s why it stays a tuple.
> 4. Ahh! I've tracked down where the MainWindow is actually
> populated. Ugh. The code appears to revel in boilerplate. (For
> those at home, we're now looking at `SetupMainWindow', specifically
> at the calls to `DefineScrollingList'.) I count six calls, each
> nearly (but not quite) identical, of about eleven lines each.
Could be worse. Imagine if I had written out the 30 lines of that function
out each time instead.
> Of course, being boilerplate, the similarities visually outweigh the
> differences, when in fact it's the differences that are
> interesting.
That is generally how code reuse works. All the “boilerplate” is in the
function definition, so I just have to call it parameterized by the
differences appropriate to each instance.
> It doesn't help that all of the names of the things involved are so
> wretchedly verbose.
Oh please, no. Since when are explanatory names “wretchedly verbose”?
> How about the following?
>
> def make_listview_l1 ...
And what, pray tell, is the significance of the name “make_listview_l1”? If
there is something I would describe as “wretched”, it is the use of random
numerical suffixes like this.
> Looking at some of the rest of the code, it might (or might not) be
> worthwhile actually making a class to gather together a list's model
> and view; subclasses can then vary their individual parameters, and
> the various colour lists can also keep the various captions with
> them.
Most of that variation is already handled without the limitations of
thinking in classes. For example, selection of a colour in all three lists
is handled through a single EditColor routine. And of course you’ve already
seen how a single DefineScrollingList routine can be used to set up all the
scrolling lists used in this GUI.
> 5. Much of the indentation and layout is rather unconventional, though
> not intolerable. But I found (deep in `SelectSaveMenu'):
>
> NewRenderPixels = array.array \
> (
> "B",
> FillColor
> *
> (ImageRowStride // 4 * ImageBounds[1])
> )
>
> to be most disconcerting.
Is the structure of the expression not apparent to you? You’d probably need
plenty of fresh air after something like this, then:
PatternArray = array.array \
(
"I",
16 * (16 * (Light,) + 16 * (Dark,))
+
16 * (16 * (Dark,) + 16 * (Light,))
)
> Also, I couldn't work out why some parens are indented only two
> spaces and others are indented the full eight.
Eight?? You mean four.
See, this is why I should probably stop using tabs...
More information about the Python-list
mailing list